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

Azure虚拟机应用从Key Vault获取密钥的配置与测试问询

核心问题

我参考了微软官方教程,其中提到“为虚拟机创建系统分配标识”。我的问题是:仅为Azure虚拟机启用系统分配托管标识,就能让虚拟机IIS中托管的应用从Key Vault获取密钥/机密等凭证以正常运行吗?是否还需额外配置?若需要,具体有哪些?
注:虚拟机与Key Vault位于同一Azure资源组。

补充说明

我计划按以下步骤操作:

  • Step1: 为目标虚拟机启用托管身份
  • Step2: 在Key Vault的访问策略中添加虚拟机的托管身份,赋予其访问权限
  • Step3: 需从虚拟机执行哪些确切的PowerShell命令进行测试?
  • Step4: 我认为执行PowerShell命令后,可调用REST方法并替换Key Vault URI和机密名称
  • Step5: 随后在应用中使用相同的REST API

如何准确完成这些步骤?

备注

我在网上看到有人使用以下命令,但不确定其中的IP地址(使用HTTP,我认为不安全)是否合规?这是微软官方推荐的命令吗?我在微软教程中未找到相关细节,是否有其他微软教程可获取确切信息?

$Response = Invoke-RestMethod -uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3F%2A%2Fvault.azure.net' -Method GET -Headers @{Metadata="true"}

$KeyVaultToken = $Response.access_token

问题解答

仅启用系统分配托管标识不足以让应用从Key Vault获取机密,必须完成额外配置,具体如下:

1. 必需的额外配置

  • Key Vault访问策略配置:必须将虚拟机的系统分配标识添加到Key Vault的访问策略中,授予对应权限(比如机密读取、密钥读取等,按需选择)。即使虚拟机和Key Vault在同一资源组,默认也无访问权限,必须显式配置。
  • 网络访问控制(若启用):如果Key Vault开启了虚拟网络限制,需将虚拟机所在的虚拟网络/子网添加到Key Vault的防火墙允许列表;未启用网络限制则无需操作。

2. 步骤细化与测试命令

按你计划的步骤,具体执行细节如下:

  • Step1:启用系统分配托管身份:
    在Azure门户虚拟机的“标识”选项卡开启系统分配标识,或用Azure CLI命令:
    az vm identity assign --resource-group <资源组名> --name <虚拟机名>
    
  • Step2:配置Key Vault访问策略:
    进入Key Vault的“访问策略”页面,添加新策略:选择“系统分配托管标识”,指定你的虚拟机,勾选所需权限(如机密管理下的获取),保存策略。
  • Step3:测试用PowerShell命令:
    先修正令牌获取命令的参数错误,再调用Key Vault API测试:
    # 获取Key Vault的访问令牌(修正resource参数编码,为官方标准写法)
    $Response = Invoke-RestMethod -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net' -Method Get -Headers @{Metadata="true"}
    $KeyVaultToken = $Response.access_token
    
    # 调用Key Vault API获取指定机密
    $SecretValue = Invoke-RestMethod -Uri 'https://<你的Key Vault名称>.vault.azure.net/secrets/<机密名称>?api-version=7.4' -Method Get -Headers @{Authorization="Bearer $KeyVaultToken"}
    # 输出机密明文值
    Write-Output $SecretValue.value
    
  • Step4:REST API调用注意事项:
    替换<你的Key Vault名称>和<机密名称>,API版本建议使用最新稳定版(如7.4),请求头必须包含Authorization: Bearer <令牌>。
  • Step5:应用中集成建议:
    在IIS应用中,可复用上述REST逻辑,但更推荐使用Azure官方SDK(如.NET的Azure.Security.KeyVault.Secrets包),SDK会自动处理令牌的获取、刷新和错误重试,比直接调用REST更稳定可靠。

3. 备注疑问解答

  • 关于http://169.254.169.254的安全性:
    这个IP是Azure虚拟机的本地元数据服务端点,仅能从虚拟机内部访问,外部网络无法连接,因此使用HTTP是安全的,微软官方文档明确推荐使用该端点获取托管身份令牌。
  • 命令正确性:
    你找到的命令中resource参数编码有误(原命令是https%3F%2A%2Fvault.azure.net),修正为https%3A%2F%2Fvault.azure.net后,就是官方标准的令牌获取命令,相关细节可在Azure托管身份官方文档中找到。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 19:07:23