是否可以使用多个密码和保险库

问题描述 投票:5回答:2

我有一个与其他团队共享的部署项目。我用金库加密了我的秘密。我想用密码和带有其他密码的登台文件加密生产文件,以避免其他团队访问生产机密。

有可能吗?

我做过类似的事情。我的秘密:

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个不同的密码(错误!解密失败)。你知道怎么做吗 ?

谢谢。

BR,

埃里克

ansible ansible-vault
2个回答
3
投票

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

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

要么

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

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


0
投票

自Ansible 2.4起支持Multiple vault passwords

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

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

在上面的例子中,首先尝试'dev'密码,然后在Ansible不知道使用哪个保险库id来加密某些事件的情况下使用'prod'密码。

© www.soinside.com 2019 - 2024. All rights reserved.