パブリックCIおよびBitBucketなどのソース管理リポジトリでAnsible Vaultを使用するためのベストプラクティスは何ですか?


11

前書き

プライベートCIとGitlab-ceのようなソース管理リポジトリでは、〜/ .vault_pass.txtをサーバーにコピーして、CIがAnsibleを使用してファイルを復号化できるようにすることができます。

問題

パブリックCIとBitbucketなどのソース管理リポジトリでは、〜/ .vault_pass.txtをCIサーバー自体にコピーすることはできません。

討論

Bitbucketでは暗号化された変数を定義することができますが、このファイルがチェックされるとき、VAULT関連の変数は次のとおりです。

  • ANSIBLE_ASK_VAULT_PASS
  • ANSIBLE_VAULT_PASSWORD_FILE

ANSIBLE_ASK_VAULT_PASSが設定されている場合ansible-vaultでもプロンプトが表示されるため、これらの変数は問題を解決するためのオプションではありません。

user@host $
Vault password:

同じパスワードを入力すると、暗号化されたファイルを開くことができますが、ファイルを必要とせずに、またはプロンプトにパスワードを入力せずにファイルを開くことが目的です。

問題を解決するための別の試みが実行されてexport ANSIBLE_ASK_VAULT_PASS=<ansible-vault-password>いましたが、インタラクティブモードが持続します。

別のオプションはexport ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass.txtですが、このファイルをリポジトリにプッシュする必要がありますが、ソース管理リポジトリにはパスワードを含めないでください。


2
こんにちは@ 030、CIの意味を明確にしていただけませんか?私にとってこれは継続的インテグレーションを意味しますが、GitLabとBitBucketはどちらもソース管理リポジトリでもあります。CIが拡張されていれば、問題はより明確になります。
Richard Slater

回答:


8

--vault-password-file代わりに、stdoutに書き込む実行可能スクリプトを指すことができます。このほとんど知られていない機能はあなたの問題を解決するはずです。

まず、システム環境変数を出力する単純な実行可能スクリプトを記述し、それをソース管理にチェックインします。次に、Bitbucketの暗号化変数機能を使用して、その環境変数をansible-vaultシークレットに設定します。最後に、次のように実行します。

ansible-playbook site.yml --vault-password-file ./mypass.sh

参照:

  1. http://docs.ansible.com/ansible/playbooks_vault.html#running-a-playbook-with-vault

  2. https://groups.google.com/forum/#!topic/ansible-devel/1vFc3y6Ogto


そして、mypass.shにはecho $VAR、たとえば、この変数がBitBucket UIで設定されますか?
030

うん!または、Pythonの例を次に示します:stackoverflow.com/questions/4906977/…–
ウッドランドハンター

([Errno 8] Exec format error). If this is not a script, remove the executable bit from the file.
030

1

使用する

ansible-playbook site.yml --vault-password-file ./mypass.sh

をもたらしました:

ERROR! Problem running vault password script / p a t h / t o
/ e c h o _ v a u l t _ p a s s . s h ([Errno 8] Exec format error). If this is 
not a script, remove the executable bit from the file.

この投稿に基づいて、以下がbitbucket-pipelinesで定義されました。

image: docker:latest

pipelines:
  default:
    - step:
        script:
          - echo $ANSIBLE_VAULT_PASSWORD > .vault_password.txt
          - ansible-playbook -i ansible/inventory ansible/site.yml --vault-password-file .vault_password.txt

-1

本番環境で実行しないテスト設定を用意し、それらのファイルをロードすることができます。

ローカルテストインストールでのみ機能するhost_vars / localhost / vaultを作成します。

そうすることで、そのローカルホストボールトでのみ機能するオープンボールトパスワードを使用できます。

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