付録H ansible-vault を使用した Ansible パスワード変数の暗号化

パスワードの格納に使用する Ansible 変数を暗号化するには ansible-vault を使用し、プレーンテキストとして読み込めないようにします。たとえば、group_vars/all.yml で、ceph_docker_registry_username および ceph_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 を 2 回入力してエントリーを完了します。

    構文

    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 | で開始し、数字の行 2-3 行で終了する出力をメモし、次の手順で使用します。

    [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 }}"

    注記

    上記のように 2 つの変数を使用する必要があります。これは、Ansible のバグ が原因で、vault 値を直接 Ansible 変数に割り当てる時に、文字列のタイプが破損するためです。

  9. ansible-playbook の実行時に vault パスワードを要求するように Ansible を設定します。

    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.yml または site-container.yml を再実行して、暗号化されたパスワードに関連するエラーがないことを確認します。

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

    -i hosts オプションは、/etc/ansible/hosts のデフォルトの Ansible インベントリーの場所を使用していない場合にのみ必要です。

関連情報