使用 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 即可。

广告
将在 10 秒后关闭
bannerAds