Tilldela Azure-roller med hjälp av Azure Resource Manager-mallar
Rollbaserad åtkomstkontroll i Azure (Azure RBAC) är det auktoriseringssystem som du använder för att hantera åtkomst till Azure-resurser. Om du vill bevilja åtkomst tilldelar du roller till användare, grupper, tjänsthuvudnamn eller hanterade identiteter i ett visst omfång. Förutom att använda Azure PowerShell eller Azure CLI kan du tilldela roller med hjälp av Azure Resource Manager-mallar. Mallar kan vara användbara om du behöver distribuera resurser konsekvent och upprepade gånger. I den här artikeln beskrivs hur du tilldelar roller med hjälp av mallar.
Kommentar
Bicep är ett nytt språk för att definiera dina Azure-resurser. Den har en enklare redigeringsupplevelse än JSON, tillsammans med andra funktioner som hjälper till att förbättra kvaliteten på infrastrukturen som kod. Vi rekommenderar att alla som är nya i infrastrukturen som kod i Azure använder Bicep i stället för JSON.
Mer information om hur du definierar rolltilldelningar med hjälp av Bicep finns i Skapa Azure RBAC-resurser med hjälp av Bicep. Ett snabbstartsexempel finns i Snabbstart: Tilldela en Azure-roll med Bicep.
Förutsättningar
För att tilldela Azure-roller måste du ha:
Microsoft.Authorization/roleAssignments/write
behörigheter, till exempel administratör för rollbaserad åtkomstkontroll eller administratör för användaråtkomst
Du måste använda följande versioner:
2018-09-01-preview
eller senare för att tilldela en Azure-roll till ett nytt huvudnamn för tjänsten2020-04-01-preview
eller senare för att tilldela en Azure-roll i resursomfånget2022-04-01
är den första stabila versionen
Mer information finns i API-versioner av Azure RBAC REST API:er.
Hämta objekt-ID:t
Om du vill tilldela en roll måste du ange ID för den användare, grupp eller det program som du vill tilldela rollen till. ID:t har formatet : 11111111-1111-1111-1111-111111111111
. Du kan hämta ID:t med hjälp av Azure-portalen, Azure PowerShell eller Azure CLI.
User
Om du vill hämta ID:t för en användare kan du använda kommandona Get-AzADUser eller az ad user show .
$objectid = (Get-AzADUser -DisplayName "{name}").id
objectid=$(az ad user show --id "{email}" --query id --output tsv)
Grupp
Om du vill hämta ID:t för en grupp kan du använda kommandona Get-AzADGroup eller az ad group show .
$objectid = (Get-AzADGroup -DisplayName "{name}").id
objectid=$(az ad group show --group "{name}" --query id --output tsv)
Hanterade identiteter
Om du vill hämta ID:t för en hanterad identitet kan du använda Kommandona Get-AzAdServiceprincipal eller az ad sp .
$objectid = (Get-AzADServicePrincipal -DisplayName <Azure resource name>).id
objectid=$(az ad sp list --display-name <Azure resource name> --query [].id --output tsv)
Program
Om du vill hämta ID:t för ett tjänsthuvudnamn (identitet som används av ett program) kan du använda kommandona Get-AzADServicePrincipal eller az ad sp list . För tjänstens huvudnamn använder du objekt-ID:t och inte program-ID:t.
$objectid = (Get-AzADServicePrincipal -DisplayName "{name}").id
objectid=$(az ad sp list --display-name "{name}" --query [].id --output tsv)
Tilldela en Azure-roll
För att bevilja åtkomst i Azure RBAC tilldelar du en roll.
Resursgruppsomfång (utan parametrar)
Följande mall visar ett grundläggande sätt att tilldela en roll. Vissa värden anges i mallen. Följande mall visar:
- Så här tilldelar du rollen Läsare till en användare, grupp eller ett program i ett resursgruppsomfång
Om du vill använda mallen måste du göra följande:
- Skapa en ny JSON-fil och kopiera mallen
- Ersätt
<your-principal-id>
med ID:t för en användare, grupp, hanterad identitet eller ett program för att tilldela rollen till
{
"$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>"
}
}
]
}
Här är exempel på kommandona New-AzResourceGroupDeployment och az deployment group create för hur du startar distributionen i en resursgrupp med namnet ExampleGroup.
New-AzResourceGroupDeployment -ResourceGroupName ExampleGroup -TemplateFile rbac-test.json
az deployment group create --resource-group ExampleGroup --template-file rbac-test.json
Följande visar ett exempel på rolltilldelningen Läsare till en användare för en resursgrupp efter att mallen har distribuerats.
Resursgrupp eller prenumerationsomfång
Den tidigare mallen är inte särskilt flexibel. Följande mall använder parametrar och kan användas i olika omfång. Följande mall visar:
- Så här tilldelar du en roll till en användare, grupp eller ett program i antingen en resursgrupp eller prenumerationsomfång
- Så här anger du rollerna Ägare, Deltagare och Läsare som en parameter
Om du vill använda mallen måste du ange följande indata:
- ID för en användare, grupp, hanterad identitet eller ett program för att tilldela rollen till
- Ett unikt ID som ska användas för rolltilldelningen, eller så kan du använda standard-ID:t
{
"$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')]"
}
}
]
}
Kommentar
Den här mallen är inte idempotent om inte samma roleNameGuid
värde anges som en parameter för varje distribution av mallen. Om inget roleNameGuid
anges genereras som standard ett nytt GUID för varje distribution och efterföljande distributioner misslyckas med ett Conflict: RoleAssignmentExists
fel.
Omfånget för rolltilldelningen bestäms från distributionsnivån. Här är exempel på kommandona New-AzResourceGroupDeployment och az deployment group create för hur du startar distributionen i ett resursgruppsomfång.
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
Här är exempel på kommandona New-AzDeployment och az deployment sub create för hur du startar distributionen i ett prenumerationsomfång och anger platsen.
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
Resursomfång
Om du behöver tilldela en roll på resursnivå anger du scope
egenskapen för rolltilldelningen till resursens namn.
Följande mall visar:
- Så här skapar du ett nytt lagringskonto
- Så här tilldelar du en roll till en användare, grupp eller ett program i lagringskontots omfång
- Så här anger du rollerna Ägare, Deltagare och Läsare som en parameter
Om du vill använda mallen måste du ange följande indata:
- ID för en användare, grupp, hanterad identitet eller ett program för att tilldela rollen till
{
"$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')]"
}
}
]
}
Om du vill distribuera den tidigare mallen använder du resursgruppskommandona. Här är exempel på kommandona New-AzResourceGroupDeployment och az deployment group create för hur du startar distributionen i ett resursomfång.
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
Följande visar ett exempel på rolltilldelningen Deltagare till en användare för ett lagringskonto när mallen har distribuerats.
Nytt huvudnamn för tjänsten
Om du skapar ett nytt huvudnamn för tjänsten och omedelbart försöker tilldela tjänstens huvudnamn en roll kan rolltilldelningen misslyckas i vissa fall. Om du till exempel skapar en ny hanterad identitet och sedan försöker tilldela tjänstens huvudnamn en roll i samma Azure Resource Manager-mall kan rolltilldelningen misslyckas. Orsaken till det här felet är sannolikt en replikeringsfördröjning. Tjänstens huvudnamn skapas i en region. Rolltilldelningen kan dock ske i en annan region som inte har replikerat tjänstens huvudnamn ännu.
För att hantera det här scenariot bör du ange principalType
egenskapen till ServicePrincipal
när du skapar rolltilldelningen. Du måste även ange apiVersion
för rolltilldelningen till 2018-09-01-preview
eller senare. 2022-04-01
är den första stabila versionen.
Följande mall visar:
- Så här skapar du ett nytt huvudnamn för tjänsten för hanterad identitet
- Så här anger du
principalType
- Så här tilldelar du rollen Deltagare till tjänstens huvudnamn i ett resursgruppsomfång
Om du vill använda mallen måste du ange följande indata:
- Basnamnet för den hanterade identiteten, eller så kan du använda standardsträngen
{
"$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"
}
}
]
}
Här är exempel på kommandona New-AzResourceGroupDeployment och az deployment group create för hur du startar distributionen i ett resursgruppsomfång.
New-AzResourceGroupDeployment -ResourceGroupName ExampleGroup2 -TemplateFile rbac-test.json
az deployment group create --resource-group ExampleGroup2 --template-file rbac-test.json
Följande visar ett exempel på rolltilldelningen Deltagare till ett nytt huvudnamn för den hanterade identitetstjänsten efter att mallen har distribuerats.