3.3. Ansible を使用して IdM の標準ユーザー vault からシークレットを取得する手順
以下の手順に従って、Ansible Playbook を使用してユーザーのパーソナル vault からシークレットを取得します。以下の手順で使用する例では、idm_user ユーザーは、my_vault という名前の標準タイプの vault から機密データを含むファイルを取得して、host01 という名前の IdM クライアントに配置します。ファイルへのアクセス時に IdM_user を認証する必要はありません。IdM_user は Ansible を使用して、Ansible がインストールされている IdM クライアントからファイルを取得できます。
前提条件
次の要件を満たすように Ansible コントロールノードを設定した。
- Ansible バージョン 2.14 以降を使用している。
-
Ansible コントローラーに
ansible-freeipa
パッケージがインストールされている。 - この例では、~/MyPlaybooks/ ディレクトリーに、IdM サーバーの完全修飾ドメイン名 (FQDN) を使用して Ansible インベントリーファイル を作成したことを前提としている。
-
この例では、secret.yml Ansible vault に
ipaadmin_password
が保存されていることを前提としています。
-
ターゲットノード (
ansible-freeipa
モジュールが実行されるノード) が、IdM クライアント、サーバー、またはレプリカとして IdM ドメインに含まれている。 - idm_user のパスワードを知っている。
- IdM_user が my_vault の所有者である。
- IdM_user が my_vault にシークレットを保存している。
- Ansible が、シークレットを取得して配置する先の IdM ホストのディレクトリーに書き込みができる。
- IdM_user はシークレットを取得して配置する先の IdM ホストのディレクトリーから読み取りができる。
手順
/usr/share/doc/ansible-freeipa/playbooks/vault
ディレクトリーに移動します。$ cd /usr/share/doc/ansible-freeipa/playbooks/vault
インベントリーファイルを開き、明確に定義されたセクションで、シークレットを取得する IdM クライアントを記載します。たとえば、Ansible に対して host01.idm.example.com にシークレットを取得して配置するよう指示するには、次のコマンドを実行します。
[ipahost] host01.idm.example.com
Ansible Playbook ファイル (retrive-data-symmetric-vault.yml) のコピーを作成します。symbolicmetric を Standard に置き換えます。以下に例を示します。
$ cp retrive-data-symmetric-vault.yml retrieve-data-standard-vault.yml-copy.yml
- retrieve-data-standard-vault.yml-copy.yml ファイルを開いて編集します。
-
hosts
変数は ipahost に設定して、ファイルを調整します。 ipavault
タスクセクションに以下の変数を設定して、ファイルを調整します。-
ipaadmin_principal
変数は idm_user に設定します。 -
ipaadmin_password
変数は idm_user のパスワードに設定します。 -
user
変数は idm_user に設定します。 -
name
変数は my_vault に設定します。 -
out
変数は、シークレットをエクスポートするファイルの完全パスに設定します。 state
変数は retrieved に設定します。今回の例で使用するように変更した Ansible Playbook ファイル:
--- - name: Tests hosts: ipahost gather_facts: false vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - ipavault: ipaadmin_principal: idm_user ipaadmin_password: idm_user_password user: idm_user name: my_vault out: /tmp/password_exported.txt state: retrieved
-
- ファイルを保存します。
Playbook を実行します。
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file retrieve-data-standard-vault.yml-copy.yml
検証
host01 に user01 として
SSH
接続します。$ ssh user01@host01.idm.example.com
Ansible Playbook ファイルに
out
変数で指定したファイルを表示します。$ vim /tmp/password_exported.txt
これで、エクスポートされたシークレットが表示されます。
-
Ansible を使用して IdM vault およびユーザーシークレットを管理する方法および、Playbook 変数の情報は、
/usr/share/doc/ansible-freeipa/
ディレクトリーで利用可能な README-vault.md Markdown ファイルおよび/usr/share/doc/ansible-freeipa/playbooks/vault/
で利用可能なサンプルの Playbook を参照してください。