Automatizace přidání uživatele testovacího prostředí do testovacího prostředí v Azure DevTest Labs
Azure DevTest Labs umožňuje rychle vytvářet samoobslužná vývojová prostředí pomocí webu Azure Portal. Pokud ale máte několik týmů a několik instancí DevTest Labs, může automatizace procesu vytváření ušetřit čas. Šablony Azure Resource Manageru umožňují vytvářet testovací prostředí, testovací virtuální počítače, vlastní image, vzorce a přidávat uživatele automatizovaným způsobem. Tento článek se konkrétně zaměřuje na přidání uživatelů do instance DevTest Labs.
Pokud chcete přidat uživatele do testovacího prostředí, přidáte ho do role uživatele DevTest Labs pro testovací prostředí. V tomto článku se dozvíte, jak automatizovat přidání uživatele do testovacího prostředí jedním z následujících způsobů:
- Šablony Azure Resource Manageru
- Rutiny Azure PowerShellu
- Rozhraní příkazového řádku Azure.
Použití šablon Azure Resource Manageru
Následující ukázková šablona Resource Manageru určuje uživatele, který se má přidat do role uživatele DevTest Labs testovacího prostředí.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"principalId": {
"type": "string",
"metadata": {
"description": "The objectId of the user, group, or service principal for the role."
}
},
"labName": {
"type": "string",
"metadata": {
"description": "The name of the lab instance to be created."
}
},
"roleAssignmentGuid": {
"type": "string",
"metadata": {
"description": "Guid to use as the name for the role assignment."
}
}
},
"variables": {
"devTestLabUserRoleId": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/111111111-0000-0000-11111111111111111')]",
"fullDevTestLabUserRoleName": "[concat(parameters('labName'), '/Microsoft.Authorization/', parameters('roleAssignmentGuid'))]",
"roleScope": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.DevTestLab/labs/', parameters('labName'))]"
},
"resources": [
{
"apiVersion": "2016-05-15",
"type": "Microsoft.DevTestLab/labs",
"name": "[parameters('labName')]",
"location": "[resourceGroup().location]"
},
{
"apiVersion": "2016-07-01",
"type": "Microsoft.DevTestLab/labs/providers/roleAssignments",
"name": "[variables('fullDevTestLabUserRoleName')]",
"properties": {
"roleDefinitionId": "[variables('devTestLabUserRoleId')]",
"principalId": "[parameters('principalId')]",
"scope": "[variables('roleScope')]"
},
"dependsOn": [
"[resourceId('Microsoft.DevTestLab/labs', parameters('labName'))]"
]
}
]
}
Pokud přiřazujete roli ve stejné šabloně, která vytváří testovací prostředí, nezapomeňte přidat závislost mezi prostředkem přiřazení role a testovacím prostředím. Další informace najdete v článku Definování závislostí v šablonách Azure Resource Manageru.
Informace o zdroji přiřazení role
Zdroj přiřazení role musí zadat typ a název.
První věcí, kterou je potřeba si uvědomit, je, že typ prostředku není Microsoft.Authorization/roleAssignments
takový, jako by byl pro skupinu prostředků. Místo toho se typ prostředku řídí vzorem {provider-namespace}/{resource-type}/providers/roleAssignments
. V tomto případě bude Microsoft.DevTestLab/labs/providers/roleAssignments
typ prostředku .
Název přiřazení role musí být globálně jedinečný. Název přiřazení používá vzor {labName}/Microsoft.Authorization/{newGuid}
. Jedná se newGuid
o hodnotu parametru šablony. Zajišťuje, že název přiřazení role je jedinečný. Vzhledem k tomu, že neexistují žádné funkce šablon pro vytváření identifikátorů GUID, je nutné vygenerovat identifikátor GUID sami pomocí libovolného nástroje generátoru GUID.
V šabloně je název přiřazení role definován proměnnou fullDevTestLabUserRoleName
. Přesná čára ze šablony je:
"fullDevTestLabUserRoleName": "[concat(parameters('labName'), '/Microsoft.Authorization/', parameters('roleAssignmentGuid'))]"
Vlastnosti zdroje přiřazení role
Samotné přiřazení role definuje tři vlastnosti. Potřebuje , roleDefinitionId
principalId
a scope
.
Definice role
ID definice role je identifikátor řetězce pro existující definici role. ID role je ve formuláři /subscriptions/{subscription-id}/providers/Microsoft.Authorization/roleDefinitions/{role-definition-id}
.
ID předplatného se získá pomocí subscription().subscriptionId
funkce šablony.
Musíte získat definici role pro DevTest Labs User
předdefinované role. Pokud chcete získat identifikátor GUID pro roli uživatele DevTest Labs, můžete použít rozhraní REST API přiřazení rolí nebo rutinu Get-AzRoleDefinition .
$dtlUserRoleDefId = (Get-AzRoleDefinition -Name "DevTest Labs User").Id
ID role je definováno v části proměnných a pojmenované devTestLabUserRoleId
. V šabloně je ID role nastaveno na: 1111111111-0000-0000-11111111111111111111111.
"devTestLabUserRoleId": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/111111111-0000-0000-11111111111111111')]",
ID objektu zabezpečení
ID objektu je ID objektu uživatele, skupiny nebo instančního objektu služby Active Directory, který chcete přidat jako uživatele testovacího prostředí do testovacího prostředí. Šablona používá ObjectId
jako parametr.
Id objektu můžete získat pomocí rutin PowerShellu Get-AzADUser, Get-AzADGroup nebo Get-AzADServicePrincipal. Tyto rutiny vrátí jeden objekt nebo seznam objektů služby Active Directory, které mají vlastnost ID, což je ID objektu, které potřebujete. Následující příklad ukazuje, jak získat ID objektu jednoho uživatele ve společnosti.
$userObjectId = (Get-AzADUser -UserPrincipalName 'email@company.com').Id
Můžete také použít rutiny Microsoft Graph PowerShellu, které zahrnují Get-MgUser, Get-MgGroup a Get-MgServicePrincipal.
Obor
Rozsah určuje prostředek nebo skupinu prostředků, pro kterou se má přiřazení role použít. U prostředků je rozsah ve formátu: /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/{provider-namespace}/{resource-type}/{resource-name}
. Šablona používá subscription().subscriptionId
funkci k vyplnění subscription-id
části a resourceGroup().name
funkce šablony k vyplnění resource-group-name
části. Použití těchto funkcí znamená, že testovací prostředí, ke kterému přiřazujete roli, musí existovat v aktuálním předplatném a stejné skupině prostředků, ke které se nasazuje šablona. Poslední část, resource-name
je název laboratoře. Tato hodnota se přijímá prostřednictvím parametru šablony v tomto příkladu.
Obor role v šabloně:
"roleScope": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.DevTestLab/labs/', parameters('labName'))]"
Nasazení šablony
Nejprve vytvořte soubor parametrů (například azuredeploy.parameters.json), který předává hodnoty parametrů v šabloně Resource Manageru.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"principalId": {
"value": "aaaaaaaa-bbbb-cccc-1111-222222222222"
},
"labName": {
"value": "MyLab"
},
"roleAssignmentGuid": {
"value": "22222222-2222-2222-2222-222222222222"
}
}
}
Pak pomocí rutiny PowerShellu New-AzResourceGroupDeployment nasaďte šablonu Resource Manageru. Následující ukázkový příkaz přiřadí osobě, skupině nebo instančnímu objektu roli uživatele DevTest Labs pro testovací prostředí.
New-AzResourceGroupDeployment -Name "MyLabResourceGroup-$(New-Guid)" -ResourceGroupName 'MyLabResourceGroup' -TemplateParameterFile .\azuredeploy.parameters.json -TemplateFile .\azuredeploy.json
Poznámka:
Název nasazení skupiny a identifikátor GUID přiřazení role musí být jedinečný. Pokud se pokusíte nasadit přiřazení prostředků pomocí ne jedinečného identifikátoru GUID, zobrazí RoleAssignmentUpdateNotPermitted
se chyba.
Pokud chcete šablonu použít několikrát k přidání několika objektů Active Directory do role uživatele DevTest Labs pro vaše cvičení, zvažte použití dynamických objektů v příkazu PowerShellu. Následující příklad používá rutinu New-Guid k dynamickému určení názvu nasazení skupiny prostředků a identifikátoru GUID přiřazení role.
New-AzResourceGroupDeployment -Name "MyLabResourceGroup-$(New-Guid)" -ResourceGroupName 'MyLabResourceGroup' -TemplateFile .\azuredeploy.json -roleAssignmentGuid "$(New-Guid)" -labName "MyLab" -principalId "aaaaaaaa-bbbb-cccc-1111-222222222222"
Použití Azure Powershell
Jak je popsáno v úvodu, vytvoříte nové přiřazení role Azure, které přidá uživatele do role uživatele DevTest Labs pro testovací prostředí. V PowerShellu to uděláte pomocí rutiny New-AzRoleAssignment . Tato rutina má mnoho volitelných parametrů, které umožňují flexibilitu. , ObjectId
SigninName
nebo ServicePrincipalName
lze zadat jako objekt, který má udělená oprávnění.
Tady je ukázkový příkaz Azure PowerShellu, který přidá uživatele do role uživatele DevTest Labs v zadaném testovacím prostředí.
New-AzRoleAssignment -UserPrincipalName <email@company.com> -RoleDefinitionName 'DevTest Labs User' -ResourceName '<Lab Name>' -ResourceGroupName '<Resource Group Name>' -ResourceType 'Microsoft.DevTestLab/labs'
Chcete-li určit prostředek, ke kterému jsou udělena oprávnění, lze určit kombinací ResourceName
, ResourceType
ResourceGroup
nebo parametremscope
. Bez ohledu na použití kombinace parametrů poskytněte rutině dostatek informací k jedinečné identifikaci objektu služby Active Directory (uživatel, skupina nebo instanční objekt), obor (skupina prostředků nebo prostředek) a definice role.
Použití Azure CLI
V Azure CLI se přidání uživatele testovacího prostředí do testovacího prostředí provádí pomocí az role assignment create
příkazu. Další informace o rutinách Azure CLI najdete v tématu Přidání nebo odebrání přiřazení rolí Azure pomocí Azure CLI.
Objekt, který má udělený přístup, lze určit parametrem objectId
, signInName
, spn
. Testovací prostředí, ke kterému má objekt udělený přístup, lze identifikovat adresou scope
URL nebo kombinací resource-name
parametrů , resource-type
a resource-group
parametrů.
Následující příklad Azure CLI ukazuje, jak přidat osobu do role uživatele DevTest Labs pro zadané testovací prostředí.
az role assignment create --roleName "DevTest Labs User" --signInName <email@company.com> -–resource-name "<Lab Name>" --resource-type "Microsoft.DevTestLab/labs" --resource-group "<Resource Group Name>" --role Contributor --scope /subscriptions/<SubscriptionID>/resourceGroups/<ResourceGroupName>
Další kroky
Podívejte se na následující články: