Aar*_*oir 37 ansible ansible-playbook
有没有人有一个使用ansible-vault解密和上传文件的例子.
我正在考虑在源代码管理中保持我的ssl证书加密.
看起来像下面的东西应该工作.
---
- name: upload ssl crt
copy: src=../../vault/encrypted.crt dest=/usr/local/etc/ssl/domain.crt
Run Code Online (Sandbox Code Playgroud)
jef*_*her 44
从Ansible 2.1.x开始,复制模块现在无缝地执行此操作.只需使用Ansible Vault加密文件,然后在文件上发出复制任务.
(作为参考,这里增加了这个功能:https://github.com/ansible/ansible/pull/15417)
Ric*_*ico 34
那不行.你会得到的是你的encrypted.crt
(使用Ansible Vault)按字面意思上传的domain.crt
您需要做的是使您的Playbook成为"Vault"的一部分,并添加包含您的证书内容的变量.像这样的东西:
---
- name: My cool playbook
hosts: all
vars:
mycert: |
aasfasdfasfas
sdafasdfasdfasdfsa
asfasfasfddasfasdfa
tasks:
# Apparently this causes new lines on newer ansible versions
# - name: Put uncrypted cert in a file
# shell: echo '{{ mycert }}' > mydecrypted.pem
# You can try this as per
# https://github.com/ansible/ansible/issues/9172
- copy:
content: "{{ mycert }}"
dest: /mydecrypted.pem
- name: Upload Cert
copy: src=/home/ubuntu/mydecrypted.pem dest=/home/ubuntu/mydecrypteddest.pem
- name: Delete decrypted cert
file: path=/home/ubuntu/mydecrypted.pem state=absent
Run Code Online (Sandbox Code Playgroud)
您也可以选择mycert
使用Ansible Vault 将变量放在单独的变量文件中.
副本模块已在Ansible 2.1中更新.来自更改日志:"复制模块现在可以透明地使用存储文件作为源,如果提供了存储库密码,它将动态解密和复制." 在这里注意到,因为有些人不可避免地会超越接受的答案. - JK Laiho
Yas*_*ser 21
有一个功能请求,可以在复制模块中本地支持此功能.但是在实现之前,这里是解决方法(类似于@ dave1010的答案,但为了完整性重复公共部分):
创建一个secrets.yml
使用ansible vault加密的文件,其中包含您的秘密,例如:
---
private_ssl_key: |
-----BEGIN PRIVATE KEY-----
abcabcabcabcabcabcabcabcabc
-----END PRIVATE KEY-----
private_crt: |
-----BEGIN CERTIFICATE-----
abcabcabcabcabcabcabcabcabc
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)
在您的剧本中,包含它:
vars_files:
- secrets.yml
Run Code Online (Sandbox Code Playgroud)
然后你可以在任务中使用变量:
- name: Copy private kay
copy: content="{{ private_ssl_key }}" dest=/some/path/ssl.key
Run Code Online (Sandbox Code Playgroud)
但是,如果您尝试复制的文件是二进制文件,则不起作用.在这种情况下,您需要首先使用base64编码内容:
cat your_secret_file | /usr/bin/base64
Run Code Online (Sandbox Code Playgroud)
然后将base64编码的值放在您的secrets.yml
文件中,例如:
crt_b64: |
ndQbmFQSmxrK2IwOFZnZHNJa0sKICAxdDhFRUdmVzhMM...
Run Code Online (Sandbox Code Playgroud)
然后,您可以分两步创建远程文件:
- name: Copy certificate (base64 encoded)
copy: content="{{ crt_b64 }}" dest=/some/path/cert.b64
- name: Decode certificate
shell: "base64 -d /some/path/cert.b64 > /some/path/cert.txt"
args:
creates: /some/path/cert.txt
Run Code Online (Sandbox Code Playgroud)
请注意,您可以删除cert.b64
远程主机上的临时文件.但是重新运行该剧本将重新创建它,而不是跳过这个任务.所以,我宁愿把它留在那里.
更新:此功能已在Ansible 2.1中实现.
复制模块现在可以透明地使用存储文件作为源,如果提供了存储库密码,它将动态解密和复制.
dav*_*010 15
我使用了模板和a vars_file
来做:
在您的顶级剧本中:
vars_files:
- secretvars.yml
Run Code Online (Sandbox Code Playgroud)
在任务中:
- name: Private ssl key
template: src=etc-ssl-private-site.key dest=/etc/ssl/private/site.key
Run Code Online (Sandbox Code Playgroud)
在template(etc-ssl-private-site.key
)中,您只需要变量:
{{ private_ssl_key }}
Run Code Online (Sandbox Code Playgroud)
在加密secretvars.yml
(加密这个ansible-vault
):
---
private_ssl_key: |
-----BEGIN PRIVATE KEY-----
abcabcabcabcabcabcabcabcabc
-----END PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)
Cam*_*Cam 13
更新:截至2016年4月,我的Github PR已合并,可在Ansible 2.1及更高版本中使用.在公关合并之前,以下是临时解决方案.
想要做同样的事情我创建了一个动作插件来实现该功能.这可以通过github获得.该插件正是ansible随附的复制动作插件,但支持保险库解密.
你可以像这样使用它:
- name: Copy Some Secret File
copyv: src="secret.txt" dest="/tmp/"
Run Code Online (Sandbox Code Playgroud)
如果secret.txt被加密(并提供了保管库密码),那么它将被解密和复制.
Kon*_*bov 11
我想,你有一个更简单的方法来做到这一点.
如果在某个格式的文件中使用certificate + key(如pkcs12或只是连接),则可以使用通用openssl
(或gpg
其他)加密.它看起来像这样:
openssl enc -e -aes-256-ctr -in original.pem -out encrypted.aes -k <pass-vault>
Run Code Online (Sandbox Code Playgroud)
之后,您只需将encrypted.aes复制到远程主机并就地解密:
- name: copy encrypted cert and key
copy: src=encrypted.aes dest=/root/ansible-files/ mode=0600
- name: decrypt cert and key
command: openssl enc -aes-256-ctr -d -in /root/ansible-files/encrypted.aes -out <dest> -k {{ pass-vault }}
Run Code Online (Sandbox Code Playgroud)
如果您有pem或der格式的单独密钥文件,则可以使用
openssl rsa -in original.pem -out encrypted.pem -aes256 -passout pass:<pass-vault>
Run Code Online (Sandbox Code Playgroud)
小智 8
Ansible 2.5 将参数添加decrypt
到copy
模块中。
例如,如果您使用以下内容加密文件:
$ ansible-vault encrypt vault/encrypted.crt
Run Code Online (Sandbox Code Playgroud)
现在您可以使用复制 +解密:
---
- name: upload ssl crt
copy:
src: path/to/encrypted-with-vault.crt
dest: /usr/local/etc/ssl/domain.crt
decrypt: yes
mode: 0600
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
27931 次 |
最近记录: |