Mengotomatiskan menambahkan pengguna lab ke laboratorium di Azure DevTest Labs

Azure DevTest Labs memungkinkan Anda dengan cepat membuat lingkungan uji dev layanan mandiri dengan menggunakan portal Microsoft Azure. Namun, jika Anda memiliki beberapa tim dan beberapa instans DevTest Labs, mengotomatiskan proses pembuatan dapat menghemat waktu. Templat Azure Resource Manager memungkinkan Anda membuat lab, VM lab, gambar kustom, rumus, dan menambahkan pengguna secara otomatis. Artikel ini secara khusus berfokus pada penambahan pengguna ke instans DevTest Labs.

Untuk menambahkan pengguna ke laboratorium, Anda menambahkan pengguna ke peran Pengguna DevTest Labs untuk laboratorium. Artikel ini memperlihatkan kepada Anda cara mengotomatisasi menambahkan pengguna ke laboratorium menggunakan salah satu cara berikut:

  • Templat Azure Resource Manager
  • Cmdlet Azure PowerShell
  • Azure CLI.

Menggunakan templat Azure Resource Manager

Contoh templat Resource Manager berikut ini menentukan pengguna untuk ditambahkan ke peran Pengguna DevTest Labs dari laboratorium.

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

Jika Anda menetapkan peran dalam templat yang sama saat membuat lab, ingatlah untuk menambahkan dependensi antara sumber daya penetapan peran dan lab. Untuk informasi selengkapnya, lihat Menentukan dependensi di artikel Templat Azure Resource Manager.

Informasi Role Assignment Resource

Sumber daya penetapan peran perlu menentukan jenis dan nama.

Hal pertama yang perlu diperhatikan adalah bahwa jenis untuk sumber daya tidak Microsoft.Authorization/roleAssignments seperti yang akan terjadi untuk grup sumber daya. Sebaliknya, jenis sumber daya mengikuti pola {provider-namespace}/{resource-type}/providers/roleAssignments. Dalam hal ini, jenis sumber daya akan Microsoft.DevTestLab/labs/providers/roleAssignments.

Nama penetapan peran itu sendiri perlu unik secara global. Nama tugas menggunakan pola {labName}/Microsoft.Authorization/{newGuid}. Itu newGuid adalah nilai parameter untuk templat. Ini memastikan bahwa nama penetapan peran unik. Karena tidak ada fungsi templat untuk membuat GUIDD, Anda perlu membuat GUID sendiri dengan menggunakan alat generator GUID apa pun.

Dalam templat, nama untuk penetapan peran ditentukan oleh fullDevTestLabUserRoleName variabel. Baris yang tepat dari templat adalah:

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

Properti Role Assignment Resource

Penetapan peran itu sendiri mendefinisikan tiga properti. Perlu roleDefinitionId, principalId, dan scope.

Definisi Peran

ID definisi peran adalah pengidentifikasi string untuk definisi peran yang ada. ID peran dalam bentuk /subscriptions/{subscription-id}/providers/Microsoft.Authorization/roleDefinitions/{role-definition-id}.

ID langganan diperoleh dengan menggunakan subscription().subscriptionId fungsi templat.

Anda perlu mendapatkan definisi peran untuk DevTest Labs User peran bawaan. Untuk mendapatkan GUID untuk peran Pengguna DevTest Labs, Anda dapat menggunakan Role Assignments REST API atau cmdlet Get-AzRoleDefinition.

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

ID peran didefinisikan di bagian variabel dan diberi nama devTestLabUserRoleId. Dalam templat, ID peran diatur ke: 111111111-0000-0000-11111111111111111.

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

ID Utama

ID Utama adalah ID objek dari pengguna Active Directory, grup, atau perwakilan layanan yang ingin Anda tambahkan sebagai pengguna lab ke laboratorium. Templat menggunakan ObjectId sebagai parameter.

Anda bisa mendapatkan ObjectId dengan menggunakan cmdlet Get-AzureRMADUser, [Get-AzureRMADGroup, atau Get-AzureRMADServicePrincipal PowerShell. Cmdlet ini mengembalikan satu atau daftar objek Active Directory yang memiliki properti ID, yang merupakan ID objek yang Anda butuhkan. Contoh berikut menunjukkan kepada Anda cara mendapatkan ID objek dari satu pengguna di perusahaan.

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

Anda juga dapat menggunakan cmdlet Microsoft Graph PowerShell yang menyertakan Get-MgUser, Get-MgGroup, dan Get-MgServicePrincipal.

Lingkup

Lingkup menentukan grup sumber daya atau sumber daya yang harus diterapkan oleh penetapan peran. Untuk sumber daya, ruang lingkup ada dalam formulir: /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/{provider-namespace}/{resource-type}/{resource-name}. Templat menggunakan subscription().subscriptionId fungsi untuk mengisi subscription-id bagian dan resourceGroup().name fungsi templat untuk mengisi bagian resource-group-name. Menggunakan fungsi ini berarti bahwa lab tempat Anda menetapkan peran harus ada di langganan saat ini dan grup sumber daya yang sama dengan penyebaran templat yang dibuat. Bagian terakhirresource-name, adalah nama laboratorium. Nilai ini diterima melalui parameter templat dalam contoh ini.

Lingkup peran dalam templat:

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

Menggunakan templat

Pertama, buat file parameter (misalnya: azuredeploy.parameters.json) yang meneruskan nilai untuk parameter di templat 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"
    }
  }
}

Kemudian, gunakan cmdlet New-AzureRmResourceGroupDeploymen PowerShell untuk menggunakan templat Resource Manager. Perintah contoh berikut menetapkan seseorang, grup, atau perwakilan layanan ke peran Pengguna DevTest Labs untuk laboratorium.

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

Catatan

Nama penyebaran grup dan tugas peran GUID harus unik. Jika Anda mencoba menerapkan penetapan sumber daya dengan menggunakan GUID yang tidak unik, Anda akan melihat kesalahan RoleAssignmentUpdateNotPermitted.

Jika Anda berencana untuk menggunakan templat beberapa kali untuk menambahkan beberapa objek Direktori Aktif ke peran Pengguna DevTest Labs untuk laboratorium Anda, pertimbangkan untuk menggunakan objek dinamis di perintah PowerShell Anda. Contoh berikut menggunakan cmdlet New-Guid untuk menentukan nama penyebaran grup sumber daya dan penetapan peran GUID secara dinamis.

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

Menggunakan Azure PowerShell

Seperti yang dibahas dalam pengenalan, Anda membuat penetapan peran Azure baru untuk menambahkan pengguna ke peran Pengguna DevTest Labs untuk laboratorium. Di PowerShell, Anda melakukannya dengan menggunakan cmdlet New-AzureRMRoleAssignment. Cmdlet ini memiliki banyak parameter opsional untuk memungkinkan fleksibilitas. ObjectId, SigninName, atau ServicePrincipalName dapat ditentukan sebagai objek yang diberi izin.

Berikut adalah contoh perintah Azure PowerShell yang menambahkan pengguna ke peran Pengguna DevTest Labs di lab yang ditentukan.

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

Untuk menentukan sumber daya yang izinnya diberikan dapat ditentukan oleh kombinasi ResourceName, ResourceType, ResourceGroup, atau oleh scope parameter. Apa pun kombinasi parameter yang digunakan, berikan informasi yang cukup ke cmdlet untuk mengidentifikasi objek Active Directory secara unik (pengguna, grup, atau perwakilan layanan), ruang lingkup (grup sumber daya atau sumber daya), dan definisi peran.

Gunakan Azure CLI

Di Azure CLI, menambahkan pengguna lab ke laboratorium dilakukan dengan menggunakan perintah az role assignment create. Untuk informasi selengkapnya tentang cmdlet Azure CLI, lihat Menambahkan atau menghapus penetapan peran Azure menggunakan Azure CLI.

Objek yang diberikan akses dapat ditentukan oleh objectId, signInName, spn parameter. Laboratorium tempat objek diberikan akses dapat diidentifikasi oleh scope url atau kombinasi dari resource-name, resource-type, dan resource-group parameter.

Contoh Azure CLI berikut ini memperlihatkan kepada Anda cara menambahkan seseorang ke peran Pengguna DevTest Labs untuk Lab yang ditentukan.

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>

Langkah berikutnya

Lihat artikel berikut ini: