Ansibleでバイナリファイルを暗号化する方法


9

Ansible Vaultを使用して、パスワード、証明書の秘密鍵などをAnsible Playbook gitリポジトリに保存しています。既存のプライベートデータはすべてテキスト形式であるため、変数に格納できます。これらは、テンプレートまたはcontentコピーモジュールのパラメーターで使用されます。

これで、JavaのKeyStoreファイルができましたが、残念ながらバイナリ形式になっています。そのため、それを変数内に格納することはできません-または、少なくともそれを行う方法がわかりません。gitに保存されているファイルを適切に暗号化する最も簡単な方法は何ansible-playbookですか?実行時に利用できますか?

私が成功せずにすでに試したこと:

  • バイナリファイルをbase64でエンコードし、エンコードされたデータを変数に格納し、テンプレートモジュールをで使用します{{base64_data | b64decode}}EF BF BD結果ファイルの大量の16進ダンプにつながります。3バイトはUnicode置換文字をUTF-8でエンコードするため、バイナリデータをテキストとして解釈する際に問題があります。
  • バイナリファイルをbase64でエンコードし、エンコードされたデータを変数に格納し、でコピーモジュールを使用しますcontent="{{base64_data | b64decode}}"。Ansibleは「変数がモジュールの引数に新しいパラメーターを挿入しました」と文句を言います。二重引用符の代わりに単一引用符を使用すると、Ansibleは「引数文字列の解析エラー」と、ターミナルにダンプされたすべてのバイナリデータのコピーを表示します...

groups.google.com/d/topic/ansible-project/IinZK14FyX4での議論から、私はansibleがこれをサポートしておらず、base64のことを自分でやらなければならないが、サードパーティのものがあるかもしれないと結論づけていますそれはそれをより簡単にすることができます。
Antonis Christofides、

よろしくお願いします。試して報告します...
ダニエル・サザー

いいえ、残念ながら機能しません(編集された質問を参照)。関連する可能性のあるansibleプルリクエストに関するいくつかの議論があります:github.com/ansible/ansible-modules-extras/pull/142
ダニエル

これをGPG呼び出しでラップすることを考えましたか?GPG秘密鍵のASCII表現をAnsible Vaultに格納し、それを使用してバイナリファイルを復号化し、問題なくgitに格納できます。
クリストファーカレル

ご提案ありがとうございますが、この回避策は私が望んでいるよりも少し複雑です。base64でエンコードされたキーストアをターゲットマシンにコピーし、更新時にファイルをデコードするハンドラーを用意することをすでに考えていましたが、一時ファイルを破棄しないソリューションが望ましいです。
ダニエル・

回答:


4

これを行うには、base64変数でシェルコマンドを使用できます。

- vars:
  - myvar: "<my_base64_var>"
- name: Create binary file
  shell: "echo '{{myvar}}' | base64 -d > /var/tmp/binary.dat"

エリック


特に一時ファイルを使用しないので、これは間違いなくオプションです。悲しいことに、それはAnsibleが変更が行われたかどうかを検出することを許可しませんが、私が見た他のすべてのソリューションよりも優れています。
ダニエル・サザー

1
Vaultは現在それをサポートしていると思います。「Vault機能は、バイナリファイルを含め、任意のファイルを暗号化することもできます。vaultで暗号化されたファイルをsrc引数としてコピーモジュールに指定すると、ファイルはターゲットホストの宛先に配置されます。復号化されました(プレイの実行時に有効なボールトパスワードが提供されていると想定しています)。」- docs.ansible.com/ansible/playbooks_vault.html
マイク・グリーソンJRクチュリエ

2
@MikeGleasonjrCouturierによって引用されたテキストをansibleドキュメントの別のページに移動したように見えることに注意してください。docs.ansible.com/ansible/latest/vault.htmlをご覧ください。
リアム

2

ansibleセットアップでそれを行う方法は次のとおりです。

-https : //www.agwa.name/projects/git-crypt/ を使用して個々の機密資料(リポジトリの小さなサブセット)を暗号化します -すべての人は常にgit署名タグを使用してコミットします-未署名のファイルがないか定期的にチェックします

git-cryptの利点は、gitフィルターに依存しているため、暗号化が透過的であることです。さらに、暗号化されたコンテンツを損なうことなく、リポジトリへのアクセスを開発者に与えることができます(復号化キーを取得できない場合、暗号化されたファイルは無視されます)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.