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
相关产品推荐
相关产品推荐

