Я пытаюсь создать шаблон ARM с виртуальной машиной, я хочу, чтобы эта виртуальная машина имела назначение роли AcrPull для реестра контейнеров, который находится в другой группе ресурсов. Я устанавливаю свойство scope на идентификатор ACR (я получил это от https://resources.azure.com < / а>).

{
      "apiVersion": "2017-09-01",
      "type": "Microsoft.Authorization/roleAssignments",
      "name": "[guid(resourceGroup().id, 'stuff')]",
      "properties": {
        "roleDefinitionId": "[variables(parameters('builtInRoleType'))]",
        "principalId": "[reference(variables('vmResourceId'), '2017-12-01', 'Full').identity.principalId]",
        "scope": "[concat(/subscriptions/abc123-x123-4bef-84ec-1716390f231b/resourceGroups/someresroucegroupname/providers/Microsoft.ContainerRegistry/registries/someacrname"   
      },
      "dependsOn": [
        "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'))]"
      ]
    }

Я получаю сообщение об ошибке:

"The request to create role assignment '694829aa-cee5-4fe3-bf94-3ae372c14f26' is not valid. Role 
assignment scope '/subscriptions/abc123-x123-4bef-84ec-1716390f231b' must match the scope specified on
the URI '/subscriptions/abc123-x123-4bef-84ec-1716390f231b/resourcegroups/myresourcegroupname'.

Это вообще возможно?

3
matt_lethargic 16 Дек 2019 в 19:55

1 ответ

Вам нужно обернуть это вложенным вызовом шаблона следующим образом:

{
    "type": "Microsoft.Resources/deployments",
    "name": "nested-role-assignment",
    "apiVersion": "2017-05-10",
    "resourceGroup": "your_resource_group",
    "subscriptionId": "your_subscription_id",
    "dependsOn": [
        "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'))]"
    ],
    "properties": {
        "mode": "Incremental",
        "template": {
            "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
            "contentVersion": "1.0.0.0",
            "resources": [
                {
                    "apiVersion": "2017-09-01",
                    "type": "Microsoft.Authorization/roleAssignments",
                    "name": "[guid(resourceGroup().id, 'stuff')]",
                    "properties": {
                        "roleDefinitionId": "[variables(parameters('builtInRoleType'))]",
                        "principalId": "[reference(variables('vmResourceId'), '2017-12-01', 'Full').identity.principalId]",
                        "scope": "[concat(/subscriptions/abc123-x123-4bef-84ec-1716390f231b/resourceGroups/someresroucegroupname/providers/Microsoft.ContainerRegistry/registries/someacrname"
                    }
                }
            ]
        }
    }
}

Поэтому, эффективно, разверните это непосредственно в группе ресурсов, где находится ACR.

Пс. комбинация мое имя \ тип:

"type": "Microsoft.ContainerRegistry/registries/providers/roleAssignments",
"name": "[concat('ACR_NAME_GOES_HERE/Microsoft.Authorization/', guid(resourceGroup().id, 'acr'))]",
3
matt_lethargic 17 Дек 2019 в 13:35
По-прежнему получаю то же сообщение, я пробовал «your_resource_group» в качестве той, в которой развертываюсь, а также группу, в которой находится ACR.
 – 
matt_lethargic
17 Дек 2019 в 11:30
На самом деле, если я убираю область видимости, он назначает роль AcrPull группе ресурсов, где находится ACR. Кажется, я каким-то образом неправильно использую прицел
 – 
matt_lethargic
17 Дек 2019 в 11:34
Я думаю, что область видимости правильная, но тип \ имя неверны. проверить обновленный ответ
 – 
4c74356b41
17 Дек 2019 в 12:05
Это точно на месте. Спасибо
 – 
matt_lethargic
17 Дек 2019 в 13:36