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 (標準パラメータは無料) と比較するとコストは高いですが、自動ローテーションとマルチリージョンレプリケーションの価値を考慮して選択します。
レプリカの仕組みと DR
Secrets Manager は、シークレットを複数のリージョンに複製できます。主となるリージョンのシークレットを更新すると、その内容が複製先のリージョンへ自動的に反映されます。各リージョンのアプリケーションは、自分の近くのリージョンからシークレットを読み取れるため、リージョンをまたぐアクセスの遅延を避けられます。災害対策の観点では、主リージョンが利用できなくなった場合に、複製先のリージョンへ切り替えて運用を継続できます。複数リージョンに同じ認証情報を確実に行き渡らせる仕組みが、可用性の高いシステムの基盤になります。
レプリケーション時の暗号化と鍵管理
シークレットはリージョンごとに暗号化されるため、複製を作る際は、複製先リージョンで使う暗号鍵を指定します。リージョンをまたいで同じ鍵は使えないため、各リージョンに対応する鍵を用意し、それぞれで復号できるよう権限を設計します。これにより、各リージョンのアプリケーションが、そのリージョンの鍵を使って安全にシークレットを取得できます。鍵の管理がリージョンごとに分かれることで、リージョン単位でのアクセス制御も明確になります。複製を設計する際は、データ本体だけでなく、それを復号するための鍵の配置と権限まで合わせて計画することが重要です。
マルチリージョンアプリの設計
複数のリージョンでサービスを展開するアプリケーションでは、各リージョンが自律的に動けることが重要です。シークレットを各リージョンに複製しておけば、アプリケーションは外部のリージョンに依存せず、ローカルで認証情報を取得して動作できます。これにより、リージョン間の通信障害があっても、各リージョンが独立して機能を維持できます。利用者に近いリージョンで処理を完結させることで、応答も速くなります。グローバルに展開するサービスでは、シークレットのような共通の構成要素を各リージョンへ行き渡らせる設計が、可用性と性能の両立につながります。
運用上の注意
マルチリージョンのシークレット運用には、いくつか注意点があります。複製には反映までにわずかな時間差が生じるため、更新直後に複製先で古い値が読まれる可能性を考慮します。ローテーションで認証情報を更新する場合、その変更が各リージョンへ確実に伝播することを確認します。複製を作るとリージョンごとに保管され、その分の費用が発生するため、本当に複数リージョンで必要なシークレットに絞ります。不要になった複製は整理します。複製の整合性、ローテーションの伝播、コストの三点を意識して運用することが、マルチリージョン構成を安定させる鍵になります。
まとめ
Secrets Manager のマルチリージョンレプリケーションとクロスアカウント共有により、エンタープライズ規模のシークレット管理を実現できます。DR 対策としてのレプリカ配置、セキュリティアカウントでの一元管理、バージョニングによるローテーション中の可用性確保を組み合わせることで、堅牢なシークレット管理基盤を構築できます。