Roltoewijzingen toevoegen met behulp van Azure RBAC en Azure Resource Manager sjablonenAdd role assignments using Azure RBAC and Azure Resource Manager templates

Op rollen gebaseerd toegangs beheer (RBAC) van Azure is het autorisatie systeem dat u gebruikt om de toegang tot Azure-resources te beheren.Azure role-based access control (RBAC) is the authorization system you use to manage access to Azure resources. Als u toegang wilt verlenen, wijst u rollen toe aan gebruikers, groepen, service-principals of beheerde identiteiten voor een bepaald bereik.To grant access, you assign roles to users, groups, service principals, or managed identities at a particular scope. naast het gebruik van Azure PowerShell of de Azure CLI kunt u rollen toewijzen met behulp van Azure Resource Manager-sjablonen.Op rollen gebaseerd toegangs beheer (RBAC) van Azure is het autorisatie systeem dat u gebruikt om de toegang tot Azure-resources te beheren.Azure role-based access control (RBAC) is the authorization system you use to manage access to Azure resources. Als u toegang wilt verlenen, wijst u rollen toe aan gebruikers, groepen, service-principals of beheerde identiteiten voor een bepaald bereik.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. Sjablonen kunnen nuttig zijn als u resources consistent en herhaaldelijk wilt implementeren.Templates can be helpful if you need to deploy resources consistently and repeatedly. In dit artikel wordt beschreven hoe u rollen toewijst met behulp van sjablonen.This article describes how to assign roles using templates.

Object-Id's ophalenGet object IDs

Als u een rol wilt toewijzen, moet u de ID opgeven van de gebruiker, groep of toepassing waaraan u de rol wilt toewijzen.To assign a role, you need to specify the ID of the user, group, or application you want to assign the role to. De ID heeft de volgende indeling: 11111111-1111-1111-1111-111111111111.The ID has the format: 11111111-1111-1111-1111-111111111111. U kunt de ID ophalen met behulp van de Azure Portal, Azure PowerShell of Azure CLI.You can get the ID using the Azure portal, Azure PowerShell, or Azure CLI.

GebruikerUser

Als u de ID van een gebruiker wilt ophalen, kunt u de opdrachten Get-AzADUser of AZ AD User show gebruiken.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)

GroepGroup

Als u de ID van een groep wilt ophalen, kunt u de opdrachten Get-AzADGroup of AZ Ad Group show gebruiken.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)

ToepassingApplication

Als u de ID wilt ophalen van een service-principal (identiteit die wordt gebruikt door een toepassing), kunt u de opdrachten Get-AzADServicePrincipal of AZ AD SP List gebruiken.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. Gebruik voor een service-principal de object-ID en niet de toepassings-id.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)

Een roltoewijzing toevoegenAdd a role assignment

Als u in RBAC toegang wilt verlenen, voegt u een roltoewijzing toe.In RBAC, to grant access, you add a role assignment.

Resource groep (zonder para meters)Resource group (without parameters)

De volgende sjabloon toont een eenvoudige manier om een roltoewijzing toe te voegen.The following template shows a basic way to add a role assignment. Sommige waarden worden opgegeven in de sjabloon.Some values are specified within the template. In de volgende sjabloon ziet u:The following template demonstrates:

  • De rol van lezer toewijzen aan een gebruiker, groep of toepassing in een bereik van een resource groepHow to assign the Reader role to a user, group, or application at a resource group scope

Als u de sjabloon wilt gebruiken, moet u het volgende doen:To use the template, you must do the following:

  • Een nieuw JSON-bestand maken en de sjabloon kopiërenCreate a new JSON file and copy the template
  • <your-principal-id> vervangen door de ID van een gebruiker, groep of toepassing om de rol toe te wijzen aanReplace <your-principal-id> with the ID of a user, group, 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>"
            }
        }
    ]
}

Hier vindt u een voor beeld van New-AzResourceGroupDeployment en AZ Group Deployment opdrachten maken voor het starten van de implementatie in een resource groep met de naam ExampleGroup.Here are example New-AzResourceGroupDeployment and az group deployment create commands for how to start the deployment in a resource group named ExampleGroup.

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

Hieronder ziet u een voor beeld van de toewijzing van de rol van lezers aan een gebruiker voor een resource groep na het implementeren van de sjabloon.The following shows an example of the Reader role assignment to a user for a resource group after deploying the template.

Roltoewijzing op het bereik van de resource groep

Resource groep of-abonnementResource group or subscription

De vorige sjabloon is niet zeer flexibel.The previous template isn't very flexible. De volgende sjabloon maakt gebruik van para meters en kan worden gebruikt in verschillende bereiken.The following template uses parameters and can be used at different scopes. In de volgende sjabloon ziet u:The following template demonstrates:

  • Een rol toewijzen aan een gebruiker, groep of toepassing in een resource groep of abonnements bereikHow to assign a role to a user, group, or application at either a resource group or subscription scope
  • De rol van eigenaar, bijdrager en lezer opgeven als een para meterHow to specify the Owner, Contributor, and Reader roles as a parameter

Als u de sjabloon wilt gebruiken, moet u de volgende invoer opgeven:To use the template, you must specify the following inputs:

  • De ID van een gebruiker, groep of toepassing waaraan de rol moet worden toegewezenThe ID of a user, group, or application to assign the role to
  • Een unieke ID die wordt gebruikt voor de roltoewijzing, of u kunt de standaard-ID gebruikenA 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')]"
            }
        }
    ]
}

Notitie

Deze sjabloon is niet idempotent tenzij dezelfde roleNameGuid waarde wordt gegeven als een para meter voor elke implementatie van de sjabloon.This template is not idempotent unless the same roleNameGuid value is provided as a parameter for each deployment of the template. Als er geen roleNameGuid wordt gegeven, wordt er standaard een nieuwe GUID gegenereerd voor elke implementatie en mislukken volgende implementaties met een Conflict: RoleAssignmentExists fout.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.

Het bereik van de roltoewijzing wordt bepaald op basis van het niveau van de implementatie.The scope of the role assignment is determined from the level of the deployment. Hier vindt u een voor beeld van New-AzResourceGroupDeployment en AZ Group Deployment opdrachten maken voor het starten van de implementatie in een bereik van een resource groep.Here are example New-AzResourceGroupDeployment and az group deployment 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 group deployment create --resource-group ExampleGroup --template-file rbac-test.json --parameters principalId=$objectid builtInRoleType=Reader

Hier vindt u een voor beeld van New-AzDeployment en AZ Deployment Create opdrachten voor het starten van de implementatie op een abonnements bereik en het opgeven van de locatie.Here are example New-AzDeployment and az deployment 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 create --location centralus --template-file rbac-test.json --parameters principalId=$objectid builtInRoleType=Reader

BronResource

Als u een roltoewijzing moet toevoegen op het niveau van een resource, is de indeling van de roltoewijzing verschillend.If you need to add a role assignment at the level of a resource, the format of the role assignment is different. U geeft de naam ruimte van de resource provider en het resource type van de resource waaraan u de rol wilt toewijzen.You provide the resource provider namespace and resource type of the resource to assign the role to. U neemt ook de naam van de resource op in de naam van de roltoewijzing.You also include the name of the resource in the name of the role assignment.

Voor het type en de naam van de roltoewijzing gebruikt u de volgende indeling:For the type and name of the role assignment, use the following format:

"type": "{resource-provider-namespace}/{resource-type}/providers/roleAssignments",
"name": "{resource-name}/Microsoft.Authorization/{role-assign-GUID}"

In de volgende sjabloon ziet u:The following template demonstrates:

  • Een nieuw opslagaccount makenHow to create a new storage account
  • Een rol toewijzen aan een gebruiker, groep of toepassing in het bereik van het opslag accountHow to assign a role to a user, group, or application at the storage account scope
  • De rol van eigenaar, bijdrager en lezer opgeven als een para meterHow to specify the Owner, Contributor, and Reader roles as a parameter

Als u de sjabloon wilt gebruiken, moet u de volgende invoer opgeven:To use the template, you must specify the following inputs:

  • De ID van een gebruiker, groep of toepassing waaraan de rol moet worden toegewezenThe ID of a user, group, or application to assign the role to
{
    "$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"
            }
        },
        "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.Storage/storageAccounts/providers/roleAssignments",
            "apiVersion": "2018-09-01-preview",
            "name": "[concat(variables('storageName'), '/Microsoft.Authorization/', guid(uniqueString(variables('storageName'))))]",
            "dependsOn": [
                "[variables('storageName')]"
            ],
            "properties": {
                "roleDefinitionId": "[variables(parameters('builtInRoleType'))]",
                "principalId": "[parameters('principalId')]"
            }
        }
    ]
}

Als u de vorige sjabloon wilt implementeren, gebruikt u de opdrachten van de resource groep.To deploy the previous template, you use the resource group commands. Hier vindt u een voor beeld van New-AzResourceGroupDeployment en AZ Group Deployment opdrachten maken voor het starten van de implementatie in een resource bereik.Here are example New-AzResourceGroupDeployment and az group deployment 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 group deployment create --resource-group ExampleGroup --template-file rbac-test.json --parameters principalId=$objectid builtInRoleType=Contributor

Hieronder ziet u een voor beeld van de toewijzing van de rol Inzender aan een gebruiker van een opslag account na de implementatie van de sjabloon.The following shows an example of the Contributor role assignment to a user for a storage account after deploying the template.

Roltoewijzing bij resource bereik

Nieuwe Service-PrincipalNew service principal

Als u een nieuwe Service-Principal maakt en een rol onmiddellijk probeert toe te wijzen aan die Service-Principal, kan die roltoewijzing in sommige gevallen mislukken.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. Als u bijvoorbeeld een nieuwe beheerde identiteit maakt en vervolgens probeert een rol toe te wijzen aan die Service-Principal in hetzelfde Azure Resource Manager sjabloon, kan de roltoewijzing mislukken.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. De oorzaak van deze fout is waarschijnlijk een replicatie vertraging.The reason for this failure is likely a replication delay. De service-principal wordt gemaakt in één regio. de roltoewijzing kan echter plaatsvinden in een andere regio waarvoor de Service-Principal nog niet is gerepliceerd.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. Als u dit scenario wilt aanpakken, moet u de eigenschap principalType instellen op ServicePrincipal bij het maken van de roltoewijzing.To address this scenario, you should set the principalType property to ServicePrincipal when creating the role assignment.

In de volgende sjabloon ziet u:The following template demonstrates:

  • Een nieuwe beheerde ID voor de service-principal makenHow to create a new managed identity service principal
  • De principalType opgevenHow to specify the principalType
  • De rol van Inzender toewijzen aan de Service-Principal in een bereik van een resource groepHow to assign the Contributor role to that service principal at a resource group scope

Als u de sjabloon wilt gebruiken, moet u de volgende invoer opgeven:To use the template, you must specify the following inputs:

  • De basis naam van de beheerde identiteit, of u kunt de standaard teken reeks gebruikenThe 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]",
                "scope": "[resourceGroup().id]",
                "principalType": "ServicePrincipal"
            }
        }
    ]
}

Hier vindt u een voor beeld van New-AzResourceGroupDeployment en AZ Group Deployment opdrachten maken voor het starten van de implementatie in een bereik van een resource groep.Here are example New-AzResourceGroupDeployment and az group deployment create commands for how to start the deployment at a resource group scope.

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

Hieronder ziet u een voor beeld van de toewijzing van de rol Inzender aan een nieuwe beheerde ID service-principal na de implementatie van de sjabloon.The following shows an example of the Contributor role assignment to a new managed identity service principal after deploying the template.

Roltoewijzing voor een nieuwe beheerde ID service-principal

Volgende stappenNext steps