アカウント間での Amazon S3 レプリケーションに関する問題をトラブルシューティングする方法を教えてください。
ある AWS アカウントにあるソース Amazon Simple Storage Service (Amazon S3) バケットのオブジェクトが、別の AWS アカウントにある宛先バケットにレプリケートされません。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
レプリケーション IAM ロールに関連付けられている IAM ポリシーを確認する
Amazon S3 レプリケーションの障害を解決するには、正しいアクセス許可を付与する必要があります。
ソースバケットオブジェクトにタグが含まれている場合は、レプリケーション AWS Identity and Access Management (IAM) ロールとレプリケート先バケットのポリシーで s3:ReplicateTags アクションが許可されていることを確認します。
レプリケーションルールが [オブジェクト所有者を宛先バケットの所有者に変更] に設定されている場合、IAM ロールには s3:ObjectOwnerOverrideToBucketOwner アクセス許可が必要です。
S3 レプリケーションルールは、必要なアクセス許可を持つレプリケーション IAM ロールを自動的に作成します。
レプリケーション IAM ロールの IAM ポリシーの例
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetReplicationConfiguration", "s3:ListBucket" ], "Resource":[ "arn:aws:s3:::amzn-s3-demo-source-bucket" ] }, { "Effect":"Allow", "Action":[ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging" ], "Resource":[ "arn:aws:s3:::amzn-s3-demo-source-bucket/" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ReplicateTags", "s3:ObjectOwnerOverrideToBucketOwner" ], "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/" } ] }
IAM ロールを手動で作成する場合は、信頼ポリシーを作成し、Amazon S3 がロールを引き受けられるようにします。次に、IAM コンソールまたは AWS CLI を使用してポリシーをアタッチします。
信頼ポリシーの例
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"s3.amazonaws.com" }, "Action":"sts:AssumeRole" } ] }
宛先バケットポリシーに必要なアクセス許可を追加する
宛先バケットポリシーで、ソースアカウントのレプリケーション IAM ロールがオブジェクトをレプリケートできることを確認してください。
バケットポリシーに次のアクセス許可を追加します。
- s3:ReplicateDelete
- s3:ReplicateObject
- s3:ReplicateTags
- s3:ObjectOwnerOverrideToBucketOwner
宛先バケットポリシーの例
{ "Version":"2012-10-17", "Id":"PolicyForDestinationBucket", "Statement":[ { "Sid":"Permissions on objects", "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::source-bucket-account-ID:role/service-role/source-account-IAM-role" }, "Action":[ "s3:ReplicateDelete", "s3:ReplicateObject", "s3:ReplicateTags", "s3:ObjectOwnerOverrideToBucketOwner" ], "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/" } ] }
AWS KMS キーのアクセス許可を指定する
AWS Key Management Service (AWS KMS) キー (SSE-KMS) でサーバー側の暗号化を使用するには、レプリケーションルールで宛先アカウントの AWS KMS キーを指定する必要があります。また、AWS KMS キーポリシーでは、レプリケーション IAM ロールが暗号化と復号にキーを使用することを許可する必要があります。詳細については、「ローカルアカウントにキーポリシーステートメントを追加する」を参照してください。
SSE-KMS のレプリケーション IAM ロールポリシー例
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "SourceKmsKeyArn" ] }, { "Effect": "Allow", "Action": [ "kms:GenerateDataKey", "kms:Encrypt" ], "Resource": [ "DestinationKmsKeyArn" ] } ] }
SSE-KMS の宛先バケットポリシーの例
{ "Sid": "Allow an external account to use this KMS key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:role/ReplicationIAMRole" }, "Action": [ "kms:Encrypt" ], "Resource": "*" }
ソースまたは宛先の AWS KMS キーポリシーで、暗号化コンテキストに基づいてアクセス許可を付与する場合は、Amazon S3 バケットキーを使用しているかどうかを確認してください。
Amazon S3 バケットキーを使用している場合、暗号化コンテキストはバケットレベルのリソースを対象とする必要があります。
ポリシーの例
"kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3:::amzn-s3-demo-source-bucket" ] "kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3:::amzn-s3-demo-destination-bucket" ]
Amazon S3 バケットキーを使用していない場合、暗号化コンテキストはオブジェクトレベルのリソースを対象とする必要があります。
ポリシーの例
"kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3:::amzn-s3-demo-source-bucket/*" ] "kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3:::amzn-s3-demo-destination-bucket/*" ]
注: 上記のポリシー例で、amzn-s3-demo-source-bucket と amzn-s3-demo-destination-bucket は、実際のソースバケット名と宛先バケット名に置き換えます。
送信元アカウントと宛先アカウントのサービスコントロールポリシーを確認する
ソースアカウントと宛先アカウントのサービスコントロールポリシー (SCP) に Deny ステートメントが含まれていないことを確認します。
関連情報
メトリクス、イベント通知、ステータスでレプリケーションを監視する
暗号化されたオブジェクトのレプリケーション (SSE-S3、SSE-KMS、DSSE-KMS、SSE-C)
バケット間のレプリケーションを設定したにもかかわらず、Amazon S3 オブジェクトがレプリケートされない理由を知りたいです
