CloudFormationの学習を進めていく途中で、こちらのベストプラクティスが目に留まりました。
AWS CloudFormation テンプレートに機密情報を埋め込むのではなく、スタックテンプレートで 動的なリファレンス を使用することをお勧めします。
動的なリファレンスにより、AWS Systems Manager パラメータストアや AWS Secrets Manager などの他のサービスで保存、管理されている外部値を参照するためのシンプルで強力な方法が提供されます。
ん?
ていうことは、見られちゃ困るものは↑のサービス使って隠してねって事ですね!
という事で今回はSecrets Managerの簡単な使い方を調べてまとめてみました。
シークレットキー | 値(機密情報) |
---|---|
username | hoge |
password | fuga |
画像の右側は秘密にしておきたい情報を、左側はそれがわかるような名前を入れます。
##④シークレットの名前と説明を入れる
シークレットの名前は分かりやすいように入れておきましょう♪
説明やタグは必要に応じて('ω')ノ
次を押してください。
##⑤自動ローテーションの設定
ここは無効のままで結構です♬
保存を押して、はい!
これで設定の方は終わりです。
次にしっかり保存されているか確認してみます。
「RDSSecret」をクリックすると、
↓ 設定した一覧が表示されます。
下にスクロールしていくと「シークレットの値」という箇所があるので、右の「シークレットの値を取得する」をクリック。
すると、
ほい!
先ほど設定したシークレットキーと値がしっかりと反映されてますね('ω')ノ
ここからが重要です。
今回CloudFormationで必要になるものが、
- シークレットの名前
- シークレットキー
この二つです。
⑥のシークレットの名前と、上画像のシークレットキーを覚えておきましょう。
##⑦今回使うリファレンスパターン
公式で紹介されているリファレンスパターンを貼っておきます。
{{resolve:secretsmanager:secret-id:SecretString:json-key:version-stage:version-id}}
ほッほじゃ?
何が書いてあるのかよくわかりません( ;∀;)
一つ一つ日本語っぽくすると↓のようになります(多分💦
今回は右のversion-stage
とversion-id
は使わないので消してOKです。
すると↓のような形になります。
{{resolve:secretsmanager:secret-id:SecretString:json-key}}
そして上記で覚えておいた「シークレットの名前」と「シークレットキー」を入れると……
はい!ほぼ完成です!
最後に、RDSやEC2等で出来立てほやほやの動的リファレンスをこんな感じで貼り付ければ無事、完成です(´▽`)
MasterUsername: '{{resolve:secretsmanager:MyRDSSecret:SecretString:username}}'
MasterUserPassword: '{{resolve:secretsmanager:MyRDSSecret:SecretString:password}}'
お疲れさまでした<(_ _)>