AWSサービスによる健全な脚本の秘密管理



Ansibleのための検索プラグインは、クールなものの多くを行うことができます.そのうちの1つはしっかりとあなたの脚本に機密情報を渡すことです.AWSでいくつかのアプリケーションを管理している場合は、それを使用してパラメータストアまたは秘密マネージャを使用して大幅にセキュリティを向上させる可能性があります.

SSMパラメータストアによる変数


デフォルトで定義された変数を持っているとしましょう.あなたの役割のYAMLのファイルまたは多分grouppers Varsで.YAMLファイル.
---
# content of dev.vars.yaml to be included in your play or role
use_tls: true
application_port: 3000
app_env: development
stripe_api_key: 1HGASU2eZvKYlo2CT5MEcnC39HqLyjWD
このようなことをローカルのノードに保存すると、おそらくansible-vault
SSMパラメータのストアでは、パラメータと秘密の集中ストレージと管理によって、より柔軟性とセキュリティを提供します.
---
# content of dev.vars.yaml to be included in your play or role
use_tls: "{{lookup('aws_ssm', '/dev/webserver/use_tls')}}"
application_port: "{{lookup('aws_ssm', '/dev/webserver/application_port')}}"
app_env: "{{lookup('aws_ssm', '/dev/webserver/app_env')}}"
stripe_api_key: "{{lookup('aws_ssm', '/dev/webserver/stripe_api_key')}}"

構文はかなり簡単です.
The aws_ssm 引数はプラグインの名前です.
The /dev/webserver/use_tls 引数- paramterストアのキーへのパスです.
もちろん、グループ変数を持つサーバのグループで同じことを行うことができます
あなたがテンプレートを使用することができますどこにでもこれを使用することができます:遊び、変数ファイル、またはJinja 2テンプレートで.

秘密マネージャ


別のクールなルックアッププラグインの秘密マネージャです.一言で言えば、それは同じ種類の機能を持っていますが、それはフェルトによってJSON形式を使用します.
ここでは、脚本の機能の簡単な例です
--------
- name: Extract something secrets from Secret Manager
  debug:
    msg: "{{ lookup('aws_secret', 'dev/some-secrets')}}"
上記のタスクは次の出力を生成します.
TASK [Extract something secrets from Secret Manager] 
ok: [some_server] => {
    "msg": {
        "dbname": "database",
        "engine": "mysql",
        "host": "127.0.0.1",
        "password": "password",
        "port": "3306",
        "username": "db_user"
    }
}
JSONをそのまま挿入したい場合は良いですが、JSON要素のみを取得したい場合は追加の構文解析が必要になります.

結論


あなたがCI/CDでansibleを使用しているならば、IAM役割でEC 2インスタンスでそれを持っているならば、あなたは全くそのインスタンスのどんな秘密も保つのを避けるようにします.
IAMロールは、少なくともSSMパラメータストア(+ KMS読み込みアクセスをキーを復号することができるアクセス)または秘密マネージャへの読み取りアクセスを許可する必要があります.
ここで説明したプラグインのドキュメントを見つけることができますaws_ssm そしてここaws_secret .
ルックアッププラグインについてhere .
あなたが記事が好きであるならば、あなたは時々私がAWS、Terraform、Ansibleと他のDevops関連のものについて私の発見をするところで、私について続くかもしれません