Přiřazení rolí Azure pomocí šablon Azure Resource Manageru
Řízení přístupu na základě role v Azure (Azure RBAC) je autorizační systém, který používáte ke správě přístupu k prostředkům Azure. Chcete-li udělit přístup, přiřaďte role uživatelům, skupinám, instančním objektům nebo spravovaným identitám v konkrétním rozsahu. Kromě použití Azure PowerShellu nebo Azure CLI můžete role přiřadit pomocí šablon Azure Resource Manageru. Šablony můžou být užitečné, pokud potřebujete prostředky nasazovat konzistentně a opakovaně. Tento článek popisuje, jak přiřadit role pomocí šablon.
Poznámka:
Bicep je nový jazyk pro definování prostředků Azure. Má jednodušší prostředí pro vytváření obsahu než JSON a další funkce, které pomáhají zlepšit kvalitu infrastruktury jako kódu. Doporučujeme, aby každý nový uživatel infrastruktury jako kód v Azure používal Bicep místo JSON.
Další informace o definování přiřazení rolí pomocí Bicep najdete v tématu Vytváření prostředků Azure RBAC pomocí Bicep. Příklad rychlého startu najdete v tématu Rychlý start: Přiřazení role Azure pomocí Bicep.
Požadavky
Pokud chcete přiřazovat role Azure, musíte mít:
Microsoft.Authorization/roleAssignments/write
oprávnění, jako je řízení přístupu na základě role Správa istrator nebo uživatelský přístup Správa istrator
Musíte použít následující verze:
2018-09-01-preview
nebo novější pro přiřazení role Azure k novému instančnímu objektu2020-04-01-preview
nebo novější, pokud chcete přiřadit roli Azure v oboru prostředků2022-04-01
je první stabilní verze.
Další informace najdete v tématu Verze rozhraní API azure RBAC REST API.
Získání ID objektů
Pokud chcete přiřadit roli, musíte zadat ID uživatele, skupiny nebo aplikace, ke které chcete roli přiřadit. ID má formát: 11111111-1111-1111-1111-111111111111
. ID můžete získat pomocí webu Azure Portal, Azure PowerShellu nebo Azure CLI.
Uživatelská
K získání ID uživatele můžete použít příkazy Get-AzADUser nebo az ad user show .
$objectid = (Get-AzADUser -DisplayName "{name}").id
objectid=$(az ad user show --id "{email}" --query id --output tsv)
Seskupit
K získání ID skupiny můžete použít příkazy Get-AzADGroup nebo az ad group show .
$objectid = (Get-AzADGroup -DisplayName "{name}").id
objectid=$(az ad group show --group "{name}" --query id --output tsv)
Spravované identity
Pokud chcete získat ID spravované identity, můžete použít rutiny Get-AzAdServiceprincipal nebo 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)
Aplikace
Pokud chcete získat ID instančního objektu (identitu používanou aplikací), můžete použít příkazy Get-AzADServicePrincipal nebo az ad sp list . Pro instanční objekt použijte ID objektu, nikoli ID aplikace.
$objectid = (Get-AzADServicePrincipal -DisplayName "{name}").id
objectid=$(az ad sp list --display-name "{name}" --query [].id --output tsv)
Přiřazení role Azure
Pokud chcete v Azure RBAC udělit přístup, přiřaďte roli.
Rozsah skupiny prostředků (bez parametrů)
Následující šablona ukazuje základní způsob přiřazení role. Některé hodnoty jsou zadané v šabloně. Následující šablona ukazuje:
- Přiřazení role Čtenář uživateli, skupině nebo aplikaci v oboru skupiny prostředků
Pokud chcete šablonu použít, musíte udělat toto:
- Vytvoření nového souboru JSON a zkopírování šablony
- Nahraďte
<your-principal-id>
ID uživatele, skupiny, spravované identity nebo aplikace, ke které se má role přiřadit.
{
"$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>"
}
}
]
}
Tady je příklad New-AzResourceGroupDeployment a az deployment group create commands for how to start the deployment in a resource group group named ExampleGroup.
New-AzResourceGroupDeployment -ResourceGroupName ExampleGroup -TemplateFile rbac-test.json
az deployment group create --resource-group ExampleGroup --template-file rbac-test.json
Následuje příklad přiřazení role Čtenář uživateli pro skupinu prostředků po nasazení šablony.
Rozsah skupiny prostředků nebo předplatného
Předchozí šablona není příliš flexibilní. Následující šablona používá parametry a lze je použít v různých oborech. Následující šablona ukazuje:
- Přiřazení role uživateli, skupině nebo aplikaci v oboru skupiny prostředků nebo předplatného
- Určení rolí Vlastník, Přispěvatel a Čtenář jako parametr
Pokud chcete šablonu použít, musíte zadat následující vstupy:
- ID uživatele, skupiny, spravované identity nebo aplikace pro přiřazení role
- Jedinečné ID, které se použije pro přiřazení role, nebo můžete použít výchozí 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": "2022-04-01",
"name": "[parameters('roleNameGuid')]",
"properties": {
"roleDefinitionId": "[variables(parameters('builtInRoleType'))]",
"principalId": "[parameters('principalId')]"
}
}
]
}
Poznámka:
Tato šablona není idempotentní, pokud není pro každé nasazení šablony zadaná stejná roleNameGuid
hodnota jako parametr. Pokud není roleNameGuid
k dispozici, ve výchozím nastavení se pro každé nasazení vygeneruje nový identifikátor GUID a následná nasazení selžou s chybou Conflict: RoleAssignmentExists
.
Rozsah přiřazení role se určuje z úrovně nasazení. Tady je příklad New-AzResourceGroupDeployment a 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
Tady jsou příklady příkazů New-AzDeployment a az deployment sub create pro spuštění nasazení v oboru předplatného a určení umístění.
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
Obor prostředku
Pokud potřebujete přiřadit roli na úrovni prostředku, nastavte scope
vlastnost přiřazení role na název prostředku.
Následující šablona ukazuje:
- Vytvoření nového účtu úložiště
- Přiřazení role uživateli, skupině nebo aplikaci v oboru účtu úložiště
- Určení rolí Vlastník, Přispěvatel a Čtenář jako parametr
Pokud chcete šablonu použít, musíte zadat následující vstupy:
- ID uživatele, skupiny, spravované identity nebo aplikace pro přiřazení role
{
"$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')]"
}
}
]
}
Pokud chcete nasadit předchozí šablonu, použijte příkazy skupiny prostředků. Tady je příklad New-AzResourceGroupDeployment a 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
Následuje příklad přiřazení role Přispěvatel uživateli pro účet úložiště po nasazení šablony.
Nový instanční objekt
Pokud vytvoříte nový instanční objekt a okamžitě se pokusíte přiřadit roli k danému instančnímu objektu, přiřazení této role může v některých případech selhat. Pokud například vytvoříte novou spravovanou identitu a pak se pokusíte přiřadit roli k danému instančnímu objektu ve stejné šabloně Azure Resource Manageru, přiřazení role může selhat. Důvodem tohoto selhání je pravděpodobně zpoždění replikace. Instanční objekt se vytvoří v jedné oblasti; Přiřazení role však může nastat v jiné oblasti, která ještě nereplikovala instanční objekt.
Pokud chcete tento scénář vyřešit, měli byste vlastnost ServicePrincipal
nastavit principalType
při vytváření přiřazení role. Musíte také nastavit vlastnost apiVersion
přiřazení role na hodnotu 2018-09-01-preview
nebo novější. 2022-04-01
je první stabilní verze.
Následující šablona ukazuje:
- Vytvoření nového instančního objektu spravované identity
- Jak zadat
principalType
- Přiřazení role Přispěvatel k danému instančnímu objektu v oboru skupiny prostředků
Pokud chcete šablonu použít, musíte zadat následující vstupy:
- Základní název spravované identity nebo můžete použít výchozí řetězec.
{
"$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"
}
}
]
}
Tady je příklad New-AzResourceGroupDeployment a 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
Následuje příklad přiřazení role Přispěvatel k novému instančnímu objektu spravované identity po nasazení šablony.