디렉터리 버킷으로(에서) 객체 복사하기

디렉터리 버킷으로(에서) 객체 복사하기 (Copying objects from or to a directory bucket)

복사(copy) 작업은 이미 Amazon S3에 저장된 객체의 복사본을 만들어요. 디렉터리 버킷과 일반 용도 버킷 사이에서 객체를 복사할 수 있어요. 또한 같은 버킷 안에서, 그리고 같은 유형의 버킷 사이(예: 디렉터리 버킷에서 디렉터리 버킷으로) 복사할 수도 있어요.

출처: 문서

본문

참고

원본이나 대상 버킷이 AWS Local Zone에 있으면 서로 다른 AWS 리전 간 객체 복사는 지원되지 않아요. 원본과 대상 버킷은 같은 상위 AWS 리전을 가져야 해요. 원본과 대상 버킷의 버킷 위치 유형(Availability Zone 또는 Local Zone)은 달라도 돼요.

단일 원자 작업으로 최대 5GB의 객체 복사본을 만들 수 있어요. 단, 5GB보다 큰 객체를 복사하려면 멀티파트 업로드 API 작업을 사용해야 해요. 자세한 내용은 디렉터리 버킷에 멀티파트 업로드 사용하기 를 참고하세요.

권한

객체를 복사하려면 다음 권한이 있어야 해요.

  • 한 디렉터리 버킷에서 다른 디렉터리 버킷으로 객체를 복사하려면 s3express:CreateSession 권한이 있어야 해요.
  • 디렉터리 버킷에서 일반 용도 버킷으로 객체를 복사하려면 s3express:CreateSession 권한과, 객체 복사본을 대상 버킷에 쓰기 위한 s3:PutObject 권한이 있어야 해요.
  • 일반 용도 버킷에서 디렉터리 버킷으로 객체를 복사하려면 s3express:CreateSession 권한과, 복사되는 원본 객체를 읽기 위한 s3:GetObject 권한이 있어야 해요. 자세한 내용은 Amazon Simple Storage Service API Reference의 CopyObject 를 참고하세요.

암호화

Amazon S3는 S3 버킷에 업로드되는 모든 새 객체를 자동으로 암호화해요. S3 버킷의 기본 암호화 구성은 항상 활성화되어 있으며, 최소한 Amazon S3 관리 키를 사용한 서버 측 암호화(SSE-S3)로 설정돼요.

디렉터리 버킷에서는 SSE-S3와 AWS Key Management Service(AWS KMS) 키를 사용한 서버 측 암호화(SSE-KMS)가 지원돼요. 대상 버킷이 디렉터리 버킷일 때는 대상 버킷의 기본 암호화가 원하는 암호화 구성으로 설정되어 있도록 하고, 버킷 기본 암호화를 덮어쓰지 않는 것을 권장해요. 그러면 새 객체가 원하는 암호화 설정으로 자동 암호화돼요. 또한 CopyObject로 SSE-KMS 암호화 객체를 일반 용도 버킷과 디렉터리 버킷 사이(또는 디렉터리 버킷 사이)에서 복사할 때는 S3 Bucket Keys가 지원되지 않아요. 이 경우 Amazon S3는 KMS 암호화 객체에 대한 복사 요청이 있을 때마다 AWS KMS에 호출해요. 디렉터리 버킷의 암호화 덮어쓰기 동작에 대한 자세한 내용은 새 객체 업로드에 AWS KMS를 사용한 서버 측 암호화 지정 을 참고하세요.

일반 용도 버킷에서는 SSE-S3(기본값), AWS KMS 키를 사용한 서버 측 암호화(SSE-KMS), AWS KMS 키를 사용한 이중 계층 서버 측 암호화(DSSE-KMS), 고객 제공 키를 사용한 서버 측 암호화(SSE-C)를 사용할 수 있어요.

디렉터리 버킷(원본 또는 대상)에 대해 DSSE-KMS나 SSE-C를 사용하도록 지정하는 복사 요청을 보내면 오류가 반환돼요.

태그

디렉터리 버킷은 태그를 지원하지 않아요. 일반 용도 버킷에서 디렉터리 버킷으로 태그가 있는 객체를 복사하면 HTTP 501(Not Implemented) 응답을 받아요. 자세한 내용은 Amazon Simple Storage Service API Reference의 CopyObject 를 참고하세요.

ETag

S3 Express One Zone의 엔티티 태그(ETag)는 임의의 영숫자 문자열이며 MD5 체크섬이 아니에요. 객체 무결성을 확보하려면 추가 체크섬을 사용하세요.

추가 체크섬

S3 Express One Zone은 업로드나 다운로드 중 데이터를 검증하는 데 사용할 체크섬 알고리즘을 선택할 수 있게 해줘요. 다음 Secure Hash Algorithms(SHA) 또는 Cyclic Redundancy Check(CRC) 데이터 무결성 검사 알고리즘 중 하나를 선택할 수 있어요: CRC32, CRC32C, SHA-1, SHA-256. MD5 기반 체크섬은 S3 Express One Zone 스토리지 클래스에서 지원되지 않아요.

자세한 내용은 S3 추가 체크섬 모범 사례 를 참고하세요.

지원되는 기능

S3 Express One Zone에서 지원되는 Amazon S3 기능에 대한 자세한 내용은 디렉터리 버킷의 차이점 을 참고하세요.

참고

콘솔로 디렉터리 버킷에 객체를 복사할 때의 제한과 한계는 다음과 같아요.

  • Copy 작업은 지정된 폴더(접두사) 안의 모든 객체에 적용돼요. 작업이 진행되는 동안 이 폴더에 추가된 객체도 영향을 받을 수 있어요.
  • 고객 제공 암호화 키(SSE-C)로 암호화된 객체는 S3 콘솔로 복사할 수 없어요. SSE-C로 암호화된 객체를 복사하려면 AWS CLI, AWS SDK, 또는 Amazon S3 REST API를 사용하세요.
  • 복사된 객체는 원본 객체의 Object Lock 설정을 유지하지 않아요.
  • 객체를 복사해 오는 버킷이 S3 Object Ownership에 bucket owner enforced 설정을 사용한다면, 객체 ACL은 지정된 대상으로 복사되지 않아요.
  • S3 Object Ownership에 bucket owner enforced 설정을 사용하는 버킷으로 객체를 복사하려면 원본 버킷도 bucket owner enforced 설정을 사용하는지 확인하거나, 다른 AWS 계정과 그룹에 대한 객체 ACL 권한을 제거하세요.
  • 일반 용도 버킷에서 디렉터리 버킷으로 복사된 객체는 객체 태그, ACL, ETag 값을 유지하지 않아요. 체크섬 값은 복사될 수 있지만 ETag와 동일하지는 않아요. 체크섬 값은 추가되었을 때와 비교해 변경될 수 있어요.
  • 디렉터리 버킷으로 복사되는 모든 객체는 S3 Object Ownership에 bucket owner enforced 설정이 적용돼요.

일반 용도 버킷 또는 디렉터리 버킷에서 디렉터리 버킷으로 객체 복사하기

  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/s3/ 에서 Amazon S3 콘솔을 엽니다.
  2. 왼쪽 탐색 창에서 객체를 복사해 올 버킷 유형을 선택합니다. 일반 용도 버킷에서 복사하려면 General purpose buckets 탭을, 디렉터리 버킷에서 복사하려면 Directory buckets 탭을 선택합니다.
  3. 복사할 객체가 들어 있는 일반 용도 버킷 또는 디렉터리 버킷을 선택합니다.
  4. Objects(객체) 탭을 선택합니다. Objects 페이지에서 복사할 객체 이름 왼쪽의 체크박스를 선택합니다.
  5. Actions(작업) 메뉴에서 Copy(복사)를 선택합니다. Copy 페이지가 나타납니다.
  6. Destination(대상) 아래에서 대상 유형으로 Directory bucket(디렉터리 버킷)을 선택합니다. 대상 경로를 지정하려면 Browse S3를 선택하고 대상으로 이동한 뒤 대상 왼쪽의 옵션 버튼을 선택하고 Choose destination(대상 선택)을 선택합니다. 또는 대상 경로를 직접 입력할 수 있습니다.
  7. Additional copy settings(추가 복사 설정)에서 Copy source settings(원본 설정 복사), Don't specify settings(설정 미지정), Specify settings(설정 지정) 중 원하는 것을 선택합니다. Copy source settings가 기본 옵션이에요. 원본 설정 속성 없이 객체만 복사하려면 Don't specify settings를 선택합니다. 서버 측 암호화, 체크섬, 메타데이터 설정을 지정하려면 Specify settings를 선택합니다.
  8. Copy를 선택합니다. Amazon S3가 객체를 대상으로 복사해요.

참고

콘솔로 일반 용도 버킷에 객체를 복사할 때의 제한과 한계는 다음과 같아요.

  • Copy 작업은 지정된 폴더(접두사) 안의 모든 객체에 적용돼요. 작업이 진행되는 동안 이 폴더에 추가된 객체도 영향을 받을 수 있어요.
  • 고객 제공 암호화 키(SSE-C)로 암호화된 객체는 S3 콘솔로 복사할 수 없어요. SSE-C로 암호화된 객체를 복사하려면 AWS CLI, AWS SDK, 또는 Amazon S3 REST API를 사용하세요.
  • 복사된 객체는 원본 객체의 Object Lock 설정을 유지하지 않아요.
  • 객체를 복사해 오는 버킷이 S3 Object Ownership에 bucket owner enforced 설정을 사용한다면, 객체 ACL은 지정된 대상으로 복사되지 않아요.
  • S3 Object Ownership에 bucket owner enforced 설정을 사용하는 버킷으로 객체를 복사하려면 원본 버킷도 bucket owner enforced 설정을 사용하는지 확인하거나, 다른 AWS 계정과 그룹에 대한 객체 ACL 권한을 제거하세요.

디렉터리 버킷에서 일반 용도 버킷으로 객체 복사하기

  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/s3/ 에서 Amazon S3 콘솔을 엽니다.
  2. 왼쪽 탐색 창에서 Buckets(버킷)을 선택합니다.
  3. Directory buckets 탭을 선택합니다.
  4. 복사할 객체가 들어 있는 디렉터리 버킷을 선택합니다.
  5. Objects(객체) 탭을 선택합니다. Objects 페이지에서 복사할 객체 이름 왼쪽의 체크박스를 선택합니다.
  6. Actions(작업) 메뉴에서 Copy(복사)를 선택합니다.
  7. Destination(대상) 아래에서 대상 유형으로 General purpose bucket(일반 용도 버킷)을 선택합니다. 대상 경로를 지정하려면 Browse S3를 선택하고 대상으로 이동한 뒤 대상 왼쪽의 옵션 버튼을 선택하고 Choose destination(대상 선택)을 선택합니다. 또는 대상 경로를 직접 입력할 수 있습니다.
  8. Additional copy settings(추가 복사 설정)에서 Copy source settings(원본 설정 복사), Don't specify settings(설정 미지정), Specify settings(설정 지정) 중 원하는 것을 선택합니다. Copy source settings가 기본 옵션이에요. 원본 설정 속성 없이 객체만 복사하려면 Don't specify settings를 선택합니다. 스토리지 클래스, ACL, 객체 태그, 메타데이터, 서버 측 암호화, 추가 체크섬 설정을 지정하려면 Specify settings를 선택합니다.
  9. Copy를 선택합니다. Amazon S3가 객체를 대상으로 복사해요.

Java 예제 (AWS SDK for Java 2.x)

다음 예제는 AWS SDK for Java 2.x로 객체를 복사하는 방법을 보여줘요.

 public static void copyBucketObject (S3Client s3, String sourceBucket, String objectKey, String targetBucket) {
      CopyObjectRequest copyReq = CopyObjectRequest.builder()
          .sourceBucket(sourceBucket)
          .sourceKey(objectKey)
          .destinationBucket(targetBucket)
          .destinationKey(objectKey)
          .build();
       String temp = "";
                                             
       try {
           CopyObjectResponse copyRes = s3.copyObject(copyReq);
           System.out.println("Successfully copied " + objectKey +" from bucket " + sourceBucket +" into bucket "+targetBucket);
       }
       
       catch (S3Exception e) {
           System.err.println(e.awsErrorDetails().errorMessage());
           System.exit(1);
       }
 }

AWS CLI 예제

다음 copy-object 예제 명령은 AWS CLI로 한 버킷에서 다른 버킷으로 객체를 복사하는 방법을 보여줘요. 버킷 유형을 가리지 않고 복사할 수 있어요. 실행 시 사용자 입력 자리표시자는 직접 채워 넣어야 합니다.

aws s3api copy-object --copy-source SOURCE_BUCKET/SOURCE_KEY_NAME --key TARGET_KEY_NAME --bucket TARGET_BUCKET_NAME
    

CLI copy-object 명령에 대한 자세한 내용은 AWS CLI Command Reference를 참고하세요.

더 알아보기 (Learn more)