从Azure虚拟机访问Key Vault存储凭据的配置咨询
Azure虚拟机访问Key Vault机密方案解答
1. 是否可实现上述架构?
完全可以实现。Azure原生支持虚拟机通过托管身份安全访问Key Vault,结合Key Vault的版本化机密机制,脚本每次拉取机密时若不指定版本,就能自动获取更新后的最新凭据,无需修改核心脚本逻辑。
2. 需要部署的资源及配置步骤
所需资源
- 已有的Azure虚拟机(VM)
- 已有的Azure Key Vault
- 虚拟机的托管身份(推荐系统分配型,无需额外创建独立资源)
具体配置步骤
- 步骤1:给虚拟机启用系统分配托管身份
进入Azure门户的VM详情页,找到「身份」选项卡,选择「系统分配」,将状态设为「开启」后保存。Azure会自动为该VM生成对应的服务主体。 - 步骤2:配置Key Vault访问策略
进入Key Vault详情页的「访问策略」选项卡,点击「添加访问策略」:- 在「权限」中勾选「机密权限」下的
Get和List(满足读取最新机密的需求) - 在「主体」中搜索并选择VM启用身份后生成的服务主体(名称与VM一致)
- 保存配置
- 在「权限」中勾选「机密权限」下的
- 步骤3:打通VM与Key Vault的网络访问
若Key Vault启用了防火墙,需在「网络」选项卡中添加VM所在的虚拟网络到允许列表,或开启「允许受信任的Microsoft服务访问」(适合快速测试场景)
3. 已有脚本的身份验证改造
无需改动原有脚本的机密调用逻辑,只需替换身份验证方式为托管身份自动认证,具体操作如下:
安装依赖库
在虚拟机中执行命令安装所需Python库:
pip install azure-identity azure-keyvault-secrets
身份验证与机密获取示例
使用DefaultAzureCredential会自动识别VM的托管身份,无需硬编码任何凭据:
from azure.identity import DefaultAzureCredential from azure.keyvault.secrets import SecretClient # 初始化客户端 credential = DefaultAzureCredential() vault_url = "https://你的密钥保管库名称.vault.azure.net/" secret_client = SecretClient(vault_url=vault_url, credential=credential) # 获取最新机密(不指定版本则自动拉取当前最新版本) latest_secret = secret_client.get_secret("你的机密名称") print(f"最新凭据值: {latest_secret.value}")
自动获取最新凭据的逻辑
若要确保脚本能获取更新后的凭据,只需在每次需要使用凭据时调用get_secret方法(不要长期缓存凭据值,或定期重新调用),Key Vault会返回当前设置的最新版本机密。
内容的提问来源于stack exchange,提问作者ZZZSharePoint
相关产品推荐
相关产品推荐

