Vault是否可以使用多个密码

elh*_*tis 5 ansible ansible-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'
Run Code Online (Sandbox Code Playgroud)

我的环境:

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

cat hosts-staging
[all:vars]
env_type=staging
Run Code Online (Sandbox Code Playgroud)

我的剧本:

- copy:
  content: |
    env PASS={{hostvars[inventory_hostname][env_type + '_password']}}
  ...
Run Code Online (Sandbox Code Playgroud)

然后我像这样启动剧本。

# 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
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为有两个不同的密码(错误!解密失败)。你知道怎么做吗 ?

谢谢。

BR

埃里克

Tam*_*lyn 8

自 Ansible 2.4 起支持多个保管库密码:

\n\n
ansible-playbook --vault-id dev@dev-password --vault-id prod@prompt site.yml\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

如果提供了多个保管库密码,默认情况下,Ansible 将按照在命令行上提供的顺序尝试每个保管库密码来尝试解密保管库内容。

\n\n

在上述情况下,将首先尝试 \xe2\x80\x98dev\xe2\x80\x99 密码,然后在 Ansible 不\xe2\x80\x99t 的情况下尝试 \xe2\x80\x98prod\xe2\x80\x99 密码知道哪个保管库 ID 用于加密某些内容。

\n
\n


nit*_*one 4

抱歉,今天每次运行只允许使用一个保管库密码。在您实际上只需要其中之一的情况下,解决此问题的最佳方法是基于 var 动态加载保管文件;例如:

- hosts: localhost
  vars_files:
  - secretstuff-{{ env_type }}.yml
  tasks:
  ...
Run Code Online (Sandbox Code Playgroud)

或者

- hosts: localhost
  tasks:
  - include_vars: secretstuff-{{ env_type }}.yml
  ...
Run Code Online (Sandbox Code Playgroud)

取决于您是否需要变量在一场比赛或整个比赛中生存(后者会将它们作为事实而不是比赛变量引入)。