Azure Resource Manager şablonları kullanarak Azure rolleri atamaAssign Azure roles using Azure Resource Manager templates

Azure rol tabanlı erişim denetimi (Azure RBAC) , Azure kaynaklarına erişimi yönetmek için kullandığınız yetkilendirme sistemidir.Azure role-based access control (Azure RBAC) is the authorization system you use to manage access to Azure resources. Erişim vermek için kullanıcılara, gruplara, hizmet sorumlularına veya yönetilen kimliklere belirli kapsamda roller atamanız gerekir.To grant access, you assign roles to users, groups, service principals, or managed identities at a particular scope. Azure PowerShell veya Azure CLı kullanmaya ek olarak, Azure Resource Manager şablonlarıkullanarak roller atayabilirsiniz.Azure rol tabanlı erişim denetimi (Azure RBAC) , Azure kaynaklarına erişimi yönetmek için kullandığınız yetkilendirme sistemidir.Azure role-based access control (Azure RBAC) is the authorization system you use to manage access to Azure resources. Erişim vermek için kullanıcılara, gruplara, hizmet sorumlularına veya yönetilen kimliklere belirli kapsamda roller atamanız gerekir.To grant access, you assign roles to users, groups, service principals, or managed identities at a particular scope. In addition to using Azure PowerShell or the Azure CLI, you can assign roles using Azure Resource Manager templates. Kaynakları sürekli ve sürekli olarak dağıtmanız gerektiğinde şablonlar yararlı olabilir.Templates can be helpful if you need to deploy resources consistently and repeatedly. Bu makalede, şablonlar kullanılarak rollerin nasıl atanacağı açıklanır.This article describes how to assign roles using templates.

ÖnkoşullarPrerequisites

Azure rolleri atamak için şunları yapmanız gerekir:To assign Azure roles, you must have:

Nesne kimliklerini alGet object IDs

Rol atamak için, rolü atamak istediğiniz kullanıcı, Grup veya uygulamanın KIMLIĞINI belirtmeniz gerekir.To assign a role, you need to specify the ID of the user, group, or application you want to assign the role to. KIMLIK şu biçimdedir: 11111111-1111-1111-1111-111111111111 .The ID has the format: 11111111-1111-1111-1111-111111111111. Azure portal, Azure PowerShell veya Azure CLı kullanarak KIMLIĞI edinebilirsiniz.You can get the ID using the Azure portal, Azure PowerShell, or Azure CLI.

KullanıcıUser

Bir kullanıcının KIMLIĞINI almak için Get-AzADUser veya az ad User Show komutlarını kullanabilirsiniz.To get the ID of a user, you can use the Get-AzADUser or az ad user show commands.

$objectid = (Get-AzADUser -DisplayName "{name}").id
objectid=$(az ad user show --id "{email}" --query objectId --output tsv)

GrupGroup

Bir grubun KIMLIĞINI almak için Get-AzADGroup veya az Ad Group Show komutlarını kullanabilirsiniz.To get the ID of a group, you can use the Get-AzADGroup or az ad group show commands.

$objectid = (Get-AzADGroup -DisplayName "{name}").id
objectid=$(az ad group show --group "{name}" --query objectId --output tsv)

Yönetilen kimliklerManaged identities

Yönetilen kimliğin KIMLIĞINI almak için Get-AzAdServiceprincipal veya az ad SP komutlarını kullanabilirsiniz.To get the ID of a managed identity, you can use Get-AzAdServiceprincipal or az ad sp commands.

$objectid = (Get-AzADServicePrincipal -DisplayName <Azure resource name>).id
objectid=$(az ad sp list --display-name <Azure resource name> --query [].objectId --output tsv)

UygulamaApplication

Bir hizmet sorumlusunun KIMLIĞINI (bir uygulama tarafından kullanılan kimlik) almak için Get-AzADServicePrincipal veya az ad SP List komutlarını kullanabilirsiniz.To get the ID of a service principal (identity used by an application), you can use the Get-AzADServicePrincipal or az ad sp list commands. Hizmet sorumlusu için uygulama KIMLIĞINI değil , nesne kimliğini kullanın.For a service principal, use the object ID and not the application ID.

$objectid = (Get-AzADServicePrincipal -DisplayName "{name}").id
objectid=$(az ad sp list --display-name "{name}" --query [].objectId --output tsv)

Azure rolü atamaAssign an Azure role

Azure RBAC 'de, erişim izni vermek için bir rol atarsınız.In Azure RBAC, to grant access, you assign a role.

Kaynak grubu kapsamı (parametresiz)Resource group scope (without parameters)

Aşağıdaki şablonda rol atama için temel bir yol gösterilmektedir.The following template shows a basic way to assign a role. Bazı değerler şablon içinde belirtilmiştir.Some values are specified within the template. Aşağıdaki şablonda şunları gösterilmektedir:The following template demonstrates:

  • Bir kaynak grubu kapsamındaki Kullanıcı, Grup veya uygulamaya okuyucu rolü atamaHow to assign the Reader role to a user, group, or application at a resource group scope

Şablonu kullanmak için aşağıdakileri yapmanız gerekir:To use the template, you must do the following:

  • Yeni bir JSON dosyası oluşturun ve şablonu kopyalayınCreate a new JSON file and copy the template
  • <your-principal-id>Rolün atanacağı bir kullanıcının, grubun, yönetilen kimliğin veya UYGULAMANıN kimliğiyle değiştirinReplace <your-principal-id> with the ID of a user, group, managed identity, or application to assign the role to
{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "resources": [
        {
            "type": "Microsoft.Authorization/roleAssignments",
            "apiVersion": "2018-09-01-preview",
            "name": "[guid(resourceGroup().id)]",
            "properties": {
                "roleDefinitionId": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')]",
                "principalId": "<your-principal-id>"
            }
        }
    ]
}

Örnek New-AzResourceGroupDeployment ve az dağıtım grubu oluşturma komutları aşağıda verilmiştir grup adlı bir kaynak grubunda dağıtımı başlatmak için kullanılır.Here are example New-AzResourceGroupDeployment and az deployment group create commands for how to start the deployment in a resource group named ExampleGroup.

New-AzResourceGroupDeployment -ResourceGroupName ExampleGroup -TemplateFile rbac-test.json
az deployment group create --resource-group ExampleGroup --template-file rbac-test.json

Aşağıda, şablonu dağıttıktan sonra bir kaynak grubu için kullanıcıya okuyucu rolü atamasının bir örneği gösterilmektedir.The following shows an example of the Reader role assignment to a user for a resource group after deploying the template.

Kaynak grubu kapsamında rol ataması

Kaynak grubu veya abonelik kapsamıResource group or subscription scope

Önceki şablon çok esnek değildir.The previous template isn't very flexible. Aşağıdaki şablon parametreleri kullanır ve farklı kapsamlarda kullanılabilir.The following template uses parameters and can be used at different scopes. Aşağıdaki şablonda şunları gösterilmektedir:The following template demonstrates:

  • Bir kaynak grubunda veya abonelik kapsamında bir Kullanıcı, Grup veya uygulamaya rol atamaHow to assign a role to a user, group, or application at either a resource group or subscription scope
  • Sahip, katkıda bulunan ve okuyucu rollerini parametre olarak belirtmeHow to specify the Owner, Contributor, and Reader roles as a parameter

Şablonu kullanmak için aşağıdaki girişleri belirtmeniz gerekir:To use the template, you must specify the following inputs:

  • Rolün atanacağı bir kullanıcının, grubun, yönetilen kimliğin veya uygulamanın KIMLIĞIThe ID of a user, group, managed identity, or application to assign the role to
  • Rol ataması için kullanılacak benzersiz bir KIMLIK veya varsayılan KIMLIĞI kullanabilirsinizA unique ID that will be used for the role assignment, or you can use the default ID
{
    "$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": "2018-09-01-preview",
            "name": "[parameters('roleNameGuid')]",
            "properties": {
                "roleDefinitionId": "[variables(parameters('builtInRoleType'))]",
                "principalId": "[parameters('principalId')]"
            }
        }
    ]
}

Not

Bu şablon, roleNameGuid şablon dağıtımı için bir parametre olarak aynı değer sağlanmamışsa ıdempotent değildir.This template is not idempotent unless the same roleNameGuid value is provided as a parameter for each deployment of the template. Hayır roleNameGuid sağlanmazsa, varsayılan olarak her dağıtımda yeni BIR GUID oluşturulur ve sonraki dağıtımlar hata vererek başarısız olur Conflict: RoleAssignmentExists .If no roleNameGuid is provided, by default a new GUID is generated on each deployment and subsequent deployments will fail with a Conflict: RoleAssignmentExists error.

Rol atamasının kapsamı, dağıtımın düzeyinden belirlenir.The scope of the role assignment is determined from the level of the deployment. Örnek New-AzResourceGroupDeployment ve az dağıtım grubu oluşturma komutları bir kaynak grubu kapsamında nasıl başlayaöğreneceksiniz?.Here are example New-AzResourceGroupDeployment and az deployment group create commands for how to start the deployment at a resource group scope.

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 örnek New-azdeployment ve bir abonelik kapsamında dağıtımın başlatılması ve konumun belirtilmesi için az dağıtım alt oluşturma komutları verilmiştir.Here are example New-AzDeployment and az deployment sub create commands for how to start the deployment at a subscription scope and specify the location.

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ıResource scope

Bir kaynak düzeyinde bir rol atamanız gerekiyorsa, scope rol atamasında özelliğini kaynağın adına ayarlayın.If you need to assign a role at the level of a resource, set the scope property on the role assignment to the name of the resource.

Aşağıdaki şablonda şunları gösterilmektedir:The following template demonstrates:

  • Yeni depolama hesabı oluşturmaHow to create a new storage account
  • Depolama hesabı kapsamındaki bir Kullanıcı, Grup veya uygulamaya rol atamaHow to assign a role to a user, group, or application at the storage account scope
  • Sahip, katkıda bulunan ve okuyucu rollerini parametre olarak belirtmeHow to specify the Owner, Contributor, and Reader roles as a parameter

Şablonu kullanmak için aşağıdaki girişleri belirtmeniz gerekir:To use the template, you must specify the following inputs:

  • Rolün atanacağı bir kullanıcının, grubun, yönetilen kimliğin veya uygulamanın KIMLIĞIThe ID of a user, group, managed identity, or application to assign the role to
{
    "$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": "2020-04-01-preview",
            "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.To deploy the previous template, you use the resource group commands. Aşağıda örnek New-AzResourceGroupDeployment ve dağıtım grubu oluşturma komutları bir kaynak kapsamında başlatılır.Here are example New-AzResourceGroupDeployment and az deployment group create commands for how to start the deployment at a resource scope.

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ğıttıktan sonra bir depolama hesabı için kullanıcıya katkıda bulunan rol atamasının bir örneği gösterilmektedir.The following shows an example of the Contributor role assignment to a user for a storage account after deploying the template.

Kaynak kapsamında rol ataması

Yeni hizmet sorumlusuNew service principal

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.If you create a new service principal and immediately try to assign a role to that service principal, that role assignment can fail in some cases. Örneğin, yeni bir yönetilen kimlik oluşturup aynı Azure Resource Manager şablonunda bu hizmet sorumlusuna bir rol atamayı denerseniz, rol ataması başarısız olabilir.For example, if you create a new managed identity and then try to assign a role to that service principal in the same Azure Resource Manager template, the role assignment might fail. Bu hatanın nedeni büyük olasılıkla çoğaltma gecikmesi.The reason for this failure is likely a replication delay. Hizmet sorumlusu tek bir bölgede oluşturulur; Ancak, rol ataması henüz hizmet sorumlusunu çoğaltılmamış farklı bir bölgede gerçekleşebilir.The service principal is created in one region; however, the role assignment might occur in a different region that hasn't replicated the service principal yet.

Bu senaryoya yönelik olarak, principalType rol atamasını oluştururken özelliğini olarak ayarlamanız gerekir ServicePrincipal .To address this scenario, you should set the principalType property to ServicePrincipal when creating the role assignment. apiVersionRol atamasının öğesini 2018-09-01-preview veya daha sonra da ayarlamanız gerekir.You must also set the apiVersion of the role assignment to 2018-09-01-preview or later.

Aşağıdaki şablonda şunları gösterilmektedir:The following template demonstrates:

  • Yeni bir yönetilen kimlik hizmeti sorumlusu oluşturmaHow to create a new managed identity service principal
  • Şunu belirtme principalTypeHow to specify the principalType
  • Kaynak grubu kapsamındaki bu hizmet sorumlusuna katkıda bulunan rolü atamaHow to assign the Contributor role to that service principal at a resource group scope

Şablonu kullanmak için aşağıdaki girişleri belirtmeniz gerekir:To use the template, you must specify the following inputs:

  • Yönetilen kimliğin temel adı veya varsayılan dizeyi kullanabilirsinizThe base name of the managed identity, or you can use the default string
{
    "$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": "2018-09-01-preview",
            "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"
            }
        }
    ]
}

Örnek New-AzResourceGroupDeployment ve az dağıtım grubu oluşturma komutları bir kaynak grubu kapsamında nasıl başlayaöğreneceksiniz?.Here are example New-AzResourceGroupDeployment and az deployment group create commands for how to start the deployment at a resource group scope.

New-AzResourceGroupDeployment -ResourceGroupName ExampleGroup2 -TemplateFile rbac-test.json
az deployment group create --resource-group ExampleGroup2 --template-file rbac-test.json

Aşağıda, şablonu dağıttıktan sonra yeni bir yönetilen kimlik hizmeti sorumlusuna katkıda bulunan rolü atamasının bir örneği gösterilmektedir.The following shows an example of the Contributor role assignment to a new managed identity service principal after deploying the template.

Yeni yönetilen kimlik hizmeti sorumlusu için rol ataması

Sonraki adımlarNext steps