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/roleAssignments
izler. 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. , principalId
ve scope
gerekirroleDefinitionId
.
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-id
resource-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": "aaaaaaaa-bbbb-cccc-1111-222222222222"
},
"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 "aaaaaaaa-bbbb-cccc-1111-222222222222"
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
, SigninName
veyaServicePrincipalName
, 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 , ResourceType
ResourceGroup
veya parametresinin ResourceName
birleş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 , , signInName
spn
parametreleri tarafından objectId
belirtilebilir. Nesneye erişim verilen laboratuvar, URL veya , resource-type
ve resource-group
parametrelerinin resource-name
birleş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: