如何将托管标识对象 ID 传递到 Azure 蓝图中的 KeyVault 模板
How to pass Managed Identity Object ID to KeyVault template in Azure Blueprints
所以,我正在尝试使用 Blueprints
启动 Managed Identity
和 KeyVault
。我为每个人都有一个单独的工作模板。我的最终目标是在同一个蓝图中同时启动这两种资源以及更多资源。我遇到的问题是我需要在部署期间将我的托管标识的对象 ID 传递给 KeyVault 模板。我有蓝图设置来部署托管标识资源组,然后是托管标识,然后是 keyvault 组和 keyvault。
部署一直运行到 KV 资源组,然后在部署 keyvault 期间失败。有没有人知道如何做到这一点?
下面的 2 张图片显示了蓝图的布局以及需要对象 ID 的 keyvault 模板部分。
Azure 蓝图布局:
托管身份的访问策略所在的 KeyVault 模板:
错误图片:
点击查看部署详情后出现的错误图片:
根据您的描述和屏幕截图,您希望在创建 Keyvault 的同时将 UserAssigned Managed Identity 添加到您的 keyvault,并且 keyvault 和 Managed Identity 在不同的 资源组中.
如果是这样,accessPolicies
应该在下面,我这边没问题。
"accessPolicies": [
{
"tenantId": "[subscription().tenantId]",
"objectId": "[reference(ResourceId(parameters('managedIdentityRG'), 'Microsoft.ManagedIdentity/userAssignedIdentities', parameters('managedIdentityName')),'2018-11-30','Full').properties.principalId]",
"permissions": {
"keys": [],
"secrets": [
"Get"
],
"certificates": []
}
}
]
我的完整模板:
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"vaults_joykeyvault12_name": {
"type": "String"
},
"managedIdentityName": {
"type": "String"
},
"managedIdentityRG":{
"type": "String"
}
},
"variables": {},
"resources": [
{
"type": "Microsoft.KeyVault/vaults",
"apiVersion": "2016-10-01",
"name": "[parameters('vaults_joykeyvault12_name')]",
"location": "eastus",
"tags": {},
"properties": {
"sku": {
"family": "A",
"name": "Standard"
},
"tenantId": "[subscription().tenantId]",
"accessPolicies": [
{
"tenantId": "[subscription().tenantId]",
"objectId": "[reference(ResourceId(parameters('managedIdentityRG'), 'Microsoft.ManagedIdentity/userAssignedIdentities', parameters('managedIdentityName')),'2018-11-30','Full').properties.principalId]",
"permissions": {
"keys": [],
"secrets": [
"Get"
],
"certificates": []
}
}
],
"enabledForDeployment": false,
"enabledForDiskEncryption": false,
"enabledForTemplateDeployment": false,
"enableSoftDelete": true
}
}
]
}
所以,我正在尝试使用 Blueprints
启动 Managed Identity
和 KeyVault
。我为每个人都有一个单独的工作模板。我的最终目标是在同一个蓝图中同时启动这两种资源以及更多资源。我遇到的问题是我需要在部署期间将我的托管标识的对象 ID 传递给 KeyVault 模板。我有蓝图设置来部署托管标识资源组,然后是托管标识,然后是 keyvault 组和 keyvault。
部署一直运行到 KV 资源组,然后在部署 keyvault 期间失败。有没有人知道如何做到这一点?
下面的 2 张图片显示了蓝图的布局以及需要对象 ID 的 keyvault 模板部分。
Azure 蓝图布局:
托管身份的访问策略所在的 KeyVault 模板:
错误图片:
点击查看部署详情后出现的错误图片:
根据您的描述和屏幕截图,您希望在创建 Keyvault 的同时将 UserAssigned Managed Identity 添加到您的 keyvault,并且 keyvault 和 Managed Identity 在不同的 资源组中.
如果是这样,accessPolicies
应该在下面,我这边没问题。
"accessPolicies": [
{
"tenantId": "[subscription().tenantId]",
"objectId": "[reference(ResourceId(parameters('managedIdentityRG'), 'Microsoft.ManagedIdentity/userAssignedIdentities', parameters('managedIdentityName')),'2018-11-30','Full').properties.principalId]",
"permissions": {
"keys": [],
"secrets": [
"Get"
],
"certificates": []
}
}
]
我的完整模板:
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"vaults_joykeyvault12_name": {
"type": "String"
},
"managedIdentityName": {
"type": "String"
},
"managedIdentityRG":{
"type": "String"
}
},
"variables": {},
"resources": [
{
"type": "Microsoft.KeyVault/vaults",
"apiVersion": "2016-10-01",
"name": "[parameters('vaults_joykeyvault12_name')]",
"location": "eastus",
"tags": {},
"properties": {
"sku": {
"family": "A",
"name": "Standard"
},
"tenantId": "[subscription().tenantId]",
"accessPolicies": [
{
"tenantId": "[subscription().tenantId]",
"objectId": "[reference(ResourceId(parameters('managedIdentityRG'), 'Microsoft.ManagedIdentity/userAssignedIdentities', parameters('managedIdentityName')),'2018-11-30','Full').properties.principalId]",
"permissions": {
"keys": [],
"secrets": [
"Get"
],
"certificates": []
}
}
],
"enabledForDeployment": false,
"enabledForDiskEncryption": false,
"enabledForTemplateDeployment": false,
"enableSoftDelete": true
}
}
]
}