Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC) is het autorisatiesysteem om de toegang tot Azure-resources te beheren. Als u toegang wilt verlenen, wijst u rollen toe aan gebruikers, groepen, service-principals of beheerde identiteiten in een bepaald bereik. Naast het gebruik van Azure PowerShell of de Azure CLI kunt u rollen toewijzen met behulp van Azure Resource Manager-sjablonen. Sjablonen kunnen handig zijn als u resources consistent en herhaaldelijk moet implementeren. In dit artikel wordt beschreven hoe u rollen toewijst met behulp van sjablonen.
Notitie
Bicep is een nieuwe taal voor het definiëren van uw Azure-resources. Het heeft een eenvoudigere ontwerpervaring dan JSON, samen met andere functies die de kwaliteit van uw infrastructuur als code helpen verbeteren. Het is raadzaam dat iedereen die niet bekend is met infrastructuur als code in Azure Bicep gebruikt in plaats van JSON.
Zie Azure RBAC-resources maken met Bicep voor meer informatie over het definiëren van roltoewijzingen met behulp van Bicep. Zie Quickstart: Een Azure-rol toewijzen met Bicep voor een snelstartvoorbeeld.
Vereiste voorwaarden
Als u Azure-rollen wilt toewijzen, hebt u het volgende nodig:
-
Microsoft.Authorization/roleAssignments/write
machtigingen, zoals op rollen gebaseerd toegangsbeheer ofbeheerder van gebruikerstoegang
U moet de volgende versies gebruiken:
-
2018-09-01-preview
of later om een Azure-rol toe te wijzen aan een nieuwe service principal -
2020-04-01-preview
of hoger om een Azure-rol toe te wijzen op resourcescope-niveau -
2022-04-01
is de eerste stabiele versie
Zie API-versies van Azure RBAC REST API's voor meer informatie.
Object-ids ophalen
Als u een rol wilt toewijzen, moet u de id opgeven van de gebruiker, groep of toepassing waaraan u de rol wilt toewijzen. De id heeft de volgende indeling: 11111111-1111-1111-1111-111111111111
. U kunt de id ophalen met behulp van Azure Portal, Azure PowerShell of Azure CLI.
Gebruiker
Als u de id van een gebruiker wilt ophalen, kunt u de opdrachten Get-AzADUser of az ad user show gebruiken.
$objectid = (Get-AzADUser -DisplayName "{name}").id
objectid=$(az ad user show --id "{email}" --query id --output tsv)
Groep
Als u de id van een groep wilt ophalen, kunt u de opdrachten Get-AzADGroup of az ad group show gebruiken.
$objectid = (Get-AzADGroup -DisplayName "{name}").id
objectid=$(az ad group show --group "{name}" --query id --output tsv)
Beheerde identiteiten
Als u de id van een beheerde identiteit wilt ophalen, kunt u Get-AzAdServiceprincipal of az ad sp-opdrachten gebruiken.
$objectid = (Get-AzADServicePrincipal -DisplayName <Azure resource name>).id
objectid=$(az ad sp list --display-name <Azure resource name> --query [].id --output tsv)
Applicatie
Om de id van een service-principal (identiteit die door een toepassing wordt gebruikt) te verkrijgen, kunt u de opdrachten Get-AzADServicePrincipal of az ad sp list gebruiken. Gebruik voor een service-principal de object-id en niet de toepassings-id.
$objectid = (Get-AzADServicePrincipal -DisplayName "{name}").id
objectid=$(az ad sp list --display-name "{name}" --query [].id --output tsv)
Een Azure-rol toewijzen
In Azure RBAC wijst u een rol toe om toegang te verlenen.
Bereik van resourcegroep (zonder parameters)
In de volgende sjabloon ziet u een eenvoudige manier om een rol toe te wijzen. Sommige waarden worden opgegeven in de sjabloon. De volgende sjabloon demonstreert:
- De rol Lezer toewijzen aan een gebruiker, groep of toepassing binnen een resourcegroepbereik
Als u de sjabloon wilt gebruiken, moet u het volgende doen:
- Een nieuw JSON-bestand maken en de sjabloon kopiëren
- Vervang
<your-principal-id>
door de id van een gebruiker, groep, beheerde identiteit of toepassing om de rol toe te wijzen aan
{
"$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>"
}
}
]
}
Hier volgen voorbeelden van commando's voor New-AzResourceGroupDeployment en az deployment group create om de implementatie te starten in een resourcegroep met de naam ExampleGroup.
New-AzResourceGroupDeployment -ResourceGroupName ExampleGroup -TemplateFile rbac-test.json
az deployment group create --resource-group ExampleGroup --template-file rbac-test.json
Hieronder ziet u een voorbeeld van de roltoewijzing Lezer voor een gebruiker voor een resourcegroep nadat de sjabloon is geïmplementeerd.
Resourcegroep of abonnementsbereik
De vorige sjabloon is niet erg flexibel. De volgende sjabloon maakt gebruik van parameters en kan worden gebruikt op verschillende niveaus. De volgende sjabloon demonstreert:
- Een rol toewijzen aan een gebruiker, groep of applicatie binnen het bereik van een resourcegroep of van een abonnement.
- De rollen Eigenaar, Inzender en Lezer opgeven als parameter
Als u de sjabloon wilt gebruiken, moet u de volgende invoer opgeven:
- De id van een gebruiker, groep, beheerde identiteit of toepassing waaraan de rol moet worden toegewezen
- Een unieke id die wordt gebruikt voor de roltoewijzing, of u kunt de standaard-id gebruiken
{
"$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')]"
}
}
]
}
Notitie
Deze sjabloon is niet idempotent, tenzij dezelfde roleNameGuid
waarde wordt opgegeven als een parameter voor elke implementatie van de sjabloon. Als er geen roleNameGuid
is opgegeven, wordt standaard een nieuwe GUID gegenereerd voor elke implementatie en mislukt de volgende implementaties met een Conflict: RoleAssignmentExists
fout.
Het bereik van de roltoewijzing wordt bepaald op basis van het niveau van de implementatie. Hier zijn voorbeelden van de commando's New-AzResourceGroupDeployment en az deployment group create om te starten met de implementatie binnen de scope van een resourcegroep.
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
Hier volgen voorbeelden van opdrachten voor new-AzDeployment en az deployment sub create voor het starten van de implementatie in een abonnementsbereik en het opgeven van de locatie.
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
Omvang van de middelen
Als u een rol wilt toewijzen op het niveau van een resource, stelt u de scope
eigenschap voor de roltoewijzing in op de naam van de resource.
De volgende sjabloon demonstreert:
- Een nieuw opslagaccount maken
- Een rol toewijzen aan een gebruiker, groep of toepassing in het bereik van het opslagaccount
- De rollen Eigenaar, Inzender en Lezer opgeven als parameter
Als u de sjabloon wilt gebruiken, moet u de volgende invoer opgeven:
- De id van een gebruiker, groep, beheerde identiteit of toepassing waaraan de rol moet worden toegewezen
{
"$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')]"
}
}
]
}
Als u de vorige sjabloon wilt implementeren, gebruikt u de opdrachten van de resourcegroep. Hier zijn voorbeelden van de opdrachten New-AzResourceGroupDeployment en az deployment group create voor het starten van de implementatie op resource-niveau.
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
Hieronder ziet u een voorbeeld van de roltoewijzing Inzender voor een gebruiker voor een opslagaccount nadat de sjabloon is geïmplementeerd.
Nieuwe service-principal
Als u een nieuwe service-principal maakt en onmiddellijk probeert een rol toe te wijzen aan die service-principal, kan die roltoewijzing in sommige gevallen mislukken. Als u bijvoorbeeld een nieuwe beheerde identiteit maakt en vervolgens probeert een rol toe te wijzen aan die service-principal in dezelfde Azure Resource Manager-sjabloon, kan de roltoewijzing mislukken. De reden voor deze fout is waarschijnlijk een replicatievertraging. De service-principal wordt in één regio gemaakt; De roltoewijzing kan echter plaatsvinden in een andere regio die de service-principal nog niet heeft gerepliceerd.
Om dit scenario aan te pakken, moet u bij het maken van de roltoewijzing de eigenschap principalType
instellen op ServicePrincipal
. U moet ook de apiVersion
roltoewijzing instellen op 2018-09-01-preview
of later.
2022-04-01
is de eerste stabiele versie.
De volgende sjabloon demonstreert:
- Een nieuwe service-principal voor een beheerde identiteit aanmaken
- Hoe u de
principalType
specificeert - De rol Contributor aan die service-principal toewijzen op het niveau van een resourcegroep
Als u de sjabloon wilt gebruiken, moet u de volgende invoer opgeven:
- De basisnaam van de beheerde identiteit of u kunt de standaardtekenreeks gebruiken
{
"$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"
}
}
]
}
Hier zijn voorbeelden van de commando's New-AzResourceGroupDeployment en az deployment group create om te starten met de implementatie binnen de scope van een resourcegroep.
New-AzResourceGroupDeployment -ResourceGroupName ExampleGroup2 -TemplateFile rbac-test.json
az deployment group create --resource-group ExampleGroup2 --template-file rbac-test.json
Hieronder ziet u een voorbeeld van de Inzender-roltoewijzing aan een nieuwe beheerde-identiteitsservice-principal na implementatie van de sjabloon.