azure ARM模板:查找用户对象ID

n3h0vuf2  于 2022-11-17  发布在  其他
关注(0)|答案(4)|浏览(139)

我尝试以编程方式将某个用户帐户的对象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?
1.我如何在将来确定哪些查找函数可用以及哪些参数是必需的?

iugsix8n

iugsix8n1#

您无法在ARM模板中插入用户对象ID。
用户帐户由Azure AD租户管理,它不是Azure资源,ARM模板用于订阅中的Azure资源。
参考:https://learn.microsoft.com/en-us/azure/azure-resource-manager/resource-group-overview
Azure Resource Manager是Azure的部署和管理服务。它提供一致的管理层,使你能够创建、更新和删除Azure订阅中的资源。

kyvafyod

kyvafyod2#

如果您在同一模板中有虚拟机并启用了托管标识,则可以从以下代码尝试
https://learn.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"
          ]
        }
      }
    ]
djmepvbi

djmepvbi3#

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

lsmepo6l

lsmepo6l4#

我想我有办法了。
我试图引用由ARM模板生成的托管用户身份中的客户端ID。
我已将受管身份的名称声明为参数,以便作为SQL Server的管理员使用:

[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities',parameters('managed-identity')), '2018-11-30', 'full').properties.clientId]

一旦你切换了我们的参数,你就应该准备好了。

相关问题