为Key Vault添加跨资源组object ID的多访问策略遇错误求助
问题排查与解决
错误原因
你遇到的“资源组中找不到应用”错误,核心问题是引用跨资源组的函数应用托管标识时,未指定目标资源组:
ARM模板里的reference函数默认会在当前部署的资源组(也就是Key Vault所在的资源组)中查找资源,而第二个函数应用属于另一资源组,直接用原路径查找自然找不到。
修复步骤
- 添加跨资源组参数:先在模板的
parameters节点里新增一个参数,用来存储另一个资源组的名称:
"parameters": { // 保留你已有的其他参数 "anotherResourceGroupName": { "type": "string", "metadata": { "description": "托管第二个函数应用的资源组名称" } } }
- 修正跨资源组引用路径:针对第二个访问策略里的
reference调用,改用resourceId函数指定目标资源组,再传递给reference。修改后的访问策略部分代码如下:
"accessPolicies": [ { // 同资源组的函数应用标识引用(无需修改) "tenantId": "[reference(concat('Microsoft.Web/sites/', variables('functionName'), '/providers/Microsoft.ManagedIdentity/Identities/default'), '2015-08-31-PREVIEW').tenantId]", "objectId": "[reference(concat('Microsoft.Web/sites/', variables('functionName'), '/providers/Microsoft.ManagedIdentity/Identities/default'), '2015-08-31-PREVIEW').principalId]", "permissions": { "secrets": ["get", "list"] } }, { // 跨资源组的函数应用标识引用(已修正) "tenantId": "[reference(resourceId(parameters('anotherResourceGroupName'), 'Microsoft.Web/sites', variables('functionNameAnotherRg')), '2015-08-31-PREVIEW').tenantId]", "objectId": "[reference(resourceId(parameters('anotherResourceGroupName'), 'Microsoft.Web/sites', variables('functionNameAnotherRg')), '2015-08-31-PREVIEW').principalId]", "permissions": { "secrets": ["get", "list"] } } ]
- 权限验证:确保执行模板部署的账号,拥有读取另一资源组中函数应用托管标识的权限(比如
Reader角色),否则会因为权限不足导致引用失败。
完整修复后的模板核心片段
"parameters": { "vaultName": { "type": "string", "metadata": { "description": "Key Vault名称" } }, "anotherResourceGroupName": { "type": "string", "metadata": { "description": "托管第二个函数应用的资源组名称" } } }, "variables": { "functionName": "你的同组函数应用名称", "functionNameAnotherRg": "你的跨组函数应用名称" }, "resources": [ { "type": "Microsoft.KeyVault/vaults", "apiVersion": "2021-11-01-preview", "name": "[parameters('vaultName')]", "location": "[resourcegroup().location]", "properties": { "sku": { "family": "A", "name": "standard" }, "tenantId": "[subscription().tenantId]", "accessPolicies": [ { "tenantId": "[reference(concat('Microsoft.Web/sites/', variables('functionName'), '/providers/Microsoft.ManagedIdentity/Identities/default'), '2015-08-31-PREVIEW').tenantId]", "objectId": "[reference(concat('Microsoft.Web/sites/', variables('functionName'), '/providers/Microsoft.ManagedIdentity/Identities/default'), '2015-08-31-PREVIEW').principalId]", "permissions": { "secrets": ["get", "list"] } }, { "tenantId": "[reference(resourceId(parameters('anotherResourceGroupName'), 'Microsoft.Web/sites', variables('functionNameAnotherRg')), '2015-08-31-PREVIEW').tenantId]", "objectId": "[reference(resourceId(parameters('anotherResourceGroupName'), 'Microsoft.Web/sites', variables('functionNameAnotherRg')), '2015-08-31-PREVIEW').principalId]", "permissions": { "secrets": ["get", "list"] } } ], "enabledForDeployment": false, "enabledForDiskEncryption": false, "enabledForTemplateDeployment": true, "enableSoftDelete": true, "softDeleteRetentionInDays": 90 } } ]
内容的提问来源于stack exchange,提问作者Sonam Mohite
相关产品推荐
相关产品推荐

