Назначение роли управляемого приложения Azure

#azure #azure-rbac #azure-managed-app

Вопрос:

Мне нужно предоставить Reader доступ к моему Управляемому приложению за пределами группы ресурсов приложений. Пользователь, развертывающий приложение, находится Owner в подписке, поэтому развертывание должно пройти, но в настоящее время оно завершается неудачно, поскольку развертывание ресурсов происходит под удостоверением Appliance Resource Provider вместо пользователя. Существует ли способ создания назначений ролей для управляемых приложений?

Фрагмент mainTemplate.json (создание MSI вложенный шаблон-попытка создать назначение роли в области подписки):

 {
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {...},
  "variables": {...},
  "resources": [
    {
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities",
      "name": "[parameters('applicationName')]",
      "apiVersion": "2018-11-30",
      "location": "[parameters('location')]"
    },
...
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2019-10-01",
      "name": "[variables('name')]",
      "subscriptionId": "[subscription().subscriptionId]",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('applicationName'))]"
      ],
      "properties": {
        "mode": "Incremental",
        "expressionEvaluationOptions": {
          "scope": "inner"
        },
        "parameters": {
          "principalId": {
            "value": "[reference(resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('applicationName'))).principalId]"
          }
        },
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "parameters": {
            "principalId": {
              "type": "string"
            }
          },
          "variables": {},
          "resources": [
            // Role: Reader
            {
              "type": "Microsoft.Authorization/roleAssignments",
              "apiVersion": "2018-09-01-preview",
              "name": "[guid(parameters('principalId'), 'Subscription-Reader')]",
              "properties": {
                "principalId": "[parameters('principalId')]",
                "roleDefinitionId": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7')]"
              }
            }
          ]
        }
      }
    }
  ],
}
 

Ошибка развертывания управляемого приложения:

 {
    "status": "Failed",
    "error": {
        "code": "ApplianceDeploymentFailed",
        "message": "The operation to create appliance failed. Please check operations of deployment 'xxx' under resource group '/subscriptions/xxx/resourceGroups/mrg-xxx-20210727122758'. Error message: 'At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/DeployOperations for usage details.'",
        "details": [
            {
                "code": "BadRequest",
                "message": "{rn  "error": {rn    "code": "InvalidTemplateDeployment",rn    "message": "The template deployment failed with error: 'Authorization failed for template resource 'f8bc290b-5a10-5da9-a7c4-d2bd5b80cc2d' of type 'Microsoft.Authorization/roleAssignments'. The client '8b967430-badb-45ba-8d11-bca192994047' with object id '8b967430-badb-45ba-8d11-bca192994047' does not have permission to perform action 'Microsoft.Authorization/roleAssignments/write' at scope '/subscriptions/xxx/providers/Microsoft.Authorization/roleAssignments/f8bc290b-5a10-5da9-a7c4-d2bd5b80cc2d'.'."rn  }rn}"
            }
        ]
    }
}
 

Комментарии:

1. Как вы развертываете этот шаблон ? через конвейер devops ?

2. Управляемое приложение развертывается через портал Azure в центре управляемых приложений. За кулисами ARM запускает какой-то фоновый процесс, который развертывает этот шаблон ARM.

Ответ №1:

Принципал ресурсов устройства-это принципал ресурсов, который выполняет развертывание для управляемого приложения. Он имеет разрешения владельца только для группы управляемых ресурсов и не имеет никаких других разрешений за пределами группы ресурсов для клиента customers.

Для реализации этого сценария клиенту необходимо сначала предоставить доступ к управляемому приложению для выполнения этих назначений ролей. Они могут сделать это, добавив msi в управляемое приложение и предоставив этому msi разрешения за пределами группы управляемых ресурсов. Когда принципал ресурсов устройства выполняет развертывание, он будет включать все разрешения, которые msi в управляемом приложении имеет во время развертывания.

Пожалуйста, смотрите здесь подробную информацию о том, как msi может быть включен во время развертывания управляемого приложения : https://docs.microsoft.com/en-us/azure/azure-resource-manager/managed-applications/publish-managed-identity#linking-existing-azure-resources