使用 Ansible-Vault 和 AWS SecretsManager,可以安全地在 Ansible 中管理密码等信息
使用Ansible-Vault和AWS Secrets Manager来安全地管理密码等信息。
使用Ansible-Vault和AWS SecretsManager结合,可以在ansible中加密密码等信息的备忘录。
-
- Ansible-Vault : https://docs.ansible.com/ansible/latest/user_guide/vault.html
AWS Secrets Manager : https://docs.aws.amazon.com/ja_jp/secretsmanager/latest/userguide/intro.html
我想做的事情。
-
- パスワードとかを、ansibleにそのまま書いて、gitにcommitするのは色々とまずいのでAnsible-Vaultで暗号化する。
- 暗号化のパスワードの管理もいろいろ考えたくないので、AWS Secrets Manager にさせる。
方向
-
- 暗号化のパスワードはAWS Secrets Managerに保管して利用する
これでIAMだけ考えればよくなる
Ansible-Vaultは、ファイル単位の暗号化でなく、フィールド単位での暗号化にする
ファイル単位にしちゃうと、gitでみた時に超不便
做法的总结 de
-
- AWS Secretes Manager からパスワードを標準出力するShell Scriptを作成して、それを –vault-password-file に指定する
–vault-password-file はパスワードが書かれたファイルを指定するが、パスワードを出力する実行ファイルを指定しても動く (inventoryとかと一緒)
ansible.cfg の [defaults] の vault_password_file に書いちゃえば、都度指定する必要なくなるので便利
フィールドの暗号化は、 ansible-vault encrypt_string 使って、出力されたものを変数として記載する
执行示例 lì)
前提- 假设/条件/先决条件
-
- AWS Secretes Manager
シークレットのタイプは「他の種類のシークレット」
シークレット名 : ansible-vault
シークレットキー : main
IAM
実行する環境で、上記シークレットへのアクセス権限をつける(インスタンスロールとか、アクセスキーとかで)
使用Shell脚本从AWS Secrets Manager标准输出密码。
#!/bin/bash
aws secretsmanager get-secret-value --secret-id ansible-vault --region ap-northeast-1 | jq -r .SecretString | jq -r .main
请使用vault_pass.sh将此文件保存并添加执行权限。切记…
加密
-> % echo 'MY_PASSWORD' | ansible-vault encrypt_string --stdin-name "db_password" --vault-password-file ./vault_pass.sh
Reading plaintext input from stdin. (ctrl-d to end input)
db_password: !vault |
$ANSIBLE_VAULT;1.1;AES256
36366633366332363266363932633930396137393639663438303663363563373565393664613734
3435303263666164353935646632303838303363303930390a393639346130386263333239613664
61343233316234353333363765336438303134323362323732643437336336343933346233383331
3138343435663363390a653766353066653561316166386662363233613339363039373962656261
3366
Encryption successful
对playbook的记录
被输出的
db_password: !vault |
$ANSIBLE_VAULT;1.1;AES256
36366633366332363266363932633930396137393639663438303663363563373565393664613734
3435303263666164353935646632303838303363303930390a393639346130386263333239613664
61343233316234353333363765336438303134323362323732643437336336343933346233383331
3138343435663363390a653766353066653561316166386662363233613339363039373962656261
3366
只要将其直接作为变量写入即可。
- db_user: admusr
- db_password: !vault |
$ANSIBLE_VAULT;1.1;AES256
36366633366332363266363932633930396137393639663438303663363563373565393664613734
3435303263666164353935646632303838303363303930390a393639346130386263333239613664
61343233316234353333363765336438303134323362323732643437336336343933346233383331
3138343435663363390a653766353066653561316166386662363233613339363039373962656261
3366
这样就可以直接提交到git上。
执行 (shí
在执行ansible-playbook时,只需要加上选项 –vault-password-file ./vault_pass.sh 就可以了。
额外的东西
以下是一种选项:
将ansible.cfg文件复制到指定位置。
[defaults]
vault_password_file=./vault_pass.sh
只要写上 –vault-password-file ./vault_pass.sh,就不需要每次都加上它了(注意加上它会导致异常行为)。
请注意
以“-v”参数解密并输出的问题
只需按照 FAQ https://docs.ansible.com/ansible/2.6/reference_appendices/faq.html#how-do-i-keep-secret-data-in-my-playbook 中提到的方法,在你的 playbook 中加上 no_log: True 即可。