AWS Secrets Manager のマルチリージョン戦略 - レプリケーションとクロスアカウント共有
マルチリージョンレプリケーションで DR 対策を実現し、クロスアカウントアクセスでセキュリティアカウントからの一元管理を構築する手法を紹介します。
マルチリージョンシークレット
Secrets Manager のマルチリージョンシークレットは、プライマリリージョンのシークレットを最大 4 つのレプリカリージョンに自動同期する機能です。各リージョンのレプリカは独立した ARN を持ちますが、同じシークレット名でアクセスできます。アプリケーションはリージョン固有のエンドポイントからシークレットを取得するため、プライマリリージョンの障害時もレプリカリージョンから継続してアクセスできます。レプリカはリードオンリーで、更新はプライマリリージョンでのみ実行されます。プライマリリージョンの障害時にはレプリカをプライマリに昇格させることで、書き込みも可能になります。
クロスアカウントアクセス
マルチアカウント環境では、中央のセキュリティアカウントでシークレットを管理し、ワークロードアカウントから参照する構成が推奨されます。シークレットにリソースベースポリシーを設定し、ワークロードアカウントの IAM ロールに GetSecretValue を許可します。ワークロードアカウント側では、IAM ロールにセキュリティアカウントのシークレット ARN へのアクセスを許可するポリシーをアタッチします。KMS キーのキーポリシーにもクロスアカウントの Decrypt 権限を設定する必要があります。この構成により、シークレットの管理を一元化しつつ、各アカウントのアプリケーションから安全にアクセスできます。
バージョニングとローテーション中の可用性
Secrets Manager はシークレットのバージョンをラベルで管理します。 AWSCURRENT は現在有効なバージョン、 AWSPREVIOUS は直前のバージョンを指します。ローテーション中は新しいパスワードが AWSPENDING ラベルで作成され、データベースのパスワード更新と接続テストが完了した後に AWSCURRENT に昇格します。交代ユーザー戦略では 2 つのデータベースユーザーを交互に使用し、一方のパスワードをローテーション中も他方で接続を維持します。アプリケーション側では SDK のキャッシュライブラリを使用し、キャッシュの TTL 内はローテーション前のパスワードを使い続け、 TTL 切れ時に新しいパスワードを取得する設計が推奨されます。 マルチリージョンの理解をさらに深めたい場合はAmazon の専門書も活用できます。
Secrets Manager の料金
Secrets Manager の料金はシークレット 1 件あたり月額約 0.40 ドルと、API コール 10,000 回あたり約 0.05 ドルです。マルチリージョンレプリケーションでは、レプリカリージョンのシークレットにも同額の月額料金が発生します。4 リージョンにレプリケーションすると、1 シークレットあたり月額約 2.00 ドル (0.40 × 5 リージョン) です。Parameter Store の SecureString (標準パラメータは無料) と比較するとコストは高いですが、自動ローテーションとマルチリージョンレプリケーションの価値を考慮して選択します。
まとめ
Secrets Manager のマルチリージョンレプリケーションとクロスアカウント共有により、エンタープライズ規模のシークレット管理を実現できます。DR 対策としてのレプリカ配置、セキュリティアカウントでの一元管理、バージョニングによるローテーション中の可用性確保を組み合わせることで、堅牢なシークレット管理基盤を構築できます。