Ссылка на идентификатор управляемой службы в развертывании 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]",