Azure DevTest Labs'da laboratuvar kullanıcısını laboratuvara eklemeyi otomatikleştirme

Azure DevTest Labs, Azure portal kullanarak hızlı bir şekilde self servis geliştirme testi ortamları oluşturmanıza olanak tanır. Ancak, çeşitli ekipleriniz ve birkaç DevTest Labs örneğiniz varsa oluşturma işlemini otomatikleştirmek zaman kazandırabilir. Azure Resource Manager şablonları laboratuvarlar, laboratuvar VM'leri, özel görüntüler, formüller oluşturmanıza ve kullanıcıları otomatik bir şekilde eklemenize olanak tanır. Bu makale özellikle DevTest Labs örneğine kullanıcı eklemeye odaklanır.

Laboratuvara kullanıcı eklemek için, kullanıcıyı laboratuvarın DevTest Labs Kullanıcı rolüne eklersiniz. Bu makalede, aşağıdaki yollardan birini kullanarak laboratuvara kullanıcı eklemeyi otomatikleştirme adımları gösterilmektedir:

  • Azure Resource Manager şablonları
  • Azure PowerShell cmdlet’leri
  • Azure CLI.

Azure Resource Manager şablonlarını kullanma

Aşağıdaki örnek Resource Manager şablonu, bir laboratuvarın DevTest Labs Kullanıcı rolüne eklenecek kullanıcıyı belirtir.

{
  "$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'))]"
      ]
    }
  ]
}

Rolü laboratuvarı oluşturan şablonda atıyorsanız rol atama kaynağıyla laboratuvar arasında bir bağımlılık eklemeyi unutmayın. Daha fazla bilgi için Bkz. Azure Resource Manager Şablonlarında bağımlılıkları tanımlama makalesi.

Rol Atama Kaynak Bilgileri

Rol atama kaynağının türü ve adı belirtmesi gerekir.

Dikkat edilmesi gereken ilk şey, kaynağın türünün bir kaynak grubu için olduğu gibi olmamasıdır Microsoft.Authorization/roleAssignments . Bunun yerine, kaynak türü desenini {provider-namespace}/{resource-type}/providers/roleAssignmentsizler. Bu durumda, kaynak türü olacaktır Microsoft.DevTestLab/labs/providers/roleAssignments.

Rol atama adının genel olarak benzersiz olması gerekir. Atamanın adı desenini {labName}/Microsoft.Authorization/{newGuid}kullanır. newGuid, şablon için bir parametre değeridir. Rol atama adının benzersiz olmasını sağlar. GUID oluşturmak için şablon işlevi olmadığından, herhangi bir GUID oluşturucu aracını kullanarak kendiniz bir GUID oluşturmanız gerekir.

Şablonda rol atamasının adı değişkeni tarafından fullDevTestLabUserRoleName tanımlanır. Şablondaki tam satır:

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

Rol AtamaSı Kaynak Özellikleri

Rol ataması üç özelliği tanımlar. , principalIdve scopegerekirroleDefinitionId.

Rol Tanımı

Rol tanımı kimliği, mevcut rol tanımının dize tanımlayıcısıdır. Rol kimliği biçimindedir /subscriptions/{subscription-id}/providers/Microsoft.Authorization/roleDefinitions/{role-definition-id}.

Abonelik kimliği şablon işlevi kullanılarak subscription().subscriptionId alınır.

Yerleşik rol için DevTest Labs User rol tanımını almanız gerekir. DevTest Labs Kullanıcı rolünün GUID değerini almak için Rol Atamaları REST API'sini veya Get-AzRoleDefinition cmdlet'ini kullanabilirsiniz.

$dtlUserRoleDefId = (Get-AzRoleDefinition -Name "DevTest Labs User").Id

Rol kimliği değişkenler bölümünde tanımlanır ve olarak adlandırılır devTestLabUserRoleId. Şablonda rol kimliği şu şekilde ayarlanır: 1111111111-0000-0000-111111111111111111111.

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

Asıl Kimlik

Asıl Kimlik, laboratuvar kullanıcısı olarak laboratuvar kullanıcısı olarak eklemek istediğiniz Active Directory kullanıcısının, grubunun veya hizmet sorumlusunun nesne kimliğidir. Şablon parametresi olarak kullanır ObjectId .

Get-AzureRMADUser, [Get-AzureRMADGroup veya Get-AzureRMADServicePrincipal PowerShell cmdlet'lerini kullanarak ObjectId değerini alabilirsiniz. Bu cmdlet'ler, ihtiyacınız olan nesne kimliği olan id özelliğine sahip olan tek veya bir Active Directory nesnelerinin listesini döndürür. Aşağıdaki örnekte, bir şirkette tek bir kullanıcının nesne kimliğini nasıl edindiğiniz gösterilmektedir.

$userObjectId = (Get-AzureRmADUser -UserPrincipalName 'email@company.com').Id

Get-MgUser, Get-MgGroup ve Get-MgServicePrincipal içeren Microsoft Graph PowerShell cmdlet'lerini de kullanabilirsiniz.

Kapsam

Kapsam, rol atamasının uygulanacağı kaynağı veya kaynak grubunu belirtir. Kaynaklar için kapsam şu biçimdedir: /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/{provider-namespace}/{resource-type}/{resource-name}. Şablon, bölümü doldurmak için işlevini, resourceGroup().name bölümü doldurmak subscription-idresource-group-name için de şablon işlevini kullanırsubscription().subscriptionId. Bu işlevlerin kullanılması, rol atadığınız laboratuvarın geçerli abonelikte ve şablon dağıtımının yapıldığı kaynak grubunda bulunması gerektiği anlamına gelir. Son bölüm olan resource-name, laboratuvarın adıdır. Bu değer, bu örnekteki şablon parametresi aracılığıyla alınır.

Şablondaki rol kapsamı:

"roleScope": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.DevTestLab/labs/', parameters('labName'))]"

Şablon dağıtma

İlk olarak, Resource Manager şablonundaki parametrelerin değerlerini geçiren bir parametre dosyası (örneğin: azuredeploy.parameters.json) oluşturun.

{
  "$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"
    }
  }
}

Ardından New-AzureRmResourceGroupDeployment PowerShell cmdlet'ini kullanarak Resource Manager şablonunu dağıtın. Aşağıdaki örnek komut, bir laboratuvar için DevTest Labs Kullanıcı rolüne bir kişi, grup veya hizmet sorumlusu atar.

New-AzureRmResourceGroupDeployment -Name "MyLabResourceGroup-$(New-Guid)" -ResourceGroupName 'MyLabResourceGroup' -TemplateParameterFile .\azuredeploy.parameters.json -TemplateFile .\azuredeploy.json

Not

Grup dağıtım adı ve rol atamaSı GUID'i benzersiz olmalıdır. Benzersiz olmayan bir GUID kullanarak kaynak ataması dağıtmaya çalışırsanız bir RoleAssignmentUpdateNotPermitted hata görürsünüz.

Laboratuvarınızın DevTest Labs Kullanıcı rolüne birkaç Active Directory nesnesi eklemek için şablonu birkaç kez kullanmayı planlıyorsanız, PowerShell komutunuzda dinamik nesneler kullanmayı göz önünde bulundurun. Aşağıdaki örnek, kaynak grubu dağıtım adını ve rol atama GUID'sini dinamik olarak belirtmek için New-Guid cmdlet'ini kullanır.

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

Azure PowerShell kullanma

Giriş bölümünde açıklandığı gibi, bir kullanıcıyı laboratuvar için DevTest Labs Kullanıcı rolüne eklemek için yeni bir Azure rol ataması oluşturursunuz. PowerShell'de bunu New-AzureRMRoleAssignment cmdlet'ini kullanarak yaparsınız. Bu cmdlet'in esneklik sağlamak için birçok isteğe bağlı parametresi vardır. ObjectId, SigninNameveyaServicePrincipalName, izin verilen nesne olarak belirtilebilir.

Aşağıda, kullanıcıyı belirtilen laboratuvardaki DevTest Labs Kullanıcı rolüne ekleyen örnek bir Azure PowerShell komutu verilmiştir.

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

İzinlerin verildiği kaynağı belirtmek için , ResourceTypeResourceGroup veya parametresinin ResourceNamebirleşimiyle scope belirtilebilir. Parametrelerin birleşimi ne olursa olsun, Active Directory nesnesini (kullanıcı, grup veya hizmet sorumlusu), kapsamı (kaynak grubu veya kaynak) ve rol tanımını benzersiz olarak tanımlamak için cmdlet'e yeterli bilgi sağlayın.

Azure CLI kullanma

Azure CLI'de laboratuvar kullanıcısını laboratuvara ekleme işlemi komutu kullanılarak az role assignment create gerçekleştirilir. Azure CLI cmdlet'leri hakkında daha fazla bilgi için bkz. Azure CLI kullanarak Azure rol atamaları ekleme veya kaldırma.

Erişim verilen nesne , , signInNamespn parametreleri tarafından objectIdbelirtilebilir. Nesneye erişim verilen laboratuvar, URL veya , resource-typeve resource-group parametrelerinin resource-namebirleşimiyle scope tanımlanabilir.

Aşağıdaki Azure CLI örneği, belirtilen Laboratuvar için DevTest Labs Kullanıcı rolüne nasıl kişi ekleneceğini gösterir.

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>

Sonraki adımlar

Aşağıdaki makalelere bakın: