7

他のチームと共有する展開プロジェクトがあります。Vault でシークレットを暗号化しました。本番ファイルをパスワードで暗号化し、ステージング ファイルを別のパスワードで暗号化して、他のチームが本番環境の秘密にアクセスできないようにしたいと考えています。

それは可能ですか?

私はそのようなことをしました。私の秘密 :

cat /group_vars/all/vault_production.yml (encrypt with password A)
production_password: 'test1'

cat/group_vars/all/vault_staging.yml (encrypt with password B)
staging_password: 'test2'

私の環境:

cat hosts-production
[all:vars]
env_type=production

cat hosts-staging
[all:vars]
env_type=staging

私のスクリプト:

- copy:
  content: |
    env PASS={{hostvars[inventory_hostname][env_type + '_password']}}
  ...

そして、そのようにプレイブックを起動します。

# for production
ansible-playbook  -i hosts-staging test.yml --vault-password-file .password_a
# for staging
ansible-playbook  -i hosts-staging test.yml --vault-password-file .password_b

しかし、2 つの異なるパスワードがあるため、これは機能しません (エラー! 復号化に失敗しました)。その方法を知っていますか?

ありがとう。

ブラジル、

エリック

4

2 に答える 2

4

申し訳ありませんが、今日は実行ごとに 1 つのボールト パスワードしか許可されていません。本当にどちらか一方だけが必要な場合にこれを回避する最善の方法は、var に基づいてボールトされたファイルを動的にロードすることです。例えば:

- hosts: localhost
  vars_files:
  - secretstuff-{{ env_type }}.yml
  tasks:
  ...

また

- hosts: localhost
  tasks:
  - include_vars: secretstuff-{{ env_type }}.yml
  ...

変数が1回のプレイまたは実行全体で生き残る必要があるかどうかによって異なります(後者はプレイ変数ではなく事実としてそれらを取り込みます)。

于 2016-08-26T17:57:06.813 に答える
3

Ansible 2.4 以降、複数のボールト パスワードがサポートされています。

ansible-playbook --vault-id dev@dev-password --vault-id prod@prompt site.yml

複数のボールト パスワードが指定されている場合、デフォルトでは、Ansible は、コマンド ラインで指定された順序で各ボールト シークレットを試行することにより、ボールト コンテンツの復号化を試みます。

上記の場合、「dev」パスワードが最初に試行され、次に Ansible が何かを暗号化するために使用されるボールト ID を認識できない場合に備えて「prod」パスワードが試行されます。

于 2019-04-25T15:32:02.780 に答える