Azure-szerepkörök hozzárendelése Azure Resource Manager sablonokkal

Az Azure szerepköralapú hozzáférés-vezérlés (Azure RBAC) az Azure-erőforrásokhoz való hozzáférés kezelésére 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. A Azure PowerShell vagy az Azure CLI használata mellett szerepköröket is hozzárendelhet az Azure Resource Manager használatával. A sablonok akkor lehetnek hasznosak, ha rendszeresen és ismételten üzembe kell helyeznie az erőforrásokat. Ez a cikk a szerepkörök sablonok használatával való hozzárendelését ismerteti.

Előfeltételek

Az Azure-szerepkörök hozzárendelése a következővel rendelkezik:

  • Microsoft.Authorization/roleAssignments/writeengedélyek, például felhasználói hozzáférés rendszergazdájaMicrosoft.Authorization/roleAssignments/write tulajdonosa

Objektum-idok lekért

Szerepkör hozzárendelése esetén meg kell adnia annak a felhasználónak, csoportnak vagy alkalmazásnak az azonosítóját, akihez hozzá szeretné rendelni a szerepkört. Az azonosító formátuma a következő: 11111111-1111-1111-1111-111111111111 . Az azonosítót a következő használatával kaphatja meg: Azure Portal, Azure PowerShell Azure CLI.

Felhasználó

Egy felhasználó azonosítójának lekért azonosítóját a Get-AzADUser vagy az az ad user show paranccsal kaphatja meg.

$objectid = (Get-AzADUser -DisplayName "{name}").id
objectid=$(az ad user show --id "{email}" --query objectId --output tsv)

Group

Egy csoport azonosítójának lekért azonosítóját a Get-AzADGroup vagy az az ad group show paranccsal kaphatja meg.

$objectid = (Get-AzADGroup -DisplayName "{name}").id
objectid=$(az ad group show --group "{name}" --query objectId --output tsv)

Felügyelt identitások

Egy felügyelt identitás azonosítójának lekért azonosítóját a Get-AzAdServiceprincipal vagy az az ad sp paranccsal kaphatja meg.

$objectid = (Get-AzADServicePrincipal -DisplayName <Azure resource name>).id
objectid=$(az ad sp list --display-name <Azure resource name> --query [].objectId --output tsv)

Alkalmazás

A szolgáltatásnév (egy alkalmazás által használt identitás) azonosítóját a Get-AzADServicePrincipal vagy az az ad sp list paranccsal kaphatja meg. Szolgáltatásnév esetén az objektumazonosítót használja, ne az alkalmazásazonosítót.

$objectid = (Get-AzADServicePrincipal -DisplayName "{name}").id
objectid=$(az ad sp list --display-name "{name}" --query [].objectId --output tsv)

Azure-szerepkör hozzárendelése

Az Azure RBAC-ban a hozzáférés megadásához hozzá kell rendelnie egy szerepkört.

Erőforráscsoport hatóköre (paraméterek nélkül)

Az alábbi sablon a szerepkörök hozzárendelésének alapvető módját mutatja be. Egyes értékek a sablonban vannak megadva. Az alábbi sablon a következőket mutatja be:

  • Olvasó szerepkör hozzárendelése felhasználóhoz, csoporthoz vagy alkalmazáshoz egy erőforráscsoporti hatókörben

A sablont a következő lépésekben használhatja:

  • Új JSON-fájl létrehozása és a sablon másolása
  • Cserélje le a helyére egy felhasználó, csoport, felügyelt identitás vagy alkalmazás azonosítóját, amelyhez <your-principal-id> hozzárendeli a szerepkört
{
    "$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>"
            }
        }
    ]
}

Íme a New-AzResourceGroupDeployment és az az deployment group create parancs, 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éldát mutatunk be az Olvasó szerepkör-hozzárendelésre egy erőforráscsoport felhasználója számára a sablon üzembe helyezése után.

Role assignment at resource group scope

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ó. Az alábbi sablon a következőket mutatja be:

  • Szerepkör hozzárendelése felhasználóhoz, csoporthoz vagy alkalmazáshoz egy erőforráscsoport vagy előfizetés hatókörében
  • A Tulajdonos, Közreműködő és Olvasó szerepkörök megadása paraméterként

A sablon használatának a következő bemeneteket kell megadnia:

  • Annak a felhasználónak, csoportnak, felügyelt identitásnak vagy alkalmazásnak az azonosítója, akihez a szerepkört hozzá kell rendelni
  • 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": "2018-09-01-preview",
            "name": "[parameters('roleNameGuid')]",
            "properties": {
                "roleDefinitionId": "[variables(parameters('builtInRoleType'))]",
                "principalId": "[parameters('principalId')]"
            }
        }
    ]
}

Megjegyzés

Ez a sablon nem idempotent, hacsak nem ugyanazt az értéket biztosítja paraméterként a sablon roleNameGuid minden egyes üzembe helyezéséhez. Ha nem ad meg értéket, a rendszer alapértelmezés szerint új GUID-azonosítót hoz létre minden üzemelő példányon, és a további üzembe helyezések roleNameGuid hibával Conflict: RoleAssignmentExists meghiúsulnak.

A szerepkör-hozzárendelés hatókörét a központi telepítés szintjétől kell meghatározni. Íme a New-AzResourceGroupDeployment és az az deployment group create parancs, amelyek segítségével elindíthatja az üzembe helyezést egy erőforráscsoport hatókörében.

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

Íme egy New-AzDeployment és az az deployment sub create parancs, amelyek segítségével elindíthatja az üzembe helyezést egy előfizetési hatókörben, és megadhatja a helyet.

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 egy erőforrás szintjén kell hozzárendelni, állítsa a szerepkör-hozzárendelés tulajdonságát az erőforrás scope nevére.

Az alábbi sablon a következőket mutatja be:

  • Új tárfiók létrehozása
  • Szerepkör hozzárendelése felhasználóhoz, csoporthoz vagy alkalmazáshoz a tárfiók hatókörében
  • A Tulajdonos, Közreműködő és Olvasó szerepkörök megadása paraméterként

A sablon használatának a következő bemeneteket kell megadnia:

  • Annak a felhasználónak, csoportnak, felügyelt identitásnak vagy alkalmazásnak az azonosítója, akihez a szerepkört hozzá kell rendelni
{
    "$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": "2020-04-01-preview",
            "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. Íme a New-AzResourceGroupDeployment és az az deployment group create parancs, amelyek segítségével elindíthatja az üzembe helyezést egy erőforrás-hatókörben.

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éldát mutatunk be a közreműködői szerepkör-hozzárendelésre egy tárfiók felhasználója számára a sablon üzembe helyezése után.

Role assignment at resource scope

Új szolgáltatásnév

Ha létrehoz egy új szolgáltatásnévt, és azonnal megpróbál hozzárendelni egy szerepkört a 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 a szolgáltatásnévhez ugyanabban a Azure Resource Manager-sablonban, előfordulhat, hogy a szerepkör-hozzárendelés sikertelen lesz. A hiba oka valószínűleg a replikáció késése. A szolgáltatásnév egy régióban jön létre; A szerepkör-hozzárendelés azonban egy másik régióban is előfordulhat, amely még nem replikálta a szolgáltatásnévvel.

A forgatókönyv megoldásához a tulajdonságot a következőre kell principalTypeServicePrincipal beállítania a szerepkör-hozzárendelés létrehozásakor: . A szerepkör-hozzárendeléshez a vagy apiVersion újabb szerepkört 2018-09-01-preview is be kell állítania.

Az alábbi sablon a következőket mutatja be:

  • Új felügyelt identitás szolgáltatásnév létrehozása
  • A következő megadása: principalType
  • Közreműködői szerepkör hozzárendelése a szolgáltatásnévhez egy erőforráscsoporti hatókörben

A sablon használatának 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": "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]",
                "principalType": "ServicePrincipal"
            }
        }
    ]
}

Íme a New-AzResourceGroupDeployment és az az deployment group create parancs, amelyek segítségével elindíthatja az üzembe helyezést egy erőforráscsoport hatókörében.

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éldát mutatunk be a közreműködői szerepkör-hozzárendelésre egy új felügyelt identitás szolgáltatásnévhez a sablon üzembe helyezése után.

Role assignment for a new managed identity service principal

Következő lépések