Ссылка на идентификатор управляемой службы в развертывании ARM-шаблона

При развертывании ресурса Microsoft.Web с новой функцией MSI после развертывания отображается GUID принципа для созданного пользователя. Снимок экрана ниже показывает структуру в ARM-шаблоне.

Каков наилучший способ получить этот GUID позже в конвейере, чтобы иметь возможность назначать права доступа в (например) хранилище озера данных?

Можно ли использовать какие-либо из существующих шаблонных функций ARM для этого?

3 ответа

Я просто боролся с этим сам. Решение, которое сработало для меня, было найдено в комментариях здесь.

По сути, вы создаете переменную для ресурса, который вы создаете с поддержкой MSI. Затем вы можете использовать переменную для извлечения конкретных значений tenantId и PrincipalId. Не идеально, но это работает. В моих примерах я настраиваю разрешения хранилища ключей для приложения-функции.

Чтобы создать переменную, используйте синтаксис ниже.

"variables": {
    "identity_resource_id": "[concat(resourceId('Microsoft.Web/sites', variables('appName')), '/providers/Microsoft.ManagedIdentity/Identities/default')]"
}

Чтобы получить фактические значения для tenantId и PrincipalId, обратитесь к ним со следующим синтаксисом:

{
    "tenantId": "[reference(variables('identity_resource_id'), '2015-08-31-PREVIEW').tenantId]",
    "objectId": "[reference(variables('identity_resource_id'), '2015-08-31-PREVIEW').principalId]"
}

Надеюсь, это поможет любому, кто столкнется с той же проблемой!

Вот несколько примеров шаблонов: https://github.com/rashidqureshi/MSI-Samples которые показывают a) как предоставить RBAC доступ к ресурсам ARM b) как создать политику доступа для keyvault с использованием OID MSI

Есть новый способ получить идентификационную информацию. Вы можете напрямую получить их из ресурса, который поддерживает управляемую идентификацию для ресурсов Azure ( в прошлом - управляемая идентификация службы ).

      {
  "tenantId": "[reference(resourceId('Microsoft.Web/sites', variables('serviceAppName')),'2019-08-01', 'full').identity.tenantId]",
  "objectId": "[reference(resourceId('Microsoft.Web/sites', variables('serviceAppName')),'2019-08-01', 'full').identity.principalId]",
}

Вы также можете получить идентификатор участника для ресурса в другой группе ресурсов или / или подписке. ResourceId поддерживает необязательные параметры:

        "tenantId": "[reference(resourceId(variables('resourceGroup'), 'Microsoft.Web/sites', variables('serviceAppName')),'2019-08-01', 'full').identity.tenantId]",

или

      "tenantId": "[reference(resourceId(variables('subscription'), variables('resourceGroup'), 'Microsoft.Web/sites', variables('serviceAppName')),'2019-08-01', 'full').identity.tenantId]",
Другие вопросы по тегам