AWS Secrets Manager
データベースパスワードや API キーを安全に管理・自動ローテーションするサービス
何ができるか
AWS Secrets Manager は、データベースの認証情報、API キー、OAuth トークンなどの機密情報 (シークレット) を安全に保管・管理するサービスです。シークレットの暗号化保存、アクセス制御、監査ログの記録に加え、データベースパスワードの自動ローテーション機能を提供します。アプリケーションのコードにパスワードをハードコードする必要がなくなり、API 呼び出しでシークレットを取得する安全な仕組みを実現できます。
どのような場面で使うか
RDS や Aurora のデータベースパスワードの安全な保管と自動ローテーション、サードパーティ API の認証キーの一元管理、Lambda 関数やコンテナアプリケーションからのシークレット取得、マルチアカウント環境でのシークレット共有、コンプライアンス要件に基づくパスワードの定期変更の自動化など、機密情報の管理が必要な場面で利用されています。 この分野について体系的に学びたい方は、関連書籍 (Amazon) も参考になります。
身近な例え
銀行の貸金庫に例えるとわかりやすいでしょう。大切な書類 (パスワードや API キー) を自宅の引き出し (ソースコード) に入れておく代わりに、銀行の貸金庫 (Secrets Manager) に預けます。必要なときに身分証明 (IAM 認証) を提示して取り出し、定期的に鍵を交換 (ローテーション) してくれるサービスです。
Secrets Manager とは
AWS Secrets Manager は、アプリケーションで使用する機密情報を安全に管理するためのサービスです。従来、データベースパスワードや API キーは設定ファイルや環境変数に平文で保存されることが多く、セキュリティリスクの原因となっていました。Secrets Manager を使えば、シークレットは KMS で暗号化されて保存され、IAM ポリシーでアクセスを制御し、CloudTrail でアクセスログを記録できます。
自動ローテーション
Secrets Manager の最大の特徴は、シークレットの自動ローテーション機能です。RDS、Aurora、Redshift、DocumentDB のデータベースパスワードを、指定したスケジュールで自動的に変更できます。ローテーション時には Lambda 関数が実行され、新しいパスワードの生成、データベースへの適用、Secrets Manager への保存が自動的に行われます。アプリケーション側は常に Secrets Manager から最新のパスワードを取得するため、ローテーションによるダウンタイムは発生しません。
アプリケーションからの利用
アプリケーションからシークレットを取得するには、AWS SDK の GetSecretValue API を呼び出します。Python、Java、Node.js、Go など主要な言語の SDK が対応しています。Lambda 関数では環境変数の代わりに Secrets Manager からシークレットを取得するパターンが推奨されます。ECS や EKS のコンテナでは、タスク定義やポッド定義でシークレットの参照を設定でき、コンテナ起動時に自動的にシークレットが注入されます。キャッシュライブラリを使えば、API 呼び出しの回数を削減してレイテンシとコストを最適化できます。
料金体系
Secrets Manager の料金は、保管するシークレット数と API 呼び出し回数に基づきます。1 シークレットあたり月額 0.40 USD、API 呼び出しは 10,000 回あたり 0.05 USD です。30 日間の無料トライアルが提供されており、その間はシークレットの保管料金が無料です。Systems Manager Parameter Store の SecureString パラメータと比較すると料金は高めですが、自動ローテーション機能が標準で備わっている点が差別化要因です。
注意点
- シークレットの取得結果をアプリケーション側でキャッシュし、API 呼び出し回数を削減すること。AWS 提供のキャッシュライブラリの利用を推奨する
- 自動ローテーション設定時は、アプリケーションがシークレットの変更に追従できることを事前にテストすること。接続プールの再接続ロジックが正しく動作するか確認が必要
さらに詳しく知りたい方は、関連書籍 (Amazon) で理解を深められます。