7

我有一个与其他团队共享的部署项目。我已经用保险库加密了我的秘密。我想用密码加密生产文件,用其他密码加密暂存文件,以避免其他团队访问生产机密。

有可能这样做吗?

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

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,

埃里克

4

2 回答 2

4

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

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

或者

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

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

于 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 不知道使用哪个 vault id 加密某些内容的情况下尝试“prod”密码。

于 2019-04-25T15:32:02.780 回答