Vytvoření nebo aktualizace vlastních rolí Azure pomocí šablony ARM

Pokud předdefinované role Azure nevyhovují konkrétním potřebám vaší organizace, můžete vytvořit vlastní role. Tento článek popisuje, jak vytvořit nebo aktualizovat vlastní roli pomocí šablony Azure Resource Manageru (šablona ARM).

Šablona Azure Resource Manageru je soubor JSON (JavaScript Object Notation), který definuje infrastrukturu a konfiguraci projektu. Tato šablona používá deklarativní syntaxi. Popíšete zamýšlené nasazení, aniž byste museli psát posloupnost programovacích příkazů pro vytvoření nasazení.

Pokud chcete vytvořit vlastní roli, zadáte název role, oprávnění a místo, kde se dá role použít. V tomto článku vytvoříte roli s názvem Vlastní role – čtenář RG s oprávněními k prostředkům, která je možné přiřadit v oboru předplatného nebo nižším.

Pokud vaše prostředí splňuje požadavky a jste obeznámeni s používáním šablon ARM, vyberte tlačítko Nasazení do Azure. Šablona se otevře v prostředí Azure Portal.

Button to deploy the Resource Manager template to Azure.

Požadavky

Pokud chcete vytvořit vlastní roli, musíte mít:

Musíte použít následující verzi:

  • 2018-07-01 nebo novější

Další informace najdete v tématu Verze rozhraní API azure RBAC REST API.

Kontrola šablony

Šablona použitá v tomto článku pochází ze šablon Rychlého startu Azure. Šablona má čtyři parametry a oddíl prostředků. Čtyři parametry jsou:

  • Pole akcí s výchozí hodnotou ["Microsoft.Resources/subscriptions/resourceGroups/read"].
  • notActions Pole s prázdnou výchozí hodnotou
  • Název role s výchozí hodnotou Custom Role - RG Reader.
  • Popis role s výchozí hodnotou Subscription Level Deployment of a Role Definition.

Obor, ve kterém je možné přiřadit tuto vlastní roli, je nastaven na aktuální předplatné.

{
  "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.25.53.49325",
      "templateHash": "16704138909949665309"
    }
  },
  "parameters": {
    "actions": {
      "type": "array",
      "defaultValue": [
        "Microsoft.Resources/subscriptions/resourceGroups/read"
      ],
      "metadata": {
        "description": "Array of actions for the roleDefinition"
      }
    },
    "notActions": {
      "type": "array",
      "defaultValue": [],
      "metadata": {
        "description": "Array of notActions for the roleDefinition"
      }
    },
    "roleName": {
      "type": "string",
      "defaultValue": "Custom Role - RG Reader",
      "metadata": {
        "description": "Friendly name of the role definition"
      }
    },
    "roleDescription": {
      "type": "string",
      "defaultValue": "Subscription Level Deployment of a Role Definition",
      "metadata": {
        "description": "Detailed description of the role definition"
      }
    }
  },
  "variables": {
    "roleDefName": "[guid(parameters('roleName'))]"
  },
  "resources": [
    {
      "type": "Microsoft.Authorization/roleDefinitions",
      "apiVersion": "2022-04-01",
      "name": "[variables('roleDefName')]",
      "properties": {
        "roleName": "[parameters('roleName')]",
        "description": "[parameters('roleDescription')]",
        "type": "customRole",
        "permissions": [
          {
            "actions": "[parameters('actions')]",
            "notActions": "[parameters('notActions')]"
          }
        ],
        "assignableScopes": [
          "[subscription().id]"
        ]
      }
    }
  ]
}

Prostředek definovaný v šabloně je:

Nasazení šablony

Pokud chcete nasadit předchozí šablonu, postupujte podle těchto kroků.

  1. Přihlaste se k portálu Azure.

  2. Otevřete Azure Cloud Shell pro PowerShell.

  3. Zkopírujte a vložte následující skript do Cloud Shellu.

    $location = Read-Host -Prompt "Enter a location (i.e. centralus)"
    [string[]]$actions = Read-Host -Prompt "Enter actions as a comma-separated list (i.e. action1,action2)"
    $actions = $actions.Split(',')
    $templateUri = "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/subscription-deployments/create-role-def/azuredeploy.json"
    New-AzDeployment -Location $location -TemplateUri $templateUri -actions $actions
    
  4. Zadejte umístění pro nasazení, například centralus.

  5. Zadejte seznam akcí pro vlastní roli jako seznam oddělený čárkami, například Microsoft.Resources/resources/read,Microsoft.Resources/subscriptions/resourceGroups/read.

  6. V případě potřeby spusťte příkaz stisknutím klávesy New-AzDeployment Enter.

    Příkaz New-AzDeployment nasadí šablonu pro vytvoření vlastní role.

    Zobrazený výstup by měl vypadat přibližně takto:

    PS> New-AzDeployment -Location $location -TemplateUri $templateUri -actions $actions
    
    Id                      : /subscriptions/{subscriptionId}/providers/Microsoft.Resources/deployments/azuredeploy
    DeploymentName          : azuredeploy
    Location                : centralus
    ProvisioningState       : Succeeded
    Timestamp               : 6/25/2020 8:08:32 PM
    Mode                    : Incremental
    TemplateLink            :
                              Uri            : https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/subscription-deployments/create-role-def/azuredeploy.json
                              ContentVersion : 1.0.0.0
    
    Parameters              :
                              Name               Type                       Value
                              =================  =========================  ==========
                              actions            Array                      [
                                "Microsoft.Resources/resources/read",
                                "Microsoft.Resources/subscriptions/resourceGroups/read"
                              ]
                              notActions         Array                      []
                              roleName           String                     Custom Role - RG Reader
                              roleDescription    String                     Subscription Level Deployment of a Role Definition
    
    Outputs                 :
    DeploymentDebugLogLevel :
    

Kontrola nasazených prostředků

Podle těchto kroků ověřte, že byla vytvořena vlastní role.

  1. Spuštěním příkazu Get-AzRoleDefinition zobrazte seznam vlastní role.

    Get-AzRoleDefinition "Custom Role - RG Reader" | ConvertTo-Json
    

    Zobrazený výstup by měl vypadat přibližně takto:

    {
      "Name": "Custom Role - RG Reader",
      "Id": "11111111-1111-1111-1111-111111111111",
      "IsCustom": true,
      "Description": "Subscription Level Deployment of a Role Definition",
      "Actions": [
        "Microsoft.Resources/resources/read",
        "Microsoft.Resources/subscriptions/resourceGroups/read"
      ],
      "NotActions": [],
      "DataActions": [],
      "NotDataActions": [],
      "AssignableScopes": [
        "/subscriptions/{subscriptionId}"
      ]
    }
    
  2. Na webu Azure Portal otevřete své předplatné.

  3. V nabídce vlevo vyberte Řízení přístupu (IAM).

  4. Vyberte kartu Role.

  5. Nastavte seznam Typů na CustomRole.

  6. Ověřte, že je uvedená vlastní role – čtenář RG.

    New custom role in Azure portal

Aktualizace vlastní role

Podobně jako při vytváření vlastní role můžete aktualizovat existující vlastní roli pomocí šablony. Pokud chcete aktualizovat vlastní roli, musíte zadat roli, kterou chcete aktualizovat.

Tady jsou změny, které byste museli provést v předchozí šabloně Rychlého startu, aby se aktualizovala vlastní role.

  • Zahrňte ID role jako parametr.

        ...
        "roleDefName": {
          "type": "string",
          "metadata": {
            "description": "ID of the role definition"
          }
        ...
    
  • Do definice role zahrňte parametr ID role.

      ...
      "resources": [
        {
          "type": "Microsoft.Authorization/roleDefinitions",
          "apiVersion": "2022-04-01",
          "name": "[parameters('roleDefName')]",
          "properties": {
            ...
    

Tady je příklad nasazení šablony.

$location = Read-Host -Prompt "Enter a location (i.e. centralus)"
[string[]]$actions = Read-Host -Prompt "Enter actions as a comma-separated list (i.e. action1,action2)"
$actions = $actions.Split(',')
$roleDefName = Read-Host -Prompt "Enter the role ID to update"
$templateFile = "rg-reader-update.json"
New-AzDeployment -Location $location -TemplateFile $templateFile -actions $actions -roleDefName $roleDefName

Vyčištění prostředků

Pokud chcete vlastní roli odebrat, postupujte takto.

  1. Spuštěním následujícího příkazu odeberte vlastní roli.

    Get-AzRoleDefinition -Name "Custom Role - RG Reader" | Remove-AzRoleDefinition
    
  2. Zadáním Y potvrďte, že chcete odebrat vlastní roli.

Další kroky