附录 H. 使用 ansible-vault 加密 Ansible 密码变量

您可以使用 ansible-vault 来加密用于存储密码的 Ansible 变量,使它们不可读为纯文本。例如,在 group_vars/all.yml 中,ceph_docker_registry_usernameceph_docker_registry_password 变量可以设置为服务帐户凭证或客户门户凭证。该服务帐户经过设计为共享,但客户门户网站密码应该安全。除了加密 ceph_docker_registry_password 外,您可能还希望加密 dashboard_admin_passwordgrafana_admin_password

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 访问 Ansible 管理节点.

流程

  1. 登录 Ansible 管理节点。
  2. 进入 /usr/share/ceph-ansible/ 目录:

    [admin@admin ~]$ cd /usr/share/ceph-ansible/
  3. 运行 ansible-vault 并创建新的 vault 密码:

    示例

    [admin@admin ceph-ansible]$ ansible-vault encrypt_string --stdin-name 'ceph_docker_registry_password_vault'
    New Vault password:

  4. 重新输入 vault 密码以确认它:

    示例

    [admin@admin ceph-ansible]$ ansible-vault encrypt_string --stdin-name 'ceph_docker_registry_password_vault'
    New Vault password:
    Confirm New Vault password:

  5. 输入要加密的密码,然后输入 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 键,否则它将在加密字符串中包含新行作为密码的一部分。

  6. 记录以 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

    您需要的输出在密码后马上开始,没有空格或新行。

  7. 打开以编辑 group_vars/all.yml,并将上方的输出粘贴到文件中:

    示例

    ceph_docker_registry_password_vault: !vault |
              $ANSIBLE_VAULT;1.1;AES256
              38383639646166656130326666633262643836343930373836376331326437353032376165306234
              3161386334616632653530383231316631636462363761660a373338373334663434363865356633
              66383963323033303662333765383938353630623433346565363534636434643634336430643438
              6134306662646365370a343135316633303830653565633736303466636261326361333766613462
              39353365343137323163343937636464663534383234326531666139376561663532

  8. 在加密的密码下方添加一行:

    示例

    ceph_docker_registry_password: "{{ ceph_docker_registry_password_vault }}"

    注意

    由于 Ansible 中的一个错误会在将 vault 值直接分配给 Ansible 变量时中断字符串类型,因此需要使用上述两个变量。

  9. 配置 Ansible,以在运行 ansible-playbook 时要求输入 vault 密码。

    1. 打开以编辑 /usr/share/ceph-ansible/ansible.cfg,并在 [defaults] 部分添加以下行:

      ask_vault_pass = True
    2. 另外,您可以在每次运行 ansible-playbook 时传递 --ask-vault-pass

      示例

      [admin@admin ceph-ansible]$ ansible-playbook -v site.yml --ask-vault-pass

  10. 重新运行 site.ymlsite-container.yml,以确保没有与加密密码相关的错误。

    示例

    [admin@admin ceph-ansible]$ ansible-playbook -v site.yml -i hosts --ask-vault-pass

    只有在您不使用 /etc/ansible/hosts 的默认 Ansible 清单位置时,才需要 -i hosts 选项。

其它资源