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á prostředí pro vývoj a testování pomocí 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 Manager umožňují vytvářet testovací prostředí, virtuální počítače testovacího prostředí, vlastní image, vzorce a automaticky přidávat uživatele. Tento článek se konkrétně zaměřuje na přidávání uživatelů do instance DevTest Labs.

Pokud chcete přidat uživatele do testovacího prostředí, přidejte 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
  • Azure CLI

Použití šablon Azure Resource Manageru

Následující ukázková šablona Resource Manager určuje uživatele, který má být přidán 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 Manager.

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/roleAssignmentstyp prostředku .

Samotný 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}. Je newGuid hodnota parametru pro šablonu. Zajišťuje, aby název přiřazení role byl jedinečný. Vzhledem k tomu, že pro vytváření identifikátorů GUID neexistují žádné funkce šablon, musíte identifikátor GUID vygenerovat sami pomocí libovolného nástroje pro generování identifikátorů GUID.

V šabloně je název přiřazení role definován proměnnou fullDevTestLabUserRoleName . Přesný řádek ze šablony je:

"fullDevTestLabUserRoleName": "[concat(parameters('labName'), '/Microsoft.Authorization/', parameters('roleAssignmentGuid'))]"

Vlastnosti zdroje přiřazení role

Přiřazení role samo definuje tři vlastnosti. Potřebuje , roleDefinitionIdprincipalIda scope.

Definice role

ID definice role je identifikátor řetězce pro existující definici role. ID role je ve tvaru /subscriptions/{subscription-id}/providers/Microsoft.Authorization/roleDefinitions/{role-definition-id}.

ID předplatného se získá pomocí subscription().subscriptionId funkce šablony.

Potřebujete získat definici role pro DevTest Labs User předdefinovanou roli. 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 variables a pojmenované devTestLabUserRoleId. V šabloně je ID role nastavené na: 11111111-0000-0000-111111111111111111111.

"devTestLabUserRoleId": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/111111111-0000-0000-11111111111111111')]",

ID objektu zabezpečení

ID objektu zabezpečení 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 parametr jako parametr .

Id objektu můžete získat pomocí rutin PowerShellu Get-AzureRMADUser, [Get-AzureRMADGroup nebo Get-AzureRMADServicePrincipal . Tyto rutiny vrátí jeden nebo seznamy 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-AzureRmADUser -UserPrincipalName 'email@company.com').Id

Můžete také použít rutiny Prostředí Microsoft Graph PowerShell, které zahrnují Rutiny Get-MgUser, Get-MgGroup a Get-MgServicePrincipal.

Obor

Obor určuje prostředek nebo skupinu prostředků, pro které se má přiřazení role vztahovat. U prostředků je obor ve tvaru : /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 funkci š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 ve stejné skupině prostředků, do které se provádí nasazení šablony. Poslední část , resource-nameje název testovacího prostředí. 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 Manager.

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "principalId": {
      "value": "11111111-1111-1111-1111-111111111111"
    },
    "labName": {
      "value": "MyLab"
    },
    "roleAssignmentGuid": {
      "value": "22222222-2222-2222-2222-222222222222"
    }
  }
}

Pak pomocí rutiny Prostředí PowerShell New-AzureRmResourceGroupDeployment nasaďte šablonu Resource Manager. Následující ukázkový příkaz přiřadí osobu, skupinu nebo instanční objekt roli uživatele DevTest Labs pro testovací prostředí.

New-AzureRmResourceGroupDeployment -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ředku pomocí identifikátoru GUID, který není jedinečný, zobrazí RoleAssignmentUpdateNotPermitted se chyba.

Pokud chcete šablonu několikrát použít k přidání několika objektů Active Directory do role uživatele DevTest Labs pro vaše testovací prostředí, zvažte použití dynamických objektů v příkazu PowerShellu. Následující příklad používá rutinu New-Guid k dynamickému zadání názvu nasazení skupiny prostředků a identifikátoru GUID přiřazení role.

New-AzureRmResourceGroupDeployment -Name "MyLabResourceGroup-$(New-Guid)" -ResourceGroupName 'MyLabResourceGroup' -TemplateFile .\azuredeploy.json -roleAssignmentGuid "$(New-Guid)" -labName "MyLab" -principalId "11111111-1111-1111-1111-111111111111"

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-AzureRMRoleAssignment . Tato rutina má mnoho volitelných parametrů, které umožňují flexibilitu. Objekt ObjectId, SigninNamenebo ServicePrincipalName lze zadat jako objekt, kterému jsou udělena oprávnění.

Tady je ukázkový příkaz Azure PowerShell, který přidá uživatele do role uživatele DevTest Labs v zadaném testovacím prostředí.

New-AzureRmRoleAssignment -UserPrincipalName <email@company.com> -RoleDefinitionName 'DevTest Labs User' -ResourceName '<Lab Name>' -ResourceGroupName '<Resource Group Name>' -ResourceType 'Microsoft.DevTestLab/labs'

Pokud chcete určit prostředek, ke kterému se udělují oprávnění, můžete zadat kombinací ResourceName, ResourceTypeResourceGroup nebo parametrem scope . Bez ohledu na to, jakou kombinaci parametrů použijete, poskytněte rutině dostatek informací k jedinečné identifikaci objektu služby Active Directory (uživatele, skupiny nebo instančního objektu), oboru (skupiny prostředků nebo prostředku) 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í provede 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ému je udělen přístup, může být určen parametry objectId, signInName. spn Testovací prostředí, ke kterému je objektu udělen přístup, lze identifikovat pomocí scope adresy URL nebo kombinace resource-nameparametrů , resource-typea resource-group .

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

Viz následující články: