在公共CI和BitBucket等源代码控制存储库上使用Ansible Vault的最佳实践是什么?


11

介绍

在像Gitlab-ce这样的私有CI和源代码控制存储库上,可以将〜/ .vault_pass.txt复制到服务器,并由CI使用它使用Ansible解密文件。

问题

在公共CI和Bitbucket之类的源代码控制存储库上,无法将〜/ .vault_pass.txt复制到它自己的CI服务器上。

讨论区

在Bitbucket中可以定义加密的变量,但是当选中文件时,唯一与VAULT相关的变量是:

  • ANSIBLE_ASK_VAULT_PASS
  • ANSIBLE_VAULT_PASSWORD_FILE

这些变量不是解决此问题的选项,因为ANSIBLE_ASK_VAULT_PASS设置时ansible-vault仍会提示:

user@host $
Vault password:

当输入相同的密码时,它可以打开加密的文件,但是目的是在不需要文件或在提示中输入密码的情况下打开文件。

解决该问题的另一种尝试正在运行export ANSIBLE_ASK_VAULT_PASS=<ansible-vault-password>,但是交互模式仍然存在。

另一个选择是export ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass.txt,但是随后需要将此文件推送到存储库,但是源代码控制存储库不应包含密码。


2
嗨,@ 030,您能澄清一下CI的意思吗?对我来说,这意味着持续集成,但是GitLab和BitBucket也是源代码控制存储库-如果扩展CI,问题将会更加清楚。
理查德·史莱特

Answers:


8

--vault-password-file而是可以指向写入标准输出的可执行脚本。这个鲜为人知的功能应该可以解决您的问题。

首先,编写一个简单的可执行脚本来打印系统环境变量,然后将其检入源代码管理中。然后,使用Bitbucket的加密变量功能将该环境变量设置为ansible-Vault机密。最后,像这样执行:

ansible-playbook site.yml --vault-password-file ./mypass.sh

参考文献:

  1. http://docs.ansible.com/ansible/playbooks_vault.html#running-a-playbook-with-vault

  2. https://groups.google.com/forum/#!topic/ansible-devel/1vFc3y6Ogto


然后mypass.sh将包含echo $VAR例如,并且该变量将在BitBucket UI中设置吗?
030

对!另外,这里有一个Python的例子:stackoverflow.com/questions/4906977/...
森林猎人

([Errno 8] Exec format error). If this is not a script, remove the executable bit from the file.
030

1

使用

ansible-playbook site.yml --vault-password-file ./mypass.sh

导致:

ERROR! Problem running vault password script / p a t h / t o
/ e c h o _ v a u l t _ p a s s . s h ([Errno 8] Exec format error). If this is 
not a script, remove the executable bit from the file.

根据这篇文章,在bitbucket-pipelines中定义了以下内容:

image: docker:latest

pipelines:
  default:
    - step:
        script:
          - echo $ANSIBLE_VAULT_PASSWORD > .vault_password.txt
          - ansible-playbook -i ansible/inventory ansible/site.yml --vault-password-file .vault_password.txt

-1

您可能有一个不运行生产的测试设置,并为此加载了不同的文件。

创建仅适用于本地测试安装的host_vars / localhost / vault。

这样,您可以使用仅适用于该本地主机保管库的开放保管库密码。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.