【问题标题】:ARM Template: Looking up a user object IdARM 模板:查找用户对象 ID
【发布时间】:2019-06-04 09:13:37
【问题描述】:

我正在尝试以编程方式将某个用户帐户的对象 ID 插入 ARM 模板,如下所示:

"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]",

和:

"objectId": "[reference(resourceId('Microsoft.Portal/usersettings/read','user@domain.onmicrosoft.com'),'2018-10-01').Id]"

我查看了用于获取用户列表的 API 调用,看看它是否会提示使用正确的提供者(它没有):

GET https://graph.windows.net/{TenantId}/users?api-version=1.6 HTTP/1.1

我一直在查看this list of provider operations,但发现了两个问题:

1 我看不到与我想做的事情相关的操作。

2 它没有提供有关需要哪些参数的信息。

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

  1. 如何在 ARM 模板中动态查找用户的 ObjectId?
  2. 我以后如何知道哪些查找函数可用以及需要哪些参数?

【问题讨论】:

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


    【解决方案1】:

    您无法在 ARM 模板中插入用户对象 ID。

    用户帐户由您的 Azure AD 租户管理,它不是 azure 资源,ARM 模板适用于您订阅中的 azure 资源。

    参考:https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-overview

    Azure 资源管理器是 Azure 的部署和管理服务。它提供了一致的管理层,使你能够在 Azure 订阅中创建、更新和删除资源。

    【讨论】:

    • 谢谢。这是一种耻辱,我希望至少会有某种方式。例如,在 Terraform 中,我可以使用 local-exec 执行 PowerShell 查找对象 ID。有没有办法使用 ARM 模板来做到这一点?
    • @DickyMoore ARM 模板与 Terraform 不同,正如我所说,它不适用于 AAD 用户、服务主体等。
    • @DickyMoore 看到这个similar issue,虽然是两年前,但现在还是一样。
    【解决方案2】:

    我发现实现这一点的最佳方法是将 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}

    【讨论】:

      【解决方案3】:

      如果您在同一模板中有虚拟机并启用托管标识,您可以从下面的代码中尝试

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-11-27
        • 1970-01-01
        • 2022-11-23
        • 2016-12-03
        • 1970-01-01
        • 2014-03-09
        • 1970-01-01
        相关资源
        最近更新 更多