シークレットマネージャーの検証
目次
学習~シークレットマネージャーを使うメリット~
アプリ内に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