AWS Secrets Manager のマルチリージョン戦略 - レプリケーションとクロスアカウント共有
Secrets Manager のマルチリージョンレプリケーション、クロスアカウントアクセス、Parameter Store との統合パターンを解説します。
マルチリージョンシークレット
Secrets Manager のマルチリージョンシークレットは、プライマリリージョンのシークレットを最大 4 つのレプリカリージョンに自動同期する機能です。各リージョンのレプリカは独立した ARN を持ちますが、同じシークレット名でアクセスできます。アプリケーションはリージョン固有のエンドポイントからシークレットを取得するため、プライマリリージョンの障害時もレプリカリージョンから継続してアクセスできます。レプリカはリードオンリーで、更新はプライマリリージョンでのみ実行されます。プライマリリージョンの障害時にはレプリカをプライマリに昇格させることで、書き込みも可能になります。
この分野について体系的に学びたい方は、関連書籍 (Amazon) も参考になります。
クロスアカウントアクセス
マルチアカウント環境では、中央のセキュリティアカウントでシークレットを管理し、ワークロードアカウントから参照する構成が推奨されます。シークレットにリソースベースポリシーを設定し、ワークロードアカウントの IAM ロールに GetSecretValue を許可します。ワークロードアカウント側では、IAM ロールにセキュリティアカウントのシークレット ARN へのアクセスを許可するポリシーをアタッチします。KMS キーのキーポリシーにもクロスアカウントの Decrypt 権限を設定する必要があります。この構成により、シークレットの管理を一元化しつつ、各アカウントのアプリケーションから安全にアクセスできます。
バージョニングとローテーション中の可用性
Secrets Manager はシークレットのバージョンをラベルで管理します。AWSCURRENT は現在有効なバージョン、AWSPREVIOUS は直前のバージョンを指します。ローテーション中は新しいパスワードが AWSPENDING ラベルで作成され、データベースのパスワード更新と接続テストが完了した後に AWSCURRENT に昇格します。交代ユーザー戦略では 2 つのデータベースユーザーを交互に使用し、一方のパスワードをローテーション中も他方で接続を維持します。アプリケーション側では SDK のキャッシュライブラリを使用し、キャッシュの TTL 内はローテーション前のパスワードを使い続け、TTL 切れ時に新しいパスワードを取得する設計が推奨されます。
さらに詳しく知りたい方は、関連書籍 (Amazon) で理解を深められます。
まとめ
Secrets Manager のマルチリージョンレプリケーションとクロスアカウント共有により、エンタープライズ規模のシークレット管理を実現できます。DR 対策としてのレプリカ配置、セキュリティアカウントでの一元管理、バージョニングによるローテーション中の可用性確保を組み合わせることで、堅牢なシークレット管理基盤を構築できます。
AWS の優位点
- マルチリージョンシークレットで最大 4 リージョンにレプリカを自動同期し、DR 時にリージョン切り替えなしでシークレットにアクセスできる
- リソースベースポリシーでクロスアカウントアクセスを設定し、中央セキュリティアカウントからワークロードアカウントにシークレットを共有できる
- ECS タスク定義の secrets フィールドでコンテナ起動時にシークレットを環境変数として自動注入できる
- CloudFormation の動的参照でテンプレート内にシークレットの値を直接記述せずに参照できる
- シークレットのバージョニングで AWSCURRENT と AWSPREVIOUS のラベルを管理し、ローテーション中のダウンタイムを防止できる