Azure Resource Manager şablonlarını kullanarak Azure rolleri atama
Azure rol tabanlı erişim denetimi (Azure RBAC), Azure kaynaklarına erişimi yönetmek için kullandığınız yetkilendirme sistemidir. Erişim vermek için kullanıcılara, gruplara, hizmet sorumlularına veya yönetilen kimliklere belirli kapsamda roller atamanız gerekir. Azure PowerShell veya Azure CLI'yı kullanmaya ek olarak, Azure Resource Manager şablonlarını kullanarak roller atayabilirsiniz. Kaynakları tutarlı ve tekrar tekrar dağıtmanız gerekiyorsa şablonlar yararlı olabilir. Bu makalede, şablonları kullanarak rollerin nasıl atandığı açıklanır.
Not
Bicep, Azure kaynaklarınızı tanımlamaya yönelik yeni bir dildir. Kod olarak altyapınızın kalitesini artırmaya yardımcı olan diğer özelliklerin yanı sıra JSON'dan daha basit bir yazma deneyimine sahiptir. Azure'da kod olarak altyapıya yeni eklenen herkesin JSON yerine Bicep kullanmasını öneririz.
Bicep kullanarak rol atamalarını tanımlama hakkında bilgi edinmek için bkz . Bicep kullanarak Azure RBAC kaynakları oluşturma. Hızlı başlangıç örneği için bkz . Hızlı Başlangıç: Bicep kullanarak Azure rolü atama.
Önkoşullar
Azure rollerini atamak için şunlar gereklidir:
Microsoft.Authorization/roleAssignments/write
Rol Tabanlı Erişim Denetimi Yönetici istrator veya Kullanıcı Erişimi Yönetici istrator gibi izinler
Aşağıdaki sürümleri kullanmanız gerekir:
2018-09-01-preview
veya daha sonra yeni bir hizmet sorumlusuna Azure rolü atamak için2020-04-01-preview
veya daha sonra kaynak kapsamında bir Azure rolü atamak için2022-04-01
ilk kararlı sürümdür
Daha fazla bilgi için bkz . Azure RBAC REST API'lerinin API sürümleri.
Nesne kimliklerini alma
Rol atamak için rolü atamak istediğiniz kullanıcı, grup veya uygulamanın kimliğini belirtmeniz gerekir. Kimlik şu biçimdedir: 11111111-1111-1111-1111-111111111111
. Kimliği Azure portalı, Azure PowerShell veya Azure CLI kullanarak alabilirsiniz.
User
Bir kullanıcının kimliğini almak için Get-AzADUser veya az ad user show komutlarını kullanabilirsiniz.
$objectid = (Get-AzADUser -DisplayName "{name}").id
objectid=$(az ad user show --id "{email}" --query id --output tsv)
Gruplandırma
Bir grubun kimliğini almak için Get-AzADGroup veya az ad group show komutlarını kullanabilirsiniz.
$objectid = (Get-AzADGroup -DisplayName "{name}").id
objectid=$(az ad group show --group "{name}" --query id --output tsv)
Yönetilen kimlikler
Yönetilen kimliğin kimliğini almak için Get-AzAdServiceprincipal veya az ad sp komutlarını kullanabilirsiniz.
$objectid = (Get-AzADServicePrincipal -DisplayName <Azure resource name>).id
objectid=$(az ad sp list --display-name <Azure resource name> --query [].id --output tsv)
Uygulama
Hizmet sorumlusunun kimliğini (uygulama tarafından kullanılan kimlik) almak için Get-AzADServicePrincipal veya az ad sp list komutlarını kullanabilirsiniz. Hizmet sorumlusu için uygulama kimliğini değil nesne kimliğini kullanın.
$objectid = (Get-AzADServicePrincipal -DisplayName "{name}").id
objectid=$(az ad sp list --display-name "{name}" --query [].id --output tsv)
Azure rolü atama
Azure RBAC'de erişim vermek için bir rol atarsınız.
Kaynak grubu kapsamı (parametreler olmadan)
Aşağıdaki şablonda rol atamanın temel bir yolu gösterilmektedir. Bazı değerler şablon içinde belirtilir. Aşağıdaki şablonda gösterilmiştir:
Şablonu kullanmak için aşağıdakileri yapmanız gerekir:
- Yeni bir JSON dosyası oluşturma ve şablonu kopyalama
- yerine rolün atanacak kullanıcı, grup, yönetilen kimlik veya uygulamanın kimliğiyle değiştirin
<your-principal-id>
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"name": "[guid(resourceGroup().id)]",
"properties": {
"roleDefinitionId": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')]",
"principalId": "<your-principal-id>"
}
}
]
}
Aşağıda örnek New-AzResourceGroupDeployment ve az deployment group create komutları verilmiştir.
New-AzResourceGroupDeployment -ResourceGroupName ExampleGroup -TemplateFile rbac-test.json
az deployment group create --resource-group ExampleGroup --template-file rbac-test.json
Aşağıda, şablon dağıtıldıktan sonra bir kaynak grubu için kullanıcıya Okuyucu rolü ataması örneği gösterilmektedir.
Kaynak grubu veya abonelik kapsamı
Önceki şablon çok esnek değildir. Aşağıdaki şablon parametreleri kullanır ve farklı kapsamlarda kullanılabilir. Aşağıdaki şablonda gösterilmiştir:
- Kaynak grubu veya abonelik kapsamında bir kullanıcıya, gruba veya uygulamaya rol atama
- Sahip, Katkıda Bulunan ve Okuyucu rollerini parametre olarak belirtme
Şablonu kullanmak için aşağıdaki girişleri belirtmeniz gerekir:
- Rolün atanacak kullanıcı, grup, yönetilen kimlik veya uygulamanın kimliği
- Rol ataması için kullanılacak benzersiz bir kimlik veya varsayılan kimliği kullanabilirsiniz
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"principalId": {
"type": "string",
"metadata": {
"description": "The principal to assign the role to"
}
},
"builtInRoleType": {
"type": "string",
"allowedValues": [
"Owner",
"Contributor",
"Reader"
],
"metadata": {
"description": "Built-in role to assign"
}
},
"roleNameGuid": {
"type": "string",
"defaultValue": "[newGuid()]",
"metadata": {
"description": "A new GUID used to identify the role assignment"
}
}
},
"variables": {
"Owner": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', '8e3af657-a8ff-443c-a75c-2fe8c4bcb635')]",
"Contributor": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]",
"Reader": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')]"
},
"resources": [
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"name": "[parameters('roleNameGuid')]",
"properties": {
"roleDefinitionId": "[variables(parameters('builtInRoleType'))]",
"principalId": "[parameters('principalId')]"
}
}
]
}
Not
Şablonun her dağıtımı için parametre olarak aynı roleNameGuid
değer sağlanmadığı sürece bu şablon bir kez etkili olmaz. Sağlanmadıysa roleNameGuid
, varsayılan olarak her dağıtımda yeni bir GUID oluşturulur ve sonraki dağıtımlar bir Conflict: RoleAssignmentExists
hatayla başarısız olur.
Rol atamasının kapsamı dağıtım düzeyinden belirlenir. Aşağıda, dağıtımı bir kaynak grubu kapsamında başlatmaya yönelik New-AzResourceGroupDeployment ve az deployment group create komutları verilmiştir.
New-AzResourceGroupDeployment -ResourceGroupName ExampleGroup -TemplateFile rbac-test.json -principalId $objectid -builtInRoleType Reader
az deployment group create --resource-group ExampleGroup --template-file rbac-test.json --parameters principalId=$objectid builtInRoleType=Reader
Aşağıda, dağıtımı bir abonelik kapsamında başlatmaya ve konumu belirtmeye yönelik New-AzDeployment ve az deployment sub create komutları verilmiş.
New-AzDeployment -Location centralus -TemplateFile rbac-test.json -principalId $objectid -builtInRoleType Reader
az deployment sub create --location centralus --template-file rbac-test.json --parameters principalId=$objectid builtInRoleType=Reader
Kaynak kapsamı
Bir kaynak düzeyinde rol atamanız gerekiyorsa, rol ataması üzerindeki özelliğini kaynağın adına ayarlayın scope
.
Aşağıdaki şablonda gösterilmiştir:
- Yeni depolama hesabı oluşturma
- Depolama hesabı kapsamında bir kullanıcıya, gruba veya uygulamaya rol atama
- Sahip, Katkıda Bulunan ve Okuyucu rollerini parametre olarak belirtme
Şablonu kullanmak için aşağıdaki girişleri belirtmeniz gerekir:
- Rolün atanacak kullanıcı, grup, yönetilen kimlik veya uygulamanın kimliği
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"principalId": {
"type": "string",
"metadata": {
"description": "The principal to assign the role to"
}
},
"builtInRoleType": {
"type": "string",
"allowedValues": [
"Owner",
"Contributor",
"Reader"
],
"metadata": {
"description": "Built-in role to assign"
}
},
"roleNameGuid": {
"type": "string",
"defaultValue": "[newGuid()]",
"metadata": {
"description": "A new GUID used to identify the role assignment"
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"variables": {
"Owner": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', '8e3af657-a8ff-443c-a75c-2fe8c4bcb635')]",
"Contributor": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]",
"Reader": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')]",
"storageName": "[concat('storage', uniqueString(resourceGroup().id))]"
},
"resources": [
{
"apiVersion": "2019-04-01",
"type": "Microsoft.Storage/storageAccounts",
"name": "[variables('storageName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"properties": {}
},
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"name": "[parameters('roleNameGuid')]",
"scope": "[concat('Microsoft.Storage/storageAccounts', '/', variables('storageName'))]",
"dependsOn": [
"[variables('storageName')]"
],
"properties": {
"roleDefinitionId": "[variables(parameters('builtInRoleType'))]",
"principalId": "[parameters('principalId')]"
}
}
]
}
Önceki şablonu dağıtmak için kaynak grubu komutlarını kullanırsınız. Aşağıda, dağıtımı bir kaynak kapsamında başlatmaya yönelik New-AzResourceGroupDeployment ve az deployment group create komutları verilmiştir.
New-AzResourceGroupDeployment -ResourceGroupName ExampleGroup -TemplateFile rbac-test.json -principalId $objectid -builtInRoleType Contributor
az deployment group create --resource-group ExampleGroup --template-file rbac-test.json --parameters principalId=$objectid builtInRoleType=Contributor
Aşağıda, şablonu dağıtıldıktan sonra depolama hesabı için kullanıcıya Katkıda Bulunan rolü ataması örneği gösterilmektedir.
Yeni hizmet sorumlusu
Yeni bir hizmet sorumlusu oluşturur ve bu hizmet sorumlusuna hemen bir rol atamayı denerseniz, bu rol ataması bazı durumlarda başarısız olabilir. Örneğin, yeni bir yönetilen kimlik oluşturur ve ardından aynı Azure Resource Manager şablonunda bu hizmet sorumlusuna rol atamayı denerseniz rol ataması başarısız olabilir. Bu hatanın nedeni büyük olasılıkla bir çoğaltma gecikmesidir. Hizmet sorumlusu tek bir bölgede oluşturulur; ancak rol ataması, hizmet sorumlusunu henüz çoğaltmamış farklı bir bölgede gerçekleşebilir.
Bu senaryoyu ele almak için, rol atamasını principalType
oluştururken özelliğini olarak ServicePrincipal
ayarlamanız gerekir. Rol atamasının apiVersion
özelliğini de 2018-09-01-preview
veya üzeri olarak ayarlamanız gerekir. 2022-04-01
ilk kararlı sürümdür.
Aşağıdaki şablonda gösterilmiştir:
- Yeni yönetilen kimlik hizmet sorumlusu oluşturma
- Nasıl belirtilir?
principalType
- Kaynak grubu kapsamında katkıda bulunan rolünü bu hizmet sorumlusuna atama
Şablonu kullanmak için aşağıdaki girişleri belirtmeniz gerekir:
- Yönetilen kimliğin temel adı veya varsayılan dizeyi kullanabilirsiniz
{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"baseName": {
"type": "string",
"defaultValue": "msi-test"
}
},
"variables": {
"identityName": "[concat(parameters('baseName'), '-bootstrap')]",
"bootstrapRoleAssignmentId": "[guid(concat(resourceGroup().id, 'contributor'))]",
"contributorRoleDefinitionId": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]"
},
"resources": [
{
"type": "Microsoft.ManagedIdentity/userAssignedIdentities",
"name": "[variables('identityName')]",
"apiVersion": "2018-11-30",
"location": "[resourceGroup().location]"
},
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"name": "[variables('bootstrapRoleAssignmentId')]",
"dependsOn": [
"[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('identityName'))]"
],
"properties": {
"roleDefinitionId": "[variables('contributorRoleDefinitionId')]",
"principalId": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('identityName')), '2018-11-30').principalId]",
"principalType": "ServicePrincipal"
}
}
]
}
Aşağıda, dağıtımı bir kaynak grubu kapsamında başlatmaya yönelik New-AzResourceGroupDeployment ve az deployment group create komutları verilmiştir.
New-AzResourceGroupDeployment -ResourceGroupName ExampleGroup2 -TemplateFile rbac-test.json
az deployment group create --resource-group ExampleGroup2 --template-file rbac-test.json
Aşağıda, şablon dağıtıldıktan sonra yeni bir yönetilen kimlik hizmet sorumlusuna Katkıda Bulunan rolü ataması örneği gösterilmektedir.