복제 문제 해결 - Amazon Simple Storage Service

복제 문제 해결

이 섹션에는 Amazon S3 복제에 대한 문제 해결 팁과 S3 배치 복제 오류에 대한 정보가 나와 있습니다.

S3 복제 문제 해결 팁

복제를 구성한 후 대상 버킷에 객체 복제본이 표시되지 않는다면 다음 문제 해결 도움말을 사용하여 문제를 해결합니다.

  • 대다수의 객체는 15분 이내에 복제됩니다. Amazon S3가 객체를 복제하는 데 걸리는 시간은 소스 및 대상 리전 쌍, 객체 크기를 비롯한 다양한 요소에 따라 달라집니다. 큰 객체의 경우 복제에 몇 시간이 걸릴 수도 있습니다. 복제 시간에 대한 가시성을 확보하려면 S3 Replication Time Control(S3 RTC)을 사용하면 됩니다.

    복제하는 객체가 크다면 얼마간 기다렸다 대상에 해당 객체가 나타나는지 확인하세요. 또한 소스 객체의 복제 상태를 확인할 수도 있습니다. 객체 복제 상태가 PENDING이면 Amazon S3가 복제를 완료하지 않은 것입니다. 객체 복제 상태가 FAILED인 경우 소스 버킷에서 설정된 복제 구성을 확인하세요. 또한 복제 중에 실패에 대한 정보를 받으려면 Amazon S3 이벤트 알림 복제를 설정하여 실패 이벤트를 받을 수 있습니다. 자세한 내용은 Amazon S3 이벤트 알림을 사용하여 복제 실패 이벤트 수신을 참조하세요.

  • HeadObject API 작업을 호출하여 객체의 복제 상태를 확인할 수 있습니다. HeadObject API 작업은 객체의 PENDING, COMPLETED 또는 FAILED 복제 상태를 반환합니다. HeadObject API 호출에 대한 응답으로 x-amz-replication-status 요소에 복제 상태가 반환됩니다.

    참고

    HeadObject를 실행하려면 요청하는 객체에 대한 읽기 액세스 권한이 있어야 합니다. HEAD 요청에는 GET 작업 수행을 제외하고 GET 요청과 동일한 옵션이 있습니다. 예를 들어, AWS Command Line Interface(AWS CLI)를 사용하여 HeadObject 요청을 실행하려면 다음 명령을 실행하면 됩니다. user input placeholders를 사용자의 정보로 대체합니다.

    aws s3api head-object --bucket my-bucket --key index.html
  • HeadObjectFAILED 복제 상태와 함께 객체를 반환한 후 S3 배치 복제를 사용하여 실패한 객체를 복제할 수 있습니다. 또는 실패한 객체를 소스 버킷에 다시 업로드해도 됩니다. 이렇게 하면 새 객체에 대한 복제가 시작됩니다.

  • 원본 버킷의 복제 구성에서 다음을 확인합니다.

    • 대상 버킷의 Amazon 리소스 이름(ARN)이 정확합니다.

    • 키 이름 접두사가 정확합니다. 예를 들어, 접두사 Tax로 객체 복제를 구성한 경우라면 Tax/document1 또는 Tax/document2와 같이 키 이름이 포함된 객체만 복제됩니다. 키 이름이 document3인 객체는 복제되지 않습니다.

    • 복제 규칙의 상태는 Enabled입니다.

  • 복제 구성의 어떤 버킷에서도 버전 관리가 일시 중단되지 않았는지 확인합니다. 소스 버킷과 대상 버킷 모두에서 버전 관리를 활성화해야 합니다.

  • 복제 규칙이 대상 버킷 소유자로 객체 소유권 변경으로 설정된 경우 복제에 사용되는 AWS Identity and Access Management(IAM) 역할에 s3:ObjectOwnerOverrideToBucketOwner 권한이 있어야 합니다. 이 권한은 리소스(이 경우 대상 버킷)에 부여됩니다. 예를 들어, 다음 Resource 명령문은 대상 버킷에 이 권한을 부여하는 방법을 보여줍니다.

    { "Effect":"Allow", "Action":[ "s3:ObjectOwnerOverrideToBucketOwner" ], "Resource":"arn:aws:s3:::DestinationBucket/*" }
  • 다른 계정이 대상 버킷을 소유한 경우, 대상 버킷 소유자가 대상 버킷 정책을 통해 소스 버킷 소유자에게 s3:ObjectOwnerOverrideToBucketOwner 권한도 부여해야 합니다. 다음 예시 버킷 정책을 사용하려면 user input placeholders를 실제 정보로 대체하세요.

    { "Version": "2012-10-17", "Id": "Policy1644945280205", "Statement": [ { "Sid": "Stmt1644945277847", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789101:role/s3-replication-role" }, "Action": [ "s3:ReplicateObject", "s3:ReplicateTags", "s3:ObjectOwnerOverrideToBucketOwner" ], "Resource": "arn:aws:s3:::DestinationBucket/*" } ] }
    참고

    대상 버킷의 객체 소유권 설정에 버킷 소유자 적용이 포함된 경우 복제 규칙에서 객체 소유권을 대상 버킷 소유자로 변경으로 설정을 업데이트할 필요가 없습니다. 객체 소유권 변경은 기본적으로 발생합니다. 복제본 소유권 변경에 대한 자세한 내용은 복제본 소유자 변경을 참조하세요.

  • 원본 버킷과 대상 버킷을 서로 다른 AWS 계정에서 소유하는 교차 계정 시나리오에서 복제 구성을 설정하는 경우, 대상 버킷을 요청자 지불 버킷으로 구성할 수 없습니다. 자세한 내용은 스토리지 전송 및 사용량에 대한 요청자 지불액 버킷 사용 단원을 참조하십시오.

  • 버킷의 소스 객체가 AWS Key Management Service(AWS KMS) 키로 암호화된 경우 AWS KMS로 암호화된 객체를 포함하도록 복제 규칙을 구성해야 합니다. Amazon S3 콘솔의 암호화 설정에서 AWS KMS로 암호화된 객체 복제를 선택해야 합니다. 그런 다음, 대상 객체를 암호화하는 데 사용할 AWS KMS 키를 선택합니다.

    참고

    대상 버킷이 다른 계정에 있는 경우 대상 계정에서 소유하는 AWS KMS 고객 관리형 키를 지정하세요. 기본 Amazon S3 관리 키(aws/s3)를 사용하지 마세요. 기본 키를 사용하면 소스 계정이 소유한 Amazon S3 관리형 키로 객체를 암호화하여 객체가 다른 계정과 공유되지 않도록 합니다. 따라서 대상 계정은 대상 버킷의 객체에 액세스할 수 없습니다.

    대상 계정에 속한 AWS KMS 키를 사용하여 대상 객체를 암호화하려면 대상 계정이 KMS 키 정책에서 복제 역할에 kms:GenerateDataKeykms:Encrypt 권한을 부여해야 합니다. KMS 키 정책에서 다음 예시 명령문을 사용하려면 user input placeholders를 실제 정보로 대체하세요.

    { "Sid": "AllowS3ReplicationSourceRoleToUseTheKey", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789101:role/s3-replication-role" }, "Action": ["kms:GenerateDataKey", "kms:Encrypt"], "Resource": "*" }

    AWS KMS 키 정책의 Resource 명령문에 별표(*)를 사용하는 경우 정책은 복제 역할에만 KMS 키를 사용할 수 있는 권한을 부여합니다. 정책은 복제 역할의 권한 상승을 허용하지 않습니다.

    기본적으로 KMS 키 정책은 루트 사용자에게 키에 대한 전체 권한을 부여합니다. 이러한 권한은 동일한 계정의 다른 사용자에게 위임할 수 있습니다. 소스 KMS 키 정책에 Deny 명령문이 없는 한 IAM 정책을 사용하여 소스 KMS 키에 복제 역할 권한을 부여하는 것만으로도 충분합니다.

    참고

    특정 CIDR 범위, VPC 엔드포인트 또는 S3 액세스 포인트에 대한 액세스를 제한하는 KMS 키 정책으로 인해 복제가 실패할 수 있습니다.

    소스 또는 대상 KMS 키가 암호화 컨텍스트에 따라 권한을 부여하는 경우 Amazon S3 버킷 키가 버킷에 대해 활성화되어 있는지 확인하세요. 버킷에 S3 버킷 키가 켜져 있는 경우 암호화 컨텍스트는 다음과 같이 버킷 수준 리소스여야 합니다.

    "kms:EncryptionContext:arn:aws:arn": [ "arn:aws:s3:::SOURCE_BUCKET_NAME" ] "kms:EncryptionContext:arn:aws:arn": [ "arn:aws:s3:::DESTINATION_BUCKET_NAME" ]

    소스 계정은 KMS 키 정책에서 부여한 권한 외에도 복제 역할의 IAM 정책에 다음과 같은 최소 권한을 추가해야 합니다.

    { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "SourceKmsKeyArn" ] }, { "Effect": "Allow", "Action": [ "kms:GenerateDataKey", "kms:Encrypt" ], "Resource": [ "DestinationKmsKeyArn" ] }

    AWS KMS로 암호화된 객체를 복제하는 방법에 대한 자세한 내용은 암호화된 객체 복제를 참조하세요.

  • 다른 AWS 계정이 대상 버킷을 소유한 경우, 해당 대상 버킷에 소스 버킷 소유자의 객체 복제를 허용하는 버킷 정책이 있는지 확인합니다. 예시는 원본 버킷과 대상 버킷을 서로 다른 계정에서 소유한 경우 복제 구성에서 확인하십시오.

  • 권한을 검증한 후에도 객체가 여전히 복제되지 않는 경우 다음 위치에 명시적인 Deny 명령문이 있는지 확인하세요.

    • 소스 또는 대상 정책의 Deny 명령문. 버킷 정책이 다음 작업 중 하나에 대해 복제 역할에 대한 액세스를 거부하면 복제가 실패합니다.

      원본 버킷:

      "s3:GetReplicationConfiguration", "s3:ListBucket", "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging"

      대상 버킷:

      "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ReplicateTags"
    • IAM 역할에 연결된 Deny 명령문 또는 권한 경계로 인해 복제가 실패할 수 있습니다.

    • 소스 또는 대상 계정에 연결된 AWS Organizations 서비스 제어 정책의 Deny 명령문으로 인해 복제가 실패할 수 있습니다.

  • 객체 복제본이 대상 버킷에 나타나지 않는 경우, 다음 문제로 복제가 차단된 것일 수 있습니다.

    • Amazon S3는 원본 버킷에서 다른 복제 구성이 생성한 복제본을 복제하지 않습니다. 예를 들어 버킷 A에서 버킷 B로, 버킷 B에서 버킷 C로 복제 구성을 설정하면 Amazon S3는 버킷 B에 있는 객체 복제본을 버킷 C로 복제하지 않습니다.

    • 소스 버킷 소유자는 다른 AWS 계정에 객체 업로드 권한을 부여할 수 있습니다. 기본적으로 원본 버킷 소유자는 다른 계정에서 생성한 객체에 대해 권한이 없습니다. 복제 구성은 원본 버킷 소유자가 액세스 권한을 가진 객체만 복제합니다. 소스 버킷 소유자는 다른 AWS 계정에 해당 객체에 대한 명시적 액세스 권한을 조건부로 요구하는 객체 생성 권한을 부여할 수 있습니다. 정책 예제는 버킷 소유자가 완벽하게 제어할 수 있도록 보증하면서 객체에 업로드하는 크로스 계정 권한 부여을 참조하세요.

  • 복제 구성에서 객체 중 특정 태그를 갖는 하위 집합을 복제하는 규칙을 추가한다고 가정해 봅시다. 이 경우 Amazon S3가 객체를 복제하도록 하려면 객체를 생성할 때 특정 태그 키 및 값을 할당해야 합니다. 먼저 객체를 생성한 후 기존 객체에 태그를 추가할 경우 Amazon S3는 해당 객체를 복제하지 않습니다.

  • Amazon S3 이벤트 알림을 사용하여 객체가 대상 AWS 리전으로 복제되지 않는 경우에 알림을 받으세요. Amazon S3 이벤트 알림은 Amazon Simple Queue Service(Amazon SQS), Amazon Simple Notification Service(Amazon SNS) 또는 AWS Lambda를 통해 사용할 수 있습니다. 자세한 내용은 Amazon S3 이벤트 알림을 사용하여 복제 실패 이벤트 수신 단원을 참조하십시오.

    Amazon S3 이벤트 알림을 사용하여 복제 실패 이유도 볼 수 있습니다. 실패 이유 목록을 검토하려면 Amazon S3 복제 실패 이유를 참조하세요.

배치 복제 오류

대상 버킷에 복제되지 않는 객체 문제를 해결하려면 배치 복제 작업을 생성하는 데 사용되는 버킷, 복제 역할, IAM 역할에 대한 다양한 권한 유형을 확인하세요. 또한 퍼블릭 액세스 설정과 버킷 소유권 설정을 확인하세요.

배치 복제 사용 중에 다음 오류 중 하나가 발생할 수 있습니다.

  • 다음과 같은 이유로 배치 작업 상태가 실패했습니다. 작업 보고서를 보고서 버킷에 기록할 수 없습니다.

    이 오류는 배치 작업에 사용되는 IAM 역할이 작업을 생성할 때 지정한 위치에 완료 보고서를 넣을 수 없을 때 발생합니다. 이 오류를 해결하려면 IAM 역할에 배치 작업 완료 보고서를 저장하려는 버킷에 대한 PutObject 권한이 있는지 확인하세요. 소스 버킷과 다른 버킷에 보고서를 전달하는 것이 가장 좋습니다.

  • 배치 작업이 실패로 완료되었으며 총 실패 개수가 0이 아닙니다.

    이 오류는 실행 중인 배치 복제 작업에 객체 사용 권한이 충분하지 않은 경우 발생합니다. 배치 복제 작업에 복제 규칙을 사용하는 경우 복제에 사용되는 IAM 역할에 소스 또는 대상 버킷의 객체에 액세스할 수 있는 적절한 권한이 있는지 확인하세요. 또한 배치 복제 완료 보고서를 확인하여 특정 Amazon S3 복제 실패 이유를 검토할 수도 있습니다.

  • 배치 작업이 성공적으로 실행되었지만 대상 버킷에 예상되는 객체 수가 동일하지 않습니다.

    이 오류는 배치 복제 작업에 제공된 매니페스트에 나열된 객체와 작업을 만들 때 선택한 필터가 일치하지 않을 때 발생합니다. 소스 버킷의 객체와 매칭되는 복제 규칙이 없고 생성된 매니페스트에 소스 버킷의 객체가 포함되지 않은 경우에도 이 메시지가 표시될 수 있습니다.