スキップしてコンテンツを表示

アカウント間での Amazon S3 レプリケーションに関する問題をトラブルシューティングする方法を教えてください。

所要時間2分
0

ある 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-bucketamzn-s3-demo-destination-bucket は、実際のソースバケット名と宛先バケット名に置き換えます。

送信元アカウントと宛先アカウントのサービスコントロールポリシーを確認する

ソースアカウントと宛先アカウントのサービスコントロールポリシー (SCP)Deny ステートメントが含まれていないことを確認します。

関連情報

メトリクス、イベント通知、ステータスでレプリケーションを監視する

暗号化されたオブジェクトのレプリケーション (SSE-S3、SSE-KMS、DSSE-KMS、SSE-C)

バケット間のレプリケーションを設定したにもかかわらず、Amazon S3 オブジェクトがレプリケートされない理由を知りたいです

AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ