ARM 模板:查找用户对象 ID
ARM Template: Looking up a user object Id
我正在尝试以编程方式将某个用户帐户的对象 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 它没有提供有关需要哪些参数的信息。
所以我想我真的有两个问题:
- 如何在ARM模板中动态查询用户的ObjectId?
- 我以后如何知道哪些查找函数可用以及哪些参数是必需的?
您无法在 ARM 模板中插入用户对象 ID。
用户帐户由您的Azure AD 租户管理,它不是Azure 资源,ARM 模板是针对您订阅中的Azure 资源。
参考:https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-overview
Azure Resource Manager is the deployment and management service for Azure. It provides a consistent management layer that enables you to create, update, and delete resources in your Azure subscription.
如果您在同一模板中有 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"
]
}
}
]
我发现实现此目的的最佳方法是将 ID 作为参数公开,然后在调用 ARM 模板部署时,只需将参数传递到模板中即可。
如何将 ID 放入模板参数中?嗯,我 运行 通过 Azure DevOps CI/CD 我的 ARM 部署,我使用管道任务 AzureAppConfiguration.azure-app-configuration-task.custom-build-release-task.AzureAppConfiguration@1
从我自己的自定义配置设置中提取 ID。
如何将 ID 获取到 Azure 应用程序配置服务中?好吧,当我第一次播种环境时,会有一些初始设置,例如用户和组。然后我 运行 一些脚本将这种 "metadata" 提取到我的 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}
我正在尝试以编程方式将某个用户帐户的对象 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 它没有提供有关需要哪些参数的信息。
所以我想我真的有两个问题:
- 如何在ARM模板中动态查询用户的ObjectId?
- 我以后如何知道哪些查找函数可用以及哪些参数是必需的?
您无法在 ARM 模板中插入用户对象 ID。
用户帐户由您的Azure AD 租户管理,它不是Azure 资源,ARM 模板是针对您订阅中的Azure 资源。
参考:https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-overview
Azure Resource Manager is the deployment and management service for Azure. It provides a consistent management layer that enables you to create, update, and delete resources in your Azure subscription.
如果您在同一模板中有 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"
]
}
}
]
我发现实现此目的的最佳方法是将 ID 作为参数公开,然后在调用 ARM 模板部署时,只需将参数传递到模板中即可。
如何将 ID 放入模板参数中?嗯,我 运行 通过 Azure DevOps CI/CD 我的 ARM 部署,我使用管道任务 AzureAppConfiguration.azure-app-configuration-task.custom-build-release-task.AzureAppConfiguration@1
从我自己的自定义配置设置中提取 ID。
如何将 ID 获取到 Azure 应用程序配置服务中?好吧,当我第一次播种环境时,会有一些初始设置,例如用户和组。然后我 运行 一些脚本将这种 "metadata" 提取到我的 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}