42

ansible-vaultを使用してファイルを復号化およびアップロードする例はありますか。

ソース管理で SSL 証明書を暗号化しておくことを考えています。

次のようなものが機能するはずです。

---
  - name: upload ssl crt
    copy: src=../../vault/encrypted.crt dest=/usr/local/etc/ssl/domain.crt
4

10 に答える 10

52

Ansible 2.1.x 以降、コピー モジュールはこれをシームレスに実行するようになりました。ファイルを Ansible Vault で暗号化してから、ファイルに対してコピー タスクを発行するだけです。

(参考までに、これを追加した機能は次のとおりです: https://github.com/ansible/ansible/pull/15417 )

于 2016-05-27T15:35:01.290 に答える
36

更新: 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

mycertAnsible Vault を使用して、別の変数ファイルに変数を配置することもできます。

Ansible 2.1 では copy モジュールが更新されました。変更ログから: 「コピー モジュールは、vault されたファイルをソースとして透過的に使用できるようになりました。vault のパスワードが提供されている場合、オンザフライで復号化してコピーします。」一部の人々は必然的に受け入れられた答えを見逃さないため、ここで注意してください。– JKライホ

于 2014-04-01T01:12:50.030 に答える
14

更新: 2016 年 4 月現在、私のGithub PRはマージされており、Ansible 2.1 以降で利用できます。以下は、PR がマージされるまでの暫定的な解決策です。

同じことをしたいので、機能を実装するアクション プラグインを作成しました。これはgithubから入手できます。このプラグインは、ansible に同梱されているコピー アクション プラグインとまったく同じですが、vault 復号化をサポートしています。

次のように使用できます。

- name: Copy Some Secret File
  copyv: src="secret.txt" dest="/tmp/"

secret.txt が暗号化されている (そしてボールトのパスワードが提供されている) 場合、復号化されてコピーされます。

于 2015-07-03T08:40:38.613 に答える
4

「コピー」モジュールが拡張されてボールト ファイルを自動的に復号化するまでは、次の簡単な回避策があります。

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 }}
于 2015-08-28T21:57:10.703 に答える
2

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
于 2016-04-07T20:41:46.050 に答える