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. A Azure PowerShell vagy az Azure CLI használata mellett azure Resource Manager-sablonokkal is hozzárendelhet szerepköröket. A sablonok akkor lehetnek hasznosak, ha folyamatosan és ismétlődően kell üzembe helyeznie az erőforrásokat. Ez a cikk a szerepkörök sablonok használatával történő hozzárendelését ismerteti.

Megjegyzés

A Bicep egy új nyelv az Azure-erőforrások meghatározásához. A JSON-hoz képest egyszerűbb szerzői felülettel rendelkezik, valamint más olyan 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-beli kódként használt infrastruktúra minden új felhasználója használjon 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 létrehozása a Bicep használatával című témakörben olvashat. Rövid útmutatót a Rövid útmutató: Azure-szerepkör hozzárendelése a Bicep használatával című témakörben talál.

Előfeltételek

Az Azure-szerepkörök hozzárendeléséhez a következőkre van szükség:

A következő verziókat kell használnia:

  • 2018-09-01-preview vagy újabb verziót egy Azure-szerepkör új szolgáltatásnévhez való hozzárendeléséhez
  • 2020-04-01-preview vagy később egy Azure-szerepkör erőforrás-hatókörben való hozzárendeléséhez
  • 2022-04-01 az első stabil verzió

További információ: Az Azure RBAC REST API-k API-verziói.

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, a Azure PowerShell vagy az Azure CLI használatával szerezheti be.

Felhasználó

Egy felhasználó azonosítójának lekéréséhez használhatja a Get-AzADUser vagy az az ad user show parancsot.

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

Group

Egy csoport azonosítójának lekéréséhez használhatja a Get-AzADGroup vagy az az ad group show parancsot.

$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 list parancsot . Szolgáltatásnév esetén ne az alkalmazásazonosítót , hanem az objektumazonosítót használja.

$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árendelhet 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 alapvető módját mutatja be. Egyes értékek a sablonban vannak megadva. A következő sablon a következőket mutatja be:

  • Olvasó szerepkör hozzárendelése 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
  • A helyére írja be <your-principal-id> egy felhasználó, csoport, felügyelt identitás vagy alkalmazás azonosítóját 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>"
            }
        }
    ]
}

Íme egy példa a New-AzResourceGroupDeployment és az az deployment group create parancsokra, 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.

Szerepkör-hozzárendelés az erőforráscsoport hatókörében

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áscsoport vagy előfizetés 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, amelyhez hozzárendeli a szerepkört
  • 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')]"
            }
        }
    ]
}

Megjegyzés

Ez a sablon csak akkor idempotens, ha ugyanazt roleNameGuid az értéket adja meg paraméterként a sablon minden egyes üzembe helyezéséhez. Ha nincs roleNameGuid megadva, alapértelmezés szerint minden üzemelő példányon új GUID jön létre, és a későbbi üzembe helyezések meghiúsulnak egy Conflict: RoleAssignmentExists hibával.

A szerepkör-hozzárendelés hatóköre az üzembe helyezés szintjétől függ. Íme egy példa a New-AzResourceGroupDeployment és az az deployment group create parancsokra az üzembe helyezés erőforráscsoport-hatókörben történő 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

Íme egy példa a New-AzDeployment és az az deployment sub create parancsokra, 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á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 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, amelyhez hozzárendeli a szerepkört
{
    "$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. Íme egy példa a New-AzResourceGroupDeployment és az az deployment group create parancsokra az üzembe helyezés erőforrás-hatókörben történő 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 közreműködői szerepkör hozzárendelése egy felhasználóhoz egy tárfiókhoz a sablon üzembe helyezése után.

Szerepkör-hozzárendelés az erőforrás hatókörében

Új szolgáltatásnév

Ha létrehoz egy új szolgáltatásnevet, és azonnal megpróbál hozzárendelni egy szerepkört 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 meghiúsulhat. 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; Előfordulhat azonban, 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.

A forgatókönyv megoldásához állítsa a principalType tulajdonságot értékre 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ás-rendszernév létrehozása
  • A principalType
  • Közreműködő szerepkör hozzárendelése az adott szolgáltatásnévhez erőforráscsoport-hatókörben

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"
            }
        }
    ]
}

Íme egy példa a New-AzResourceGroupDeployment és az az deployment group create parancsokra az üzembe helyezés erőforráscsoport-hatókörben történő 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ó arra, hogy a közreműködői szerepkör hozzárendelése egy új felügyelt identitásszolgáltatás-résztvevőhöz a sablon üzembe helyezése után történik.

Szerepkör-hozzárendelés egy új felügyelt identitásszolgáltatás-taghoz

Következő lépések