26.4. Ansible を使用した IdM サービスのサービスシークレットの取得
以下の手順に従って、Ansible Playbook を使用してサービスの代わりにサービス Vault からシークレットを取得します。以下の手順で使用する例では、Playbook を実行して secret_vault という名前の PEM
ファイルを取得し、Ansible インベントリーファイルに ipaservers
として記載されている全ホストの指定の場所に保存します。
サービスは、キータブを使用して IdM に対して、さらに秘密鍵を使用して Vault に対して認証を実行します。ansible-freeipa
がインストールされている IdM クライアントから、サービスの代わりにファイルを取得できます。
前提条件
次の要件を満たすように Ansible コントロールノードを設定している。
- Ansible バージョン 2.15 以降を使用している。
-
freeipa.ansible_freeipa
コレクションがインストールされている。 - ~/MyPlaybooks/ ディレクトリーに、IdM サーバーの完全修飾ドメイン名 (FQDN) を使用して Ansible インベントリーファイル が作成されている (この例の場合)。
-
secret.yml Ansible vault に
ipaadmin_password
が保存されており、secret.yml ファイルを保護するパスワードを格納しているファイルにアクセスできる (この例の場合)。
-
ターゲットノード (
freeipa.ansible_freeipa
モジュールが実行されるノード) が、IdM クライアント、サーバー、またはレプリカとして IdM ドメインに含まれている。 - サービスシークレットを保存するための 非対称 Vault を作成 している。
- Vault にシークレットをアーカイブ している。
-
Ansible コントローラーで
private_key_file
変数が指定する場所にサービス Vault のシークレットの取得に使用する秘密鍵が保存されている。
手順
~/MyPlaybooks/ディレクトリーに移動します。
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow インベントリーファイルを開きます。
-
webservers
セクションで、シークレットを取得するホストを定義します。たとえば Ansible に対して webserver1.idm.example.com、webserver2.idm.example.com および webserver3.idm.example.com にシークレットを取得するように指示するには以下を実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
該当するコレクションのディレクトリーから、retrieve-data-asymmetric-vault.yml Ansible Playbook ファイルのコピーを作成します。以下に例を示します。
cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/vault/retrieve-data-asymmetric-vault.yml retrieve-data-asymmetric-vault-copy.yml
$ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/vault/retrieve-data-asymmetric-vault.yml retrieve-data-asymmetric-vault-copy.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - retrieve-data-asymmetric-vault-copy.yml ファイルを編集のために開きます。
freeipa.ansible_freeipa.ipavault
タスクセクションで次の変数を設定して、ファイルを変更します。-
ipaadmin_password
変数の値が secret.yml Ansible vault ファイルで定義されていることを示します。 -
name
変数は Vault の名前 (例: secret_vault) に設定します。 -
service
変数は Vault のサービス所有者に設定します (例: HTTP/webserver1.idm.example.com)。 -
private_key_file
変数は、サービス Vault のシークレットの取得に使用する秘密鍵の場所に設定します。 -
out
変数は、現在の作業ディレクトリーなど、private-key-to-an-externally-signed-certificate.pem シークレットの取得先となる IdM サーバーの場所に設定します。 action
変数はmember
に設定します。今回の例で使用するように変更した Ansible Playbook ファイル:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
Playbook に、IdM サーバーから Ansible コントローラーにデータファイルを取得するセクションを追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow インベントリーファイルの
webservers
セクションに記載されている Web サーバーに、Ansible コントローラーから取得した private-key-to-an-externally-signed-certificate.pem ファイルを転送するセクションを Playbook に追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - ファイルを保存します。
Playbook を実行します。
ansible-playbook --vault-password-file=password_file -v -i inventory.file retrieve-data-asymmetric-vault-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file retrieve-data-asymmetric-vault-copy.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow