是否可以使用多个密码保存

时间:2016-08-26 16:30:47

标签: 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'

我的环境:

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

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

感谢。

BR,

埃里克

2 个答案:

答案 0 :(得分:3)

抱歉,今天每次运行只允许一个保管库密码。在你真正只需要一个或另一个的情况下解决这个问题的最佳方法是基于var动态加载一个拱形文件;例如:

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

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

取决于你是否需要vars在一场比赛或整场比赛中存活(后者将把它们作为事实而非比赛场地)。

答案 1 :(得分:0)

从Ansible 2.4开始支持

Multiple vault passwords

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

如果提供了多个保管库密码,则默认情况下,Ansible会通过按命令行中提供的顺序尝试每个保管库密钥,从而尝试解密保管库内容。

     

在上述情况下,将首先尝试使用“开发”密码,然后在Ansible不知道使用哪个库ID进行加密的情况下尝试使用“产品”密码。