Object Lock を使用して Amazon S3 バケット間でクロスアカウントレプリケーションを設定する方法を教えてください。
Object Lock が有効になっている Amazon Simple Storage Service (Amazon S3) バケットにクロスアカウントレプリケーションを設定したいと考えています。
解決策
送信先バケットで Object Lock を有効にする
Amazon S3 バケットにレプリケーションを設定するには、送信先バケットで Object Lock を有効にします。
注: S3 Object Lock を有効にした後に、バケットで Object Lock を無効化したり、バージョニングを一時停止したりすることはできません。
必要なアクセス許可を持つレプリケーション用の IAM ロールを作成する
ソースアカウントの IAM コンソールでレプリケーション用の AWS Identity and Access Management (IAM) ロールを作成し、Amazon S3 との信頼関係を付与します。
例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
IAM ロールに次のアクセス許可をアタッチします。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "SourceBucketPermissions", "Effect": "Allow", "Action": [ "s3:GetObjectRetention", "s3:GetObjectVersionTagging", "s3:GetObjectVersionAcl", "s3:ListBucket", "s3:GetObjectVersionForReplication", "s3:GetObjectLegalHold", "s3:GetReplicationConfiguration" ], "Resource": [ "arn:aws:s3:::SourceBucketName/*", "arn:aws:s3:::SourceBucketName" ] }, { "Sid": "DestinationBucketPermissions", "Effect": "Allow", "Action": [ "s3:ReplicateObject", "s3:ObjectOwnerOverrideToBucketOwner", "s3:GetObjectVersionTagging", "s3:ReplicateTags", "s3:ReplicateDelete" ], "Resource": [ "arn:aws:s3:::DestBucketName/*" ] } ] }
AWS Key Management Service (AWS KMS) キー (SSE-KMS) によるサーバー側の暗号化で S3 バケットを暗号化する場合は、S3 バケットキーを有効にするのがベストプラクティスです。これにより、AWS KMS サービスへのリクエスト数が減り、KMS の復号化または暗号化呼び出しの料金を最小限に抑えることができます。バケットキーで AWS KMS キーを使用する場合は、IAM ロールに次のアクセス許可をアタッチします。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "SourceBucketPermissions", "Effect": "Allow", "Action": [ "s3:GetObjectRetention", "s3:GetObjectVersionTagging", "s3:GetObjectVersionAcl", "s3:ListBucket", "s3:GetObjectVersionForReplication", "s3:GetObjectLegalHold", "s3:GetReplicationConfiguration" ], "Resource": [ "arn:aws:s3:::SourceBucketName/", "arn:aws:s3:::SourceBucketName" ] }, { "Sid": "DestinationBucketPermissions", "Effect": "Allow", "Action": [ "s3:ReplicateObject", "s3:ObjectOwnerOverrideToBucketOwner", "s3:GetObjectVersionTagging", "s3:ReplicateTags", "s3:ReplicateDelete" ], "Resource": [ "arn:aws:s3:::DestBucketName/" ] }, { "Action":[ "kms:Decrypt" ], "Effect":"Allow", "Condition":{ "StringLike":{ "kms:ViaService":"s3.us-east-1.amazonaws.com", "kms:EncryptionContext:aws:s3:arn":[ "arn:aws:s3:::SourceBucketName" ] } }, "Resource":[ "arn:aws:kms:us-east-1:SourceAccount:key/key-id" ] }, { "Action":[ "kms:Encrypt" ], "Effect":"Allow", "Condition":{ "StringLike":{ "kms:ViaService":"s3.us-east-1.amazonaws.com", "kms:EncryptionContext:aws:s3:arn":[ "arn:aws:s3:::DestBucketName" ] } }, "Resource":[ "arn:aws:kms:us-east-1:DestAccount:key/key-id" ] } ] }
注: SourceAccount をソースアカウントの ID に、DestAccount を送信先アカウントの ID に置き換えてください。SourceBucketName をソースバケット名に、DestBucketName を送信先バケット名に、key-id を実際のキー ID に置き換えてください。
バケットキーを使用しない場合は、アクション要素の SourceBucketName と DestBucketName の後に、次のようにキープレフィックスを追加します。
"arn:aws:s3:::SourceBucketName/key-prefix1"
注: key-prefix1 をご使用のキーに置き換えてください。
AWS KMS キーのアクセス許可を更新する
送信先アカウントの AWS KMS キーを設定し、ソースアカウント内の複製した IAM ロールへのアクセスを許可します。SSE-S3 暗号化は使用できますが、クロスアカウントレプリケーションでは、マネージド AWS KMS キー aws/S3 を使用できません。詳細については、「暗号化されたオブジェクトのレプリケート (SSE-S3、SSE-KMS、DSSE-KMS、SSE-C)」を参照してください。
例:
{ "Sid": "AllowS3ReplicationSourceRoleToUseTheKey", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789101:role/s3-replication-role" }, "Action": [ "kms:GenerateDataKey", "kms:Encrypt" ], "Resource": "*" }
注: キーポリシーの Resource にワイルドカード (*) を使用した場合、そのポリシーは、レプリケートした IAM ロールにのみ AWS KMS キーへのアクセス許可を付与します。このポリシーでは、レプリケートしたロールのアクセス許可を昇格することはできません。
次のバケットポリシーを送信先アカウントに追加する
作成したレプリケーション IAM ロールの Amazon リソースネーム (ARN) を Principal セクションに追加します。
例:
{ "Version": "2012-10-17", "Id": "PolicyForDestinationBucket", "Statement": [ { "Sid": "ReplicationPermissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::SourceBucket-account-ID:role/service-role/source-account-IAM-role" }, "Action": [ "s3:ReplicateDelete", "s3:ReplicateObject", "s3:ObjectOwnerOverrideToBucketOwner", "s3:GetBucketVersioning", "s3:PutBucketVersioning" ], "Resource": [ "arn:aws:s3:::DestBucketName/*", "arn:aws:s3:::DestBucketName" ] } ] }
S3 バケットの IAM ロールをレプリケートする
次の手順を実行します。
- Amazon S3 コンソールを開きます。
- [Buckets] (バケット) を選択してから、ソースバケットを選択します。
- [Management] (管理) タブをクリックします。
- [Replication rules] (レプリケーションルール) で [Create replication rule] (レプリケーションルールを作成) を選択します。
- ルールの名前を入力します。
- [Source bucket] (ソースバケット) でルールの範囲を選択し、レプリケーションを特定のオブジェクトプレフィックスに適用するか、バケットの内容全体に適用するかを決定します。
- [Destination] (送信先) セクションで [Specify a bucket in another account] (別のアカウントのバケットを指定) を選択し、送信先バケットの名前およびアカウント ID を入力します
- [IAM role] (IAM ロール) で [Choose from existing IAM roles] (既存の IAM ロールから選択) を選択します。
- [Create new role] (新しいロールを作成) を選択します。
または、
既存のレプリケーションルールがある場合は、IAM ロールの ARN を入力して作成済みのロールを使用します。 - AWS KMS で暗号化されたオブジェクトをレプリケートするには、次の手順を実行します。
[Encryption] (暗号化) で [Replicate objects encrypted with AWS Key Management Service (AWS KMS)] (AWS Key Management Service (AWS KMS) で暗号化されたオブジェクトを複製する) を選択します。
AWS KMS キーの ARN を入力します。 - (オプション) [Destination storage class] (送信先ストレージクラス) と [Additional replication options] (追加のレプリケーションオプション) を設定します。
- 構成を確認し、[Save] (保存) をクリックします。
- (オプション) 1 回限りの Amazon S3 バッチレプリケーションジョブを使用して既存のオブジェクトを複製します。
IAM ロールがアカウント間で複製されたことを確認する
レプリケーションルールをテストするには、ソースバケットに新しいオブジェクトを追加し、送信先バケットでレプリケートされたオブジェクトの有無を確認します。
関連情報
This article was reviewed and updated on 2026-04-14.
