跨租户配置Azure App Service Managed Identity访问Key Vault
跨租户Managed Identity访问Key Vault的配置方案
明确说明:支持跨租户使用托管身份访问Key Vault,但你之前添加外部用户的方式并不适用——Azure门户的身份搜索默认仅展示当前租户对象,无法直接检索到跨租户的托管身份,正确做法是通过命令行或ARM模板直接指定身份的核心ID来配置访问策略。
具体配置步骤如下:
1. 获取Tenant A中App Service托管身份的核心标识
登录Tenant A的Azure环境,获取目标App Service系统分配托管身份的对象ID(principalId)或客户端ID(clientId):
- 使用Azure CLI执行:
az webapp identity show --name <你的App Service名称> --resource-group <所属资源组名称> - 从输出结果中提取并保存
principalId和clientId,后续配置会用到前者。
2. 在Tenant B的Key Vault中配置跨租户访问策略
由于门户UI无法直接选中跨租户身份,需通过命令行工具完成配置:
方式一:Azure CLI(切换到Tenant B环境)
替换占位符后执行命令,按需调整密钥权限:
az keyvault set-policy --name <Tenant B的Key Vault名称> --resource-group <Tenant B的资源组名称> --object-id <Tenant A托管身份的对象ID> --key-permissions get list
权限参数可根据实际需求添加,比如decrypt、sign等。
方式二:PowerShell(切换到Tenant B环境)
Set-AzKeyVaultAccessPolicy -VaultName "<Tenant B的Key Vault名称>" -ResourceGroupName "<Tenant B的资源组名称>" -ObjectId "<Tenant A托管身份的对象ID>" -PermissionsToKeys Get,List
3. 验证跨租户访问有效性
在Tenant A的App Service中编写测试代码,验证是否能正常访问Tenant B的Key Vault:
- 示例.NET代码片段:
var client = new SecretClient(new Uri("https://<Tenant B的Key Vault名称>.vault.azure.net/"), new DefaultAzureCredential()); var secret = await client.GetSecretAsync("<目标密钥名称>"); - 确保App Service已启用托管身份,代码中使用的
DefaultAzureCredential会自动调用托管身份完成认证,无需额外配置密钥。
关键注意事项
- 无需将托管身份添加为Tenant B的外部用户,该操作对托管身份的跨租户访问无意义,反而会导致搜索异常。
- 若Tenant B的Key Vault启用了防火墙/虚拟网络规则,需允许Tenant A的App Service访问:可添加App Service的出站IP段,或开启"信任服务访问"选项(针对App Service)。
- 确认两个租户的Azure AD无跨租户请求拦截策略,避免身份认证失败。
内容的提问来源于stack exchange,提问作者SAGAR SATAPATHY
相关产品推荐
相关产品推荐

