附录 H. 使用 ansible-vault 加密 Ansible 密码变量
您可以使用 ansible-vault
来加密用于存储密码的 Ansible 变量,使它们不可读为纯文本。例如,在 group_vars/all.yml
中,ceph_docker_registry_username
和 ceph_docker_registry_password
变量可以设置为服务帐户凭证或客户门户凭证。该服务帐户经过设计为共享,但客户门户网站密码应该安全。除了加密 ceph_docker_registry_password
外,您可能还希望加密 dashboard_admin_password
和 grafana_admin_password
。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 访问 Ansible 管理节点.
流程
- 登录 Ansible 管理节点。
进入
/usr/share/ceph-ansible/
目录:[admin@admin ~]$ cd /usr/share/ceph-ansible/
运行
ansible-vault
并创建新的 vault 密码:示例
[admin@admin ceph-ansible]$ ansible-vault encrypt_string --stdin-name 'ceph_docker_registry_password_vault' New Vault password:
重新输入 vault 密码以确认它:
示例
[admin@admin ceph-ansible]$ ansible-vault encrypt_string --stdin-name 'ceph_docker_registry_password_vault' New Vault password: Confirm New Vault password:
输入要加密的密码,然后输入 CTRL+D 两次以完成该条目:
语法
ansible-vault encrypt_string --stdin-name 'ceph_docker_registry_password_vault' New Vault password: Confirm New Vault password: Reading plaintext input from stdin. (ctrl-d to end input) PASSWORD
使用密码替换 PASSWORD:
示例
[admin@admin ceph-ansible]$ ansible-vault encrypt_string --stdin-name 'ceph_docker_registry_password_vault' New Vault password: Confirm New Vault password: Reading plaintext input from stdin. (ctrl-d to end input) SecurePassword
在键入密码后请勿按 Enter 键,否则它将在加密字符串中包含新行作为密码的一部分。
记录以
ceph_docker_registry_password_vault: !vault |
开头并以几行数字结束的输出,它将在下一步中使用:示例
[admin@admin ceph-ansible]$ ansible-vault encrypt_string --stdin-name 'ceph_docker_registry_password_vault' New Vault password: Confirm New Vault password: Reading plaintext input from stdin. (ctrl-d to end input) SecurePasswordceph_docker_registry_password_vault: !vault | $ANSIBLE_VAULT;1.1;AES256 38383639646166656130326666633262643836343930373836376331326437353032376165306234 3161386334616632653530383231316631636462363761660a373338373334663434363865356633 66383963323033303662333765383938353630623433346565363534636434643634336430643438 6134306662646365370a343135316633303830653565633736303466636261326361333766613462 39353365343137323163343937636464663534383234326531666139376561663532 Encryption successful
您需要的输出在密码后马上开始,没有空格或新行。
打开以编辑
group_vars/all.yml
,并将上方的输出粘贴到文件中:示例
ceph_docker_registry_password_vault: !vault | $ANSIBLE_VAULT;1.1;AES256 38383639646166656130326666633262643836343930373836376331326437353032376165306234 3161386334616632653530383231316631636462363761660a373338373334663434363865356633 66383963323033303662333765383938353630623433346565363534636434643634336430643438 6134306662646365370a343135316633303830653565633736303466636261326361333766613462 39353365343137323163343937636464663534383234326531666139376561663532
在加密的密码下方添加一行:
示例
ceph_docker_registry_password: "{{ ceph_docker_registry_password_vault }}"
注意由于 Ansible 中的一个错误会在将 vault 值直接分配给 Ansible 变量时中断字符串类型,因此需要使用上述两个变量。
配置 Ansible,以在运行
ansible-playbook
时要求输入 vault 密码。打开以编辑
/usr/share/ceph-ansible/ansible.cfg
,并在[defaults]
部分添加以下行:ask_vault_pass = True
另外,您可以在每次运行 ansible-playbook 时传递
--ask-vault-pass
:示例
[admin@admin ceph-ansible]$ ansible-playbook -v site.yml --ask-vault-pass
重新运行
site.yml
或site-container.yml
,以确保没有与加密密码相关的错误。示例
[admin@admin ceph-ansible]$ ansible-playbook -v site.yml -i hosts --ask-vault-pass
只有在您不使用
/etc/ansible/hosts
的默认 Ansible 清单位置时,才需要-i hosts
选项。
其它资源
- 请参阅 Red Hat Container Registry 身份验证中的服务帐户信息