我试图以编程方式将某个用户帐户的对象ID插入ARM模板,如下所示:
unittest
我尝试了许多不同的资源提供程序,以使其正常工作。例如:
"objectId": "[reference(resourceId('Microsoft.AAD/domainServices/user/read','domain','User.Name'),'2019-01-01').Id]",
和:
"objectId": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities/read','user@domain.onmicrosoft.com'),'2019-01-01').Id]",
我查找了用于获取用户列表的API调用,以查看这是否暗示了要使用的正确提供者(没有):
"objectId": "[reference(resourceId('Microsoft.Portal/usersettings/read','user@domain.onmicrosoft.com'),'2018-10-01').Id]"
我一直在浏览this list of provider operations,但是发现了两个问题:
1我看不到与我想要执行的操作相关的操作。
2它没有提供有关所需参数的信息。
所以我想我真的有两个问题:
答案 0 :(得分:1)
您无法在ARM模板中插入用户对象ID。
用户帐户由Azure AD租户管理,不是Azure资源,ARM模板用于订阅中的Azure资源。
参考:https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-overview
Azure资源管理器是Azure的部署和管理服务。它提供了一致的管理层,使您可以创建,更新和删除Azure订阅中的资源。
答案 1 :(得分:0)
如果您的VM具有相同的模板并启用了托管身份,则可以从以下代码尝试
{
"type": "Microsoft.KeyVault/vaults",
"properties": {
"tenantId": "[reference(concat('Microsoft.Compute/virtualMachines/', variables('vmName')), '2017-03-30', 'Full').identity.tenantId]",
"accessPolicies": [
{
"tenantId": "[reference(concat('Microsoft.Compute/virtualMachines/', variables('vmName')), '2017-03-30', 'Full').identity.tenantId]",
"objectId": "[reference(concat('Microsoft.Compute/virtualMachines/', variables('vmName')), '2017-03-30', 'Full').identity.principalId]",
"permissions": {
"keys": [
"all"
],
"secrets": [
"all"
]
}
}
]
答案 2 :(得分:0)
我发现实现此目标的最佳方法是将ID公开为参数,然后在调用ARM模板部署时,只需将参数传递到模板中即可。
如何将ID放入模板参数?好吧,我通过Azure DevOps CI / CD运行我的ARM部署,并使用管道任务AzureAppConfiguration.azure-app-configuration-task.custom-build-release-task.AzureAppConfiguration@1
从我自己的自定义配置设置中提取ID。
如何将ID放入Azure应用配置服务中?好吧,当我第一次播种环境时,会有一些初始设置,例如用户和组。然后,我只是运行一些脚本以将这种“元数据”提取到我的Azure应用配置服务中。
例如
APP_ID=$(az ad sp list --all --query "[?displayName=='name-of-spn'].appId" --output tsv)
az appconfig kv set --name name-of-app-config-store --key name-of-spn-app-id --value ${APP_ID}