ARM模板:查找用户对象ID

时间:2019-06-04 09:13:37

标签: azure azure-active-directory azure-resource-manager arm-template

我试图以编程方式将某个用户帐户的对象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它没有提供有关所需参数的信息。

所以我想我真的有两个问题:

  1. 如何在ARM模板中动态查找用户的ObjectId?
  2. 将来如何查找可用的查找功能和所需的参数?

3 个答案:

答案 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具有相同的模板并启用了托管身份,则可以从以下代码尝试

https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-template-functions-resource#remarks-1

{
  "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}