シークレットマネージャーの検証

学習~シークレットマネージャーを使うメリット~

アプリ内にDB認証情報を入れておくと、更新するとき大変だったり、セキュリティ的にも問題あります。
それをAPIでシークレットマネージャーからとってくるようにすることで解決するってことのようです。
テスト用RDSを作成し、シークレットマネージャーからシークレットを手動ローテーションさせてみるところまでです。
※あくまでAWSドキュメントに従い、シークレットマネージャーを軽く触ってみるというのが目的です。
テストしているだけです。本番で使用する際にはさらに調査、検証する必要があります。
https://docs.aws.amazon.com/ja_jp/secretsmanager/latest/userguide/tutorials_db-rotate.html#tut-db-rotate-step2

作業記録

テスト用RDS(MySQL)作成

項目設定
エンジンのタイプMySQL
テンプレート無償利用枠
マスターユーザー名admin
マスターパスワードdbpasswd1
パスワードを確認dbpasswd1
パブリックアクセス可能パブリックアクセス可能
自動バックアップの有効化[ ]
セキュリティグループMYSQL/Aurora TCP 3306 0.0.0.0/0

上記以外はデフォルトとします。

シークレットの作成

項目設定
シークレットの種類を選択[●] RDSデータベースの認証情報
ユーザー名admin
パスワードdbpasswd1
暗号化キーを選択してくださいDefaultEncryptionKey
このシークレットがアクセスするRDSデータベースを選択してくださいdatabase-1
シークレットの名前prod/AppBeta/Mysql
オプション の説明[ ]
タグ[ ]
リソースに対するアクセス許可 (オプション){
"Version" : "2012-10-17",
"Statement" : [ {
"Effect" : "Allow",
"Principal" : {
"AWS" : "arn:aws:iam::************:user/Administrator"
},
"Action" : "secretsmanager:*",
"Resource" : "*"
} ]
}
自動ローテーションを設定する[●]自動ローテーションを無効にする

arn:aws:iam:::user/Administratorの箇所は必要権限のついたご自分のIAMユーザarnに置き換えてください。

項目設定
ローテーション設定を編集する[●]自動ローテーションを有効にする
ローテーション間隔を選択30日
[●]ローテーションを実行するための新しいLambda関数を作成します。
新しいAWS Lambda関数名mysql-rotation-lambda
ローテーションの実行に使用するシークレットを選択してください[●] このシークレットを使う

シークレットローテーション

「すぐにシークレットをローテーションさせる」をクリックすればDBのPWが変更されます。
mysqlコマンドなのでログイン確認してみてください。
旧PWでログインできないことが確認できるでしょう。

エラー~a previous rotation isn’t complete. that rotation will be reattempted.~

a previous rotation isn’t complete. that rotation will be reattempted.
このアラートが出たら確認するポイントがいくつかあります。
・RDSが作成したばかりである
・RDSのパブリックアクセス可能が許可されていない
・RDSのセキュリティグループ
・このシークレットを交換する権限を持つAWS Lambda関数です。 の部分が「-」になってしまっている → ローテーションを実行するための新しいLambda関数を作成します。でLambda関数を新規に作り直してみてください。

メモ:

aws secretsmanager get-secret-value --region ap-northeast-1 --secret-id prod/AppBeta/Mysql