두 Amazon S3 버킷 간에 객체를 복사할 수 없는 이유가 무엇인가요?

6분 분량
0

객체를 Amazon Simple Storage Service(Amazon S3) 버킷에서 다른 버킷으로 복사하려고 하는데 복사할 수 없습니다.

해결 방법

버킷 정책 및 IAM 정책

버킷 간에 객체를 복사하려면 권한을 올바르게 구성했는지 확인해야 합니다. 동일한 AWS 계정의 버킷 간에 객체를 복사하려면 AWS Identity and Access Management(IAM) 정책을 사용하여 권한을 설정하세요. 서로 다른 계정의 버킷 간에 객체를 복사하려면 관련 IAM 정책과 버킷 정책 모두에 대한 권한을 설정해야 합니다.

**참고:**버킷 정책을 수정하는 방법에 대한 지침은 Amazon S3 콘솔을 사용하여 버킷 정책 추가를 참조하세요. IAM 사용자의 권한을 수정하는 방법에 대한 지침은 IAM 사용자의 권한 변경을 참조하세요. IAM 역할의 권한을 수정하는 방법에 대한 지침은 역할 수정을 참조하세요.

다음의 필수 권한을 확인합니다.

  • 최소한 IAM 자격 증명(사용자 또는 역할)에는 소스 버킷의 s3:ListBuckets3:GetObject 작업에 대한 권한이 있어야 합니다. 버킷이 동일한 계정에 있는 경우 IAM 자격 증명의 정책 또는 S3 버킷 정책으로 이러한 권한을 설정합니다. 버킷이 서로 다른 계정에 있는 경우 버킷 정책과 IAM 자격 증명의 정책을 모두 사용하여 이러한 권한을 설정합니다.
  • 최소한 IAM 자격 증명에는 대상 버킷의 s3:ListBuckets3:PutObject작업에 대한 권한이 있어야 합니다. 버킷이 동일한 계정에 있는 경우 IAM 자격 증명의 정책 또는 S3 버킷 정책으로 이러한 권한을 설정합니다. 버킷이 서로 다른 계정에 있는 경우 버킷 정책과 IAM 자격 증명의 정책을 모두 사용하여 이러한 권한을 설정합니다.
  • 관련 버킷 정책 및 IAM 정책을 검토하여 필요한 권한과 충돌하는 명시적 거부문이 없는지 확인합니다. 명시적 거부문은 허용문보다 우선합니다.
  • 특정 작업의 경우 IAM 자격 증명에 작업 내의 모든 필요한 작업에 대한 권한이 있는지 확인합니다. 예를 들어, aws s3 cp 명령을 실행하려면 s3:GetObjects3:PutObject에 대한 권한이 필요합니다. --recursive 옵션을 통해 aws s3 cp 명령을 실행하려면 s3:GetObject, s3:PutObjects3:ListBucket에 대한 권한이 필요합니다. aws s3 sync 명령을 실행하려면 s3:GetObject, s3:PutObjects3:ListBucket에 대한 권한이 필요합니다.
    참고:AssumeRole API 작업을 사용하여 Amazon S3에 액세스하는 경우 신뢰 관계를 올바르게 구성했는지 확인합니다.
  • 버전별 작업의 경우 IAM 자격 증명에 버전별 작업에 대한 권한이 있는지 확인합니다. 예를 들어, 특정 버전의 객체를 복사하려면 s3:GetObjectVersions3:GetObject에 대한 권한이 필요합니다.
  • 객체 태그가 있는 객체를 복사하려면 IAM 자격 증명에 s3:GetObjectTaggings3:PutObjectTagging 권한이 있어야 합니다. 소스 객체에 대한 s3:GetObjectTagging 권한과 대상 버킷의 객체에 대한 s3:PutObjectTagging 권한이 있어야 합니다.
  • 관련 버킷 정책 및 IAM 정책을 검토하여 리소스 요소의 경로가 올바른지 확인합니다. 버킷 수준 권한의 경우 리소스 요소가 버킷을 가리켜야 합니다. 객체 수준 권한의 경우 리소스 요소가 하나 이상의 객체를 가리켜야 합니다.

예를 들어, s3:ListBucket과 같은 버킷 수준 작업에 대한 정책 설명문에서는 리소스 요소에서 버킷을 지정해야 합니다.

"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET"

s3:GetObject 또는 s3:PutObject와 같은 객체 수준 작업에 대한 정책 설명문에서는 리소스 요소에서 객체를 한 개 이상 지정해야 합니다.

"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"

객체 소유권

버킷 정책에 올바른 권한이 있지만 버킷 간에 객체를 복사할 수 없는 경우, 객체를 소유한 계정을 확인하세요. 버킷 정책은 버킷 소유자에게 속한 객체에만 적용됩니다. 다른 계정에 속한 객체에 해당 액세스 제어 목록(ACL)에 대해 충돌하는 권한이 있을 수 있습니다.

**참고:**객체 소유권 및 ACL 문제는 일반적으로 계정 간에 AWS 서비스 로그를 복사할 때 발생합니다. 서비스 로그의 예로는 AWS CloudTrail 로그와 Elastic Load Balancing 액세스 로그 등이 있습니다.

객체를 소유한 계정을 찾으려면 다음 단계를 따르세요.

  1. Amazon S3 콘솔을 엽니다.
  2. 버킷 간에 복사할 수 없는 객체로 이동합니다.
  3. 객체의 권한 탭을 선택합니다.
  4. 객체 소유자의 액세스 값과 다른 AWS 계정의 액세스 값을 검토합니다.
  • 귀하의 계정이 객체를 소유한 경우, 객체 소유자의 액세스아래의 정식 ID에 **(사용자의 AWS 계정)**이 포함됩니다.
  • 다른 계정이 객체를 소유하고 있고 객체에 액세스할 수 있는 경우에는 다음이 적용됩니다.
    객체 소유자의 액세스 아래에 있는 정식 ID에 **(외부 계정)**이 포함됩니다.
    다른 AWS 계정의 액세스 아래에 있는 정식 ID에 **(사용자 AWS 계정)**이 포함됩니다.
  • 다른 계정이 소유한 객체인데 객체에 액세스할 수 없는 경우에는 다음이 적용됩니다.
    객체 소유자의 액세스다른 AWS 계정의 액세스 모두에 대한 정식 ID 필드가 비어 있습니다.

버킷 간에 복사할 수 없는 객체를 다른 계정이 소유한 경우 객체 소유자는 다음 옵션 중 하나를 완료할 수 있습니다.

AWS KMS 암호화

객체는 AWS Key Management Service(AWS KMS) 키로 암호화될 수 있습니다. 이 경우 IAM 자격 증명에 키에 대한 올바른 권한이 있는지 확인하세요. IAM 자격 증명과 AWS KMS 키가 동일한 계정에 속하는 경우, 사용자의 키 정책이 필요한 AWS KMS 권한을 부여하는지 확인합니다.

IAM 자격 증명과 AWS KMS 키가 서로 다른 계정에 속하는 경우, 키 정책과 IAM 정책이 모두 필요한 권한을 부여하는지 확인합니다.

예를 들어, 두 버킷 간에 객체를 복사하고 각 버킷에 고유한 키가 있는 경우 IAM 자격 증명은 다음 권한을 지정해야 합니다.

  • kms:Decrypt 권한(첫 번째 KMS 키 참조)
  • kms:GenerateDataKeykms:Decrypt 권한(두 번째 KMS 키 참조)

자세한 내용은 AWS KMS에서 키 정책 사용AWS Key Management Service의 작업, 리소스 및 조건 키를 참조하세요.

Amazon Archive 스토리지 클래스 또는 Amazon Glacier 및 Intelligent Archive 스토리지 클래스

Amazon S3 Glacier 스토리지 클래스에서는 객체를 복사할 수 없습니다. 객체를 복사하려면 먼저 Amazon S3 Glacier에서 객체를 복원해야 합니다. 지침은 아카이브된 객체 복원을 참조하세요.

버킷에서 활성화된 요청자 지불

소스 또는 대상 버킷에 요청자 지불이 활성화되어 있고 다른 계정에서 해당 버킷에 액세스하려는 경우 요청을 확인합니다. 요청에 올바른 요청자 지불 파라미터가 포함되어 있는지 확인해야 합니다.

  • AWS Command Line Interface(AWS CLI) 명령의 경우 --request-payer 옵션을 포함하세요.
    **참고:**AWS CLI 명령을 실행할 때 오류가 발생하는 경우, 최신 버전의 AWS CLI를 사용하고 있는지 확인해야 합니다.
  • GET, HEAD 및 POST 요청의 경우 x-amz-request-payer : requester를 포함합니다.
  • 서명된 URL의 경우 x-amz-request-payer=requester를 포함합니다.

AWS Organizations 서비스 제어 정책

AWS Organizations를 사용하는 경우 서비스 제어 정책을 확인하여 Amazon S3에 대한 액세스를 허용하는지 검증합니다.

예를 들어, 이 정책으로 인해 Amazon S3에 액세스하려고 할 때 403 Forbidden 오류가 발생합니다. 이는 액세스를 명시적으로 거부하기 때문입니다.

{  
  "Version": "2012-10-17",  
  "Statement": [  
    {  
      "Effect": "Deny",  
      "Action": "S3:*",  
      "Resource": "*"  
    }  
  ]  
}

AWS Organizations의 기능에 대한 자세한 내용은 조직의 모든 기능 활성화를 참조하세요.

Amazon S3의 VPC 엔드포인트와 관련된 크로스 리전 요청 문제

Amazon S3의 VPC 엔드포인트는 서로 다른 AWS 리전 간의 요청을 지원하지 않습니다. 예를 들어, 리전 A에 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스가 있다고 가정해 보겠습니다. 이 인스턴스는 관련 라우팅 테이블에 virtual private cloud(VPC) 엔드포인트가 구성되어 있습니다. EC2 인스턴스는 리전 B의 객체를 리전 A의 버킷으로 복사할 수 없습니다. 대신 다음 예와 유사한 오류 메시지가 나타납니다.

"An error occurred (AccessDenied) when calling the CopyObject operation: VPC endpoints do not support cross-region requests"

이 크로스 리전 요청 문제를 해결하려면 다음 방법을 시도해 보세요.

  • 라우팅 테이블에서 VPC 엔드포인트를 제거합니다. VPC 엔드포인트를 제거하는 경우 인스턴스가 대신 인터넷에 연결할 수 있어야 합니다.
  • VPC 엔드포인트를 사용하지 않는 다른 인스턴스에서 복사 명령을 실행합니다. 또는 리전 A와 리전 B에 없는 인스턴스에서 복사 명령을 실행합니다.
  • VPC 엔드포인트를 사용해야 하는 경우 먼저 GET 요청을 보내 소스 버킷의 객체를 EC2 인스턴스로 복사합니다. 그런 다음 PUT 요청을 보내 EC2 인스턴스의 객체를 대상 버킷으로 복사합니다.

관련 정보

오브젝트 복사

Amazon S3의 403 액세스 거부 오류를 해결하려면 어떻게 해야 하나요?

AWS 공식
AWS 공식업데이트됨 8달 전