Azure-szerepkörök hozzárendelése Azure Resource Manager-sablonok használatával
Az Azure-beli szerepköralapú hozzáférés-vezérlés (Azure RBAC) az Azure-erőforrásokhoz való hozzáférés kezeléséhez használt engedélyezési rendszer. A hozzáférés biztosításához adott hatókör mellett szerepköröket rendelhet a felhasználókhoz, csoportokhoz, szolgáltatásnevekhez vagy felügyelt identitásokhoz. Az Azure PowerShell vagy az Azure CLI használata mellett szerepköröket is hozzárendelhet Azure Resource Manager-sablonok használatával. A sablonok akkor lehetnek hasznosak, ha folyamatosan és ismétlődően kell üzembe helyeznie az erőforrásokat. Ez a cikk azt ismerteti, hogyan rendelhet hozzá szerepköröket sablonok használatával.
Feljegyzés
A Bicep egy új nyelv az Azure-erőforrások meghatározásához. A JSON-hoz képest egyszerűbb szerzői élményt nyújt, valamint más funkciókkal, amelyek segítenek az infrastruktúra kódként való minőségének javításában. Azt javasoljuk, hogy az Azure-ban kódként az infrastruktúra minden új felhasználója használja a Bicep-et JSON helyett.
A szerepkör-hozzárendelések Bicep használatával történő definiálásáról az Azure RBAC-erőforrások Bicep használatával történő létrehozásáról szóló cikkben olvashat. Rövid útmutatóként tekintse meg a rövid útmutatót: Azure-szerepkör hozzárendelése a Bicep használatával.
Előfeltételek
Azure-szerepkörök hozzárendeléséhez a következővel kell rendelkeznie:
Microsoft.Authorization/roleAssignments/write
engedélyek, például szerepköralapú hozzáférés-vezérlési Rendszergazda istrator vagy felhasználói hozzáférés-Rendszergazda istrator
A következő verziókat kell használnia:
2018-09-01-preview
vagy újabb azure-szerepkör hozzárendelése egy új szolgáltatásnévhez2020-04-01-preview
vagy később egy Azure-szerepkör erőforrás-hatókörben való hozzárendeléséhez2022-04-01
az első stabil verzió
További információkért tekintse meg az Azure RBAC REST API-k API-verzióit.
Objektumazonosítók lekérése
Szerepkör hozzárendeléséhez meg kell adnia annak a felhasználónak, csoportnak vagy alkalmazásnak az azonosítóját, amelyhez a szerepkört hozzá szeretné rendelni. Az azonosító formátuma: 11111111-1111-1111-1111-111111111111
. Az azonosítót az Azure Portal, az Azure PowerShell vagy az Azure CLI használatával szerezheti be.
Felhasználó
A felhasználó azonosítójának lekéréséhez használhatja a Get-AzADUser vagy az azd user show parancsokat.
$objectid = (Get-AzADUser -DisplayName "{name}").id
objectid=$(az ad user show --id "{email}" --query id --output tsv)
Csoport
Egy csoport azonosítójának lekéréséhez használhatja a Get-AzADGroup vagy az az ad group show parancsokat.
$objectid = (Get-AzADGroup -DisplayName "{name}").id
objectid=$(az ad group show --group "{name}" --query id --output tsv)
Felügyelt identitások
A felügyelt identitás azonosítójának lekéréséhez használhatja a Get-AzAdServiceprincipal vagy az az ad sp parancsokat.
$objectid = (Get-AzADServicePrincipal -DisplayName <Azure resource name>).id
objectid=$(az ad sp list --display-name <Azure resource name> --query [].id --output tsv)
Alkalmazás
Egy szolgáltatásnév (egy alkalmazás által használt identitás) azonosítójának lekéréséhez használhatja a Get-AzADServicePrincipal vagy az az ad sp listaparancsokat. Szolgáltatásnév esetén használja az objektumazonosítót, és ne az alkalmazásazonosítót.
$objectid = (Get-AzADServicePrincipal -DisplayName "{name}").id
objectid=$(az ad sp list --display-name "{name}" --query [].id --output tsv)
Azure-szerepkör hozzárendelése
Az Azure RBAC-ben a hozzáférés biztosításához hozzárendel egy szerepkört.
Erőforráscsoport hatóköre (paraméterek nélkül)
Az alábbi sablon egy szerepkör hozzárendelésének alapszintű módját mutatja be. Bizonyos értékek a sablonban vannak megadva. A következő sablon a következőket mutatja be:
- Az Olvasó szerepkör hozzárendelése egy felhasználóhoz, csoporthoz vagy alkalmazáshoz erőforráscsoport hatókörében
A sablon használatához a következőket kell tennie:
- Új JSON-fájl létrehozása és a sablon másolása
- Cserélje le
<your-principal-id>
egy felhasználó, csoport, felügyelt identitás vagy alkalmazás azonosítójára a szerepkör hozzárendeléséhez
{
"$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>"
}
}
]
}
Az alábbiakban a New-AzResourceGroupDeployment és az az deployment group create parancsokat talál , amelyek segítségével elindíthatja az üzembe helyezést egy ExampleGroup nevű erőforráscsoportban.
New-AzResourceGroupDeployment -ResourceGroupName ExampleGroup -TemplateFile rbac-test.json
az deployment group create --resource-group ExampleGroup --template-file rbac-test.json
Az alábbiakban egy példa látható arra, hogy az Olvasó szerepkör hozzárendelése egy felhasználóhoz egy erőforráscsoporthoz a sablon üzembe helyezése után.
Erőforráscsoport vagy előfizetés hatóköre
Az előző sablon nem túl rugalmas. Az alábbi sablon paramétereket használ, és különböző hatókörökben használható. A következő sablon a következőket mutatja be:
- Szerepkör hozzárendelése egy felhasználóhoz, csoporthoz vagy alkalmazáshoz erőforráscsoportban vagy előfizetési hatókörben
- Tulajdonosi, közreműködői és olvasói szerepkörök megadása paraméterként
A sablon használatához a következő bemeneteket kell megadnia:
- Egy felhasználó, csoport, felügyelt identitás vagy alkalmazás azonosítója a szerepkör hozzárendeléséhez
- A szerepkör-hozzárendeléshez használt egyedi azonosító, vagy használhatja az alapértelmezett azonosító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')]"
}
}
]
}
Feljegyzés
Ez a sablon csak akkor idempotens, ha ugyanazt roleNameGuid
az értéket adja meg, mint egy paraméter a sablon minden üzembe helyezéséhez. Ha nincs roleNameGuid
megadva, a rendszer alapértelmezés szerint új GUID-t hoz létre minden egyes üzembe helyezéskor, és a későbbi üzembe helyezések hiba miatt Conflict: RoleAssignmentExists
meghiúsulnak.
A szerepkör-hozzárendelés hatóköre az üzembe helyezés szintjétől függ. Az alábbi példában a New-AzResourceGroupDeployment és az az deployment group create parancsokat talál az üzembe helyezés erőforráscsoport-hatókörben való elindításához.
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
Az alábbiakban a New-AzDeployment és az az deployment sub create parancsokat mutatjuk be az üzembe helyezés előfizetési hatókörben való elindításához és a hely megadásához.
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
Erőforrás hatóköre
Ha egy szerepkört az erőforrás szintjén kell hozzárendelnie, állítsa a scope
szerepkör-hozzárendelés tulajdonságát az erőforrás nevére.
A következő sablon a következőket mutatja be:
- Új tárfiók létrehozása
- Szerepkör hozzárendelése egy felhasználóhoz, csoporthoz vagy alkalmazáshoz a tárfiók hatókörében
- Tulajdonosi, közreműködői és olvasói szerepkörök megadása paraméterként
A sablon használatához a következő bemeneteket kell megadnia:
- Egy felhasználó, csoport, felügyelt identitás vagy alkalmazás azonosítója a szerepkör hozzárendeléséhez
{
"$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')]"
}
}
]
}
Az előző sablon üzembe helyezéséhez használja az erőforráscsoport parancsokat. Az alábbi példában a New-AzResourceGroupDeployment és az az deployment group create parancsokat talál az üzembe helyezés erőforrás-hatókörben való elindításához.
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
Az alábbiakban egy példa látható arra, hogy a sablon üzembe helyezése után a közreműködői szerepkör hozzárendelése egy felhasználóhoz egy tárfiókhoz.
Új szolgáltatásnév
Ha létrehoz egy új szolgáltatásnevet, és azonnal megpróbál szerepkört hozzárendelni az adott szolgáltatásnévhez, a szerepkör-hozzárendelés bizonyos esetekben meghiúsulhat. Ha például létrehoz egy új felügyelt identitást, majd megpróbál hozzárendelni egy szerepkört az adott szolgáltatásnévhez ugyanabban az Azure Resource Manager-sablonban, a szerepkör-hozzárendelés sikertelen lehet. Ennek a hibának az oka valószínűleg a replikáció késleltetése. A szolgáltatásnév egy régióban jön létre; Azonban előfordulhat, hogy a szerepkör-hozzárendelés egy másik régióban történik, amely még nem replikálta a szolgáltatásnevet.
Ennek a forgatókönyvnek a megoldásához állítsa be a principalType
tulajdonságot ServicePrincipal
a szerepkör-hozzárendelés létrehozásakor. A szerepkör-hozzárendelés apiVersion
tulajdonságát pedig a következőre vagy újabbra kell állítania: 2018-09-01-preview
. 2022-04-01
az első stabil verzió.
A következő sablon a következőket mutatja be:
- Új felügyelt identitásszolgáltatásnév létrehozása
- A
principalType
- Közreműködői szerepkör hozzárendelése az adott szolgáltatásnévhez egy erőforráscsoport hatókörében
A sablon használatához a következő bemeneteket kell megadnia:
- A felügyelt identitás alapneve, vagy használhatja az alapértelmezett sztringet
{
"$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"
}
}
]
}
Az alábbi példában a New-AzResourceGroupDeployment és az az deployment group create parancsokat talál az üzembe helyezés erőforráscsoport-hatókörben való elindításához.
New-AzResourceGroupDeployment -ResourceGroupName ExampleGroup2 -TemplateFile rbac-test.json
az deployment group create --resource-group ExampleGroup2 --template-file rbac-test.json
Az alábbiakban egy példa látható a közreműködői szerepkör hozzárendelésére egy új felügyelt identitásszolgáltatás-taghoz a sablon üzembe helyezése után.