本ページは、AWS に関する個人の勉強および勉強会で使用することを目的に、AWS ドキュメントなどを参照し作成しておりますが、記載の誤り等が含まれる場合がございます。
最新の情報については、AWS 公式ドキュメントをご参照ください。
データベース認証情報、API キー、その他のシークレットのライフサイクルを通しての管理、取得、ローテーションできるサービスです。
【AWS Black Belt Online Seminar】AWS Secrets Manager(YouTube)(0:34:51)
同様のサービスに Systems Manager の Parameter Store というものがあり、どちらを選択するか迷うことがあります。
いくつかの項目で比較したものは下記のとおりです。
項目 | Parameter Store | Secrets Manager |
料金 | 無料 👑 | 有料 |
可用性 | × | マルチリージョンレプリケーション 👑 |
暗号化 | KMS | KMS |
自動ローテーション | × | 有 👑 |
AWS サービス連携 | 多数 | 管理できるシークレットのタイプ(後述)参照 |
バージョニング | ○ | ○ |
監査・監視 | CloudTrail, CloudWatch | CloudTrail, CloudWatch |
この表で比較しても「結局どっち?」となるかもしれません。
個人的なユースケースとしては次のとおりだと考えており、「自動ローテーションが必要かどうか」が最初の判断基準だと考えてもよさそうです。
基本的にデータベースの接続情報が選択できます。
「その他のシークレットタイプ」を選択することでデータベース接続情報以外のデータをシークレットとして登録することも可能です。その場合、SSM の Parameter Store と比較検討したほうがよいでしょう。
名前に"/"を使うことで、疑似的に階層化の管理が可能です。
階層化を行うことで、次のように project-x
配下のシークレットに対して一括したアクセス制御を行うことができます。
"Resource": "arn:aws:secretsmanager:ap-northeast-1:123456789012:secret:project-x/*"
作成するシークレットは KMS を使った暗号化が可能です。デフォルトでは、aws/secretsmanager
という AWS マネージド型キーが使用できます。
このほかに、顧客管理のキー(CMK)が指定できます。
自動的にパスワードを変更するローテーションを設定することができます。
設定方法は簡単で、自動ローテーションを ON
にして、スケジュールを設定するだけで、自動ローテーションを構成できます。
自動ローテーションを行う AWS Lambda 関数が CloudFormation によって自動デプロイされることで実現されています。
シークレットは、指定した AWS リージョンにのみ作成されますが、 レプリケーションすることで複数のリージョンで同じ名前のシークレットを保持することが可能です。
レプリケーションを有効にした場合、レプリケーション元をプライマリシークレット、レプリケーション先をレプリカシークレットと呼び、自動ローテーションが有効な場合は、レプリカシークレットのほうにも反映されます。
ただし、次の点で注意が必要です。
「AWS CloudTrail による AWS Secrets Manager イベントのログ記録」や「Amazon AWS Secrets Manager でのモニタリング CloudWatch」 にも記載されているように API 実行の記録やメトリクスを把握することができます。
シークレットを削除する場合、最短で 7 日間の猶予期間後に削除されるようにスケジュールされます。猶予期間の間はシークレットが利用不可になり、この間は料金が発生しません。
この猶予期間の間に、「Amazon CloudWatch を使用して、削除予定の AWS Secrets Manager シークレットをモニタリングする」にあるようにモニタリングすることで、利用有無を確認することができます。
猶予期間の間に削除をキャンセルすることで、シークレットを復元し利用可能に戻すことができます。
猶予期間が過ぎた場合は、復元することが不可能になります。