You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

非Azure虚拟机上的Java应用能否使用托管身份认证访问Azure Key Vault?

关于Azure Key Vault托管身份认证的疑问解答

你的理解有部分正确,但也有可以补充的细节,我来帮你梳理清楚:

核心场景区分

  • Azure环境内部:托管身份确实是最优解——不管是VM、App Service、Azure Functions这类资源,都能直接启用系统分配或用户分配的托管身份,不需要手动维护密钥,用DefaultAzureCredential就能自动获取凭证,代码极简还安全。
  • Azure环境外部:默认情况下,托管身份没法直接使用,这时候你提到的ClientSecretCredential(传入clientId、tenantId和客户端密钥)是标准的、最常用的认证方案,完全能满足需求。

特殊情况:Azure外也能"模拟"托管身份

如果你的场景有统一身份管理的需求,其实可以通过Azure Arc把本地/第三方服务器纳入Azure的管理体系,之后就能给这些服务器分配托管身份,实现和Azure内部资源一样的认证体验。不过这个方案需要部署Arc代理,配置成本不低,一般只有企业级的统一管理场景才会考虑,中小项目直接用ClientSecretCredential更高效。

代码示例参考

非Azure环境用ClientSecretCredential

// 初始化服务主体凭证
ClientSecretCredential credential = new ClientSecretCredentialBuilder()
    .clientId("你的客户端ID")
    .clientSecret("你的客户端密钥")
    .tenantId("你的租户ID")
    .build();

// 构建Key Vault Secret客户端
SecretClient secretClient = new SecretClientBuilder()
    .vaultUrl("https://你的密钥保管库名称.vault.azure.net/")
    .credential(credential)
    .build();

Azure环境内用托管身份(DefaultAzureCredential自动适配)

// DefaultAzureCredential会自动识别环境中的托管身份
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder().build();

SecretClient secretClient = new SecretClientBuilder()
    .vaultUrl("https://你的密钥保管库名称.vault.azure.net/")
    .credential(credential)
    .build();

内容的提问来源于stack exchange,提问作者Manuel Espinosa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 21:27:36