S3 バッチレプリケーションを使用して S3 バケットから別のアカウントとリージョンにデータをコピーする
Appasaheb bagali、Lakshmikanth B D、Shubham Harsora、Purushotham G K、Suman Rajotia (Amazon Web Services)
概要
このパターンでは、S3 バケットを設定した後、Amazon Simple Storage Service (Amazon S3) バッチレプリケーションを使用して、手動操作なしで S3 バケットの内容を別の S3 バケットに自動的にコピーする方法について説明します。レプリケート元およびレプリケート先バケットは、同一の、または異なる AWS アカウントまたはリージョンに設定できます。
S3 バッチレプリケーションを使用すると、レプリケーション設定が有効化される前に存在していた、以前にレプリケートされた、およびレプリケーションに失敗した Amazon S3 オブジェクトをレプリケートできます。このメソッドでは、S3 バッチオペレーションジョブを使用します。このジョブが終了すると、完了レポートが表示されます。
S3 バッチレプリケーションは、レプリケート元バケットからレプリケート先バケットへの、新しいオブジェクトの継続的かつ自動的な移行を必要とするシナリオで使用できます。1 回限りの移行では、代わりに AWS Command Line Interface (AWS CLI) を使用できます。パターン「AWS CLI を使用して S3 バケットから別のアカウントとリージョンにデータをコピーする」を参照してください。
前提条件と制限
レプリケート元 AWS アカウント。
レプリケート先 AWS アカウント。
少数のオブジェクト (ファイルまたはフォルダ) を持つレプリケート元アカウントの S3 バケット。
レプリケート先アカウントの 1 つ以上の S3 バケット。
レプリケート元とレプリケート先の両方のバケットで S3 バージョニングを有効化。
レプリケート元とレプリケート先の両方のアカウントに IAM ポリシー、IAM ロール、および S3 バケットポリシーを作成するための AWS Identity and Access Management (IAM) アクセス許可。
S3 バッチレプリケーションジョブがアクティブな間は、Amazon S3 ライフサイクルルールを無効化。こうすることで、レプリケート元バケットとレプリケート先バケットの間で等価性が確保されます。そうでないと、レプリケート先バケットがレプリケート元バケットの完全なレプリカではなくなってしまう可能性があります。
アーキテクチャ
AWS サービス
ベストプラクティス
次の AWS re:Invent 2022 の動画では、規制コンプライアンス、データ保護、アプリケーションパフォーマンスの向上を目的とした、Amazon S3 レプリケーションを使用するためのベストプラクティスについて説明します。
https://www.youtube-nocookie.com/embed/hrJEbISBL04?controls=0
エピック
| タスク | 説明 | 必要なスキル |
|---|
クロスアカウントレプリケーション用の IAM ポリシーを作成する | AWS レプリケート元アカウントで、以下を行います。 [IAM コンソール] を開きます。 新規 IAM ポリシーを作成します。 [ポリシーエディタ] セクションで [JSON] を選択して、以下のコードを貼り付けます。 {
"Version": "2012-10-17",
"Statement": [
{
"Sid": "GetSourceBucketConfiguration",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation",
"s3:GetBucketAcl",
"s3:GetReplicationConfiguration",
"s3:GetObjectVersionForReplication",
"s3:GetObjectVersionAcl",
"s3:GetObjectVersionTagging"
],
"Resource": [
"arn:aws:s3:::source-bucket-name",
"arn:aws:s3:::source-bucket-name/*"
]
},
{
"Sid": "ReplicateToDestinationBuckets",
"Effect": "Allow",
"Action": [
"s3:List*",
"s3:*Object",
"s3:ReplicateObject",
"s3:ReplicateDelete",
"s3:ReplicateTags"
],
"Resource": [
"arn:aws:s3:::destination-bucket-name*",
"arn:aws:s3:::destination-bucket-name/*"
]
},
{
"Sid": "PermissionToOverrideBucketOwner",
"Effect": "Allow",
"Action": [
"s3:ObjectOwnerOverrideToBucketOwner"
],
"Resource": [
"arn:aws:s3:::destination-bucket-name*",
"arn:aws:s3:::destination-bucket-name/*"
]
}
]
}
このポリシーは、次の 3 つのステートメントで構成されます。 GetSourceBucketConfiguration は、レプリケート元バケットでレプリケーションするための、レプリケーション設定とオブジェクトバージョンへのアクセスを提供します。
ReplicateToDestinationBuckets は、レプリケート先バケットにレプリケートするためのアクセスを提供します。この配列に、複数のレプリケート先バケットを指定できます。 PermissionToOverrideBucketOwner は、レプリケート先バケットが、レプリケート元アカウントからレプリケートされたレプリケート先アカウントのオブジェクトを所有できるように、ObjectOwnerOverrideToBucketOwner へのアクセスを提供します。
[次へ] を選択し、cross-account-bucket-replication-policy などのポリシー名を指定して、[ポリシーの作成] を選択します。
詳細については、IAM ドキュメントの「IAM ポリシーの作成」を参照してください。 | クラウド管理者、AWS 管理者 |
クロスアカウントレプリケーション用の IAM ロールを作成する | AWS レプリケート元アカウントで、以下を行います。 IAM コンソールで、以下の情報を含む IAM ロールを作成します。 [信頼できるエンティティタイプ] で [AWS サービス] を選択します。 サービスとして [S3] を選択します。 ユースケースでは、[S3 バッチオペレーション] を選択します。 前のステップで作成したポリシーを選択します。
cross-account-bucket-replication-role などのロール名を指定し、[ロールの作成] を選択します。
詳細については、IAM ドキュメントの「IAM ロールの作成」を参照してください。 | クラウド管理者、AWS 管理者 |
| タスク | 説明 | 必要なスキル |
|---|
レプリケート元アカウントのレプリケート元バケットに対してレプリケーションルールを作成する | AWS レプリケート元アカウントで、以下を行います。 Amazon S3 コンソールを開きます。 レプリケート元バケットに移動し、[管理] タブを選択します。 次の設定でレプリケーションルールを作成します。 s3-replication-rule などのルール名を指定します。
[ステータス] で [有効] を選択します。 ルールのスコープとして、[バケット内のすべてのオブジェクトに適用] を選択します。 [レプリケート先] で、[別のアカウントのバケットを指定] を選択し、レプリケート先の AWS アカウント番号とバケット名を入力します。 オブジェクトの所有権を、レプリケート先バケットの所有者に変更するオプションを選択します。 [IAM ロール] で、前の手順でレプリケート元アカウントに作成したロールを選択します。 [追加のレプリケーションオプション] で、使用可能なすべてのオプションを選択します。これで、コンテンツのすばやいレプリケート、Amazon CloudWatch メトリクスを通じたレプリケーション進行状況のモニタリング、削除マーカーのレプリケート、メタデータの変更のレプリケートを行えます。 [保存] を選択します。
複数のレプリケート先バケットがある場合は、追加のレプリケーションルールを作成します。
詳細については、Amazon S3 ドキュメントの「異なるアカウントでのバケットのレプリケーション設定」を参照してください。 | AWS 管理者、クラウド管理者 |
| タスク | 説明 | 必要なスキル |
|---|
バケットポリシーをレプリケート先バケットに適用する | このステップは、AWS レプリケート先アカウントで、レプリケート先バケットごとに個別に実行する必要があります。 AWS レプリケート先アカウントで、以下を行います。 Amazon S3 コンソールを開き、レプリケート先バケットに移動して [アクセス許可] タブを選択します。 次の JSON コードを指定してバケットポリシーを編集し、ポリシーを保存します。
{
"Version": "2012-10-17",
"Id": "PolicyForDestinationBucket",
"Statement": [
{
"Sid": "Permissions on objects and buckets",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::SourceAWSAccountNumber:role/IAM-Role-created-in-step1-in-source-account"
},
"Action": [
"s3:List*",
"s3:GetBucketVersioning",
"s3:PutBucketVersioning",
"s3:ReplicateDelete",
"s3:ReplicateObject"
],
"Resource": [
"arn:aws:s3:::destination-bucket",
"arn:aws:s3:::destination-bucket/*"
]
},
{
"Sid": "Permission to override bucket owner",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::SourceAWSAccountNumber:role/IAM-Role-created-in-step1-in-source-account"
},
"Action": "s3:ObjectOwnerOverrideToBucketOwner",
"Resource": "arn:aws:s3:::destination-bucket/*"
}
]
}
このポリシーは、次の 2 つのステートメントで構成されます。 Permissions on objects and buckets は、レプリケート先バケットがレプリケート元アカウントで定義されたロールに基づき、コンテンツをレプリケートできることを示します。このロールは、レプリケート元バケットへのアクセス許可を提供します。
Permission to override bucket owner は、レプリケート先バケットに、レプリケート元アカウントの所有権を上書きするアクセス許可があることを示します。
| AWS 管理者、AWS システム管理者、クラウド管理者 |
| タスク | 説明 | 必要なスキル |
|---|
レプリケーションが正しく機能することを確認する | オブジェクトをレプリケート元バケットに追加します。 新しいオブジェクトが、レプリケート先アカウントの S3 バケットに表示されることを確認します。 CloudWatch メトリクスの表示 レプリケート元バケットで、[メトリクス] タブを選択します。 [レプリケーションメトリクス] セクションで、レプリケーションルールを選択します。 [グラフを表示] を選択します。グラフには、レプリケーションが保留中のオペレーション、レプリケーションのレイテンシー、レプリケーションが保留中のバイト数が表示され、レプリケーションの状態を確認できます。
詳細については、Amazon S3 ドキュメントの「Amazon CloudWatch によるメトリクスのモニタリング」を参照してください。 | AWS 管理者、クラウド管理者 |
関連リソース