ansible-vaultを使用してファイルを復号化およびアップロードする例はありますか。
ソース管理で SSL 証明書を暗号化しておくことを考えています。
次のようなものが機能するはずです。
---
- name: upload ssl crt
copy: src=../../vault/encrypted.crt dest=/usr/local/etc/ssl/domain.crt
ansible-vaultを使用してファイルを復号化およびアップロードする例はありますか。
ソース管理で SSL 証明書を暗号化しておくことを考えています。
次のようなものが機能するはずです。
---
- name: upload ssl crt
copy: src=../../vault/encrypted.crt dest=/usr/local/etc/ssl/domain.crt
Ansible 2.1.x 以降、コピー モジュールはこれをシームレスに実行するようになりました。ファイルを Ansible Vault で暗号化してから、ファイルに対してコピー タスクを発行するだけです。
(参考までに、これを追加した機能は次のとおりです: https://github.com/ansible/ansible/pull/15417 )
更新: 2016 年時点で非推奨、Ansible 2.1
より前の Ansible バージョン2.1
:
それはうまくいきません。得られるのは、encrypted.crt
(Ansible Vault を使用して) 文字通りアップロードされたものです。domain.crt
必要なことは、プレイブックを「ボールト」の一部にし、証明書の内容を含む変数を追加することです。このようなもの:
---
- name: My cool playbook
hosts: all
vars:
mycert: |
aasfasdfasfas
sdafasdfasdfasdfsa
asfasfasfddasfasdfa
tasks:
# Apparently this causes new lines on newer ansible versions
# - name: Put uncrypted cert in a file
# shell: echo '{{ mycert }}' > mydecrypted.pem
# You can try this as per
# https://github.com/ansible/ansible/issues/9172
- copy:
content: "{{ mycert }}"
dest: /mydecrypted.pem
- name: Upload Cert
copy: src=/home/ubuntu/mydecrypted.pem dest=/home/ubuntu/mydecrypteddest.pem
- name: Delete decrypted cert
file: path=/home/ubuntu/mydecrypted.pem state=absent
mycert
Ansible Vault を使用して、別の変数ファイルに変数を配置することもできます。
Ansible 2.1 では copy モジュールが更新されました。変更ログから: 「コピー モジュールは、vault されたファイルをソースとして透過的に使用できるようになりました。vault のパスワードが提供されている場合、オンザフライで復号化してコピーします。」一部の人々は必然的に受け入れられた答えを見逃さないため、ここで注意してください。– JKライホ
更新: 2016 年 4 月現在、私のGithub PRはマージされており、Ansible 2.1 以降で利用できます。以下は、PR がマージされるまでの暫定的な解決策です。
同じことをしたいので、機能を実装するアクション プラグインを作成しました。これはgithubから入手できます。このプラグインは、ansible に同梱されているコピー アクション プラグインとまったく同じですが、vault 復号化をサポートしています。
次のように使用できます。
- name: Copy Some Secret File
copyv: src="secret.txt" dest="/tmp/"
secret.txt が暗号化されている (そしてボールトのパスワードが提供されている) 場合、復号化されてコピーされます。
「コピー」モジュールが拡張されてボールト ファイルを自動的に復号化するまでは、次の簡単な回避策があります。
stdout が tty でない場合ansible-vault view <file>
、ページャーを呼び出さずにクリアテキストを stdout に出力します。
「パイプ」ルックアップと組み合わせて、この動作をボールト パスワード ファイルで使用して、コピー モジュールの「コンテンツ」オプションにフィードできます。
- name: "install host key"
copy: content="{{ lookup('pipe', 'ansible-vault view ' + src_key_file) }}"
dest={{ dest_key_file }}
local_action を使用して、Playbook の一部としてファイルを一時的に復号化することもできます。
- name: "temporairly decrypt the twpol.enc"
sudo: False
local_action: shell ansible-vault view --vault-password-file {{ lookup('env', 'ANSIBLE_VAULT_PASS_FILE') }} ./roles/copykey/files/key.enc > ./roles/copykey/files/key.txt
- name: "copy the key to the target machine."
copy: src=key.txt dest=/tmp
- name: "remove decrypted key.txt file"
sudo: False
local_action: rm ./roles/copykey/files/key.txt