如何在Ansible中调用Azure Key Vault密钥作为创建用户的密码变量
操作步骤
1. 前置依赖检查
- 确保已安装Azure官方Ansible集合:
ansible-galaxy collection install azure.azcollection - 确保运行Ansible的身份(服务主体、托管身份、本地Azure CLI登录账号)拥有对应Azure Key Vault的**密钥获取(Get)**权限
- 提前在Key Vault中创建好存储用户密码的密钥,记录密钥名称和Key Vault名称
2. Playbook完整配置示例
先通过Azure密钥库模块拉取密钥,再调用用户创建模块传入对应值即可,注意Ansible的user模块password参数要求传入/etc/shadow格式的哈希值,不能直接使用明文密码:
--- - name: 拉取Key Vault密钥创建系统用户 hosts: 你的目标主机分组 gather_facts: false tasks: # 第一步:从Azure Key Vault拉取密码,任务在本地执行 - name: 获取用户密码密钥 azure.azcollection.azure_rm_keyvaultsecret_info: vault_uri: "https://<你的Key Vault名称>.vault.azure.net/" name: "<存储密码的密钥名称>" register: kv_user_password delegate_to: localhost # 第二步:创建系统用户,密码自动做哈希处理 - name: 创建业务系统用户 ansible.builtin.user: name: username uid: UID group: grpname shell: /bin/bash comment: "test user" password: "{{ kv_user_password.secrets[0].secret | password_hash('sha512') }}"
3. 注意事项
- 如果你已经提前把哈希后的sha512格式密码存储到了Key Vault中,可以去掉
password_hash过滤器,直接写password: "{{ kv_user_password.secrets[0].secret }}" delegate_to: localhost参数必须配置,避免在没有Azure访问权限的目标主机上执行密钥拉取操作- 若使用服务主体认证,可以在拉取密钥的任务中额外传入
client_id、client_secret、tenant参数,也可以提前通过环境变量配置Azure认证信息
内容的提问来源于stack exchange,提问作者Ashish Kumar
相关产品推荐
相关产品推荐

