S3 Batch Operations를 사용하여 S3 버킷 키로 객체 암호화 - Amazon Simple Storage Service

S3 Batch Operations를 사용하여 S3 버킷 키로 객체 암호화

이 섹션에서는 Amazon S3 Batch Operations 복사 작업을 사용하여 기존 객체에서 S3 버킷 키 암호화를 식별하고 활성화합니다. S3 버킷 키에 대한 자세한 내용은 Amazon S3 버킷 키를 사용하여 SSE-KMS 비용 절감새 객체에 SSE-KMS와 함께 S3 버킷 키를 사용하도록 버킷 구성 섹션을 참조하세요.

이 예에서 다루는 주제는 다음을 포함합니다.

Prerequisites

이 절차의 단계를 따라 수행하려는 경우 작업 파일과 암호화된 결과를 보관할 AWS 계정 및 하나 이상의 S3 버킷이 필요합니다. 또한, 다음 항목을 포함하여 기존 S3 Batch Operations 설명서의 대부분을 유용하게 사용할 수 있습니다.

1단계: S3 인벤토리를 사용하여 객체 목록 가져오기

시작하려면 암호화할 객체를 포함하는 S3 버킷을 식별하고 해당 콘텐츠 목록을 가져옵니다. Amazon S3 인벤토리 보고서는 이 작업을 수행하는 가장 편리하면서도 경제적인 방법입니다. 이 보고서는 연결된 메타데이터와 함께 버킷에 있는 객체 목록을 제공합니다. 소스 버킷은 인벤토리가 있는 버킷을 나타내며, 대상 버킷은 인벤토리 보고서 파일을 저장하는 버킷을 나타냅니다. Amazon S3 인벤토리 소스 및 대상 버킷에 대한 자세한 내용은 Amazon S3 인벤토리 섹션을 참조하세요.

인벤토리를 설정하는 가장 쉬운 방법은 AWS Management Console을 사용하는 것입니다. 하지만 REST API, AWS Command Line Interface(AWS CLI) 또는 AWS SDK를 사용할 수도 있습니다. 이 단계를 수행하기 전에 콘솔에 로그인하고 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다. . 권한 거부 오류가 발생하면 대상 버킷에 버킷 정책을 추가합니다. 자세한 내용은 Amazon S3 인벤토리 및 Amazon S3 분석에 권한 부여 섹션을 참조하세요.

S3 인벤토리를 사용하여 객체 목록을 가져오려면

  1. https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 탐색 창에서 [버킷(Buckets)]을 선택하고 암호화할 객체를 포함하는 버킷을 선택합니다.

  3. [관리(Management)] 탭에서 [인벤토리 구성(Inventory configurations)] 섹션으로 이동하고 [인벤토리 구성 작성(Create inventory configuration)]을 선택합니다.

  4. 새 인벤토리에 이름을 지정하고 대상 S3 버킷의 이름을 입력한 다음, 선택적으로 Amazon S3 대상 접두사를 생성하여 해당 버킷에서 객체를 할당합니다.

  5. [출력 형식(Output format)]으로 [CSV]를 선택합니다.

  6. [추가 필드 - 선택 사항(Additional fields - optional)] 섹션에서 [암호화(Encryption)] 및 원하는 기타 보고서 필드를 선택합니다. 첫 번째 보고서가 버킷에 더 빨리 제공되도록 보고서 제공 빈도를 [일별(Daily)]로 설정합니다.

  7. [생성(Create)]을 선택하여 구성을 저장합니다.

Amazon S3에서 첫 번째 보고서를 제공하는 데 최대 48시간이 걸릴 수 있으므로 첫 번째 보고서가 도착하면 다시 확인합니다. 첫 번째 보고서를 받은 후 다음 섹션으로 이동하여 S3 인벤토리 보고서의 콘텐츠를 필터링합니다. 이 버킷에 대한 인벤토리 보고서를 더 이상 받지 않으려면 S3 인벤토리 구성을 삭제합니다. 그렇지 않으면 S3에서 일별 또는 주별 일정에 따라 보고서를 제공합니다.

인벤토리 목록은 모든 객체의 단일 시점 보기가 아닙니다. 인벤토리 목록은 최종 일관성을 지닌 버킷 항목의 롤링 스냅샷입니다(예: 목록에 최근에 추가되거나 삭제된 객체가 포함되지 않을 수 있음). S3 인벤토리와 S3 Batch Operations를 결합하면 정적 객체 또는 2일 이상 전에 생성한 객체 세트로 작업할 때 가장 효과적입니다. 최신 데이터로 작업하려면 ListObjectsV2(GET 버킷) API 작업을 사용하여 수동으로 객체 목록을 구축합니다. 필요한 경우 다음 며칠 동안 또는 인벤토리 보고서에 모든 키의 원하는 상태가 표시될 때까지 이 프로세스를 반복합니다.

2단계: S3 Select를 사용하여 객체 목록 필터링

S3 인벤토리 보고서를 받은 후 버킷 키로 암호화되지 않은 객체만 나열하도록 보고서의 콘텐츠를 필터링할 수 있습니다. 버킷 키로 모든 버킷의 객체를 암호화하려는 경우 이 단계는 무시할 수 있습니다. 그러나 이 단계에서 S3 인벤토리 보고서를 필터링하면 이전에 암호화한 객체를 다시 암호화하는 데 드는 시간과 비용을 절약할 수 있습니다.

다음 단계에서 Amazon S3 Select를 사용하여 필터링하는 방법을 보여 주지만, Amazon Athena를 사용할 수도 있습니다. 사용할 도구를 결정하려면 S3 인벤토리 보고서의manifest.json 파일을 검토합니다. 이 파일은 해당 보고서에 연결된 데이터 파일의 수를 나열합니다. 많은 경우 Amazon Athena를 사용합니다. 여러 S3 객체에서 실행되기 때문입니다. 반면 S3 Select는 한 번에 하나의 객체에서 작동합니다. Amazon S3 및 Athena를 함께 사용하는 방법에 대한 자세한 내용은 블로그 게시물 Amazon S3 Batch Operations에서 객체 암호화에서 Amazon Athena로 Amazon S3 인벤토리 쿼리Athena 사용을 참조하세요.

S3 Select를 사용하여 S3 인벤토리 보고서를 필터링하려면

  1. 인벤토리 보고서에서 manifest.json 파일을 열고 JSON의 fileSchema 섹션을 참조하세요. 이 데이터에서 실행하는 쿼리를 알립니다.

    다음 JSON 버전 관리가 사용되는 버킷에서 CSV 형식 인벤토리의 manifest.json 파일에 대한 예제입니다. 인벤토리 보고서를 구성한 방법에 따라 매니페스트가 다를 수 있습니다.

    { "sourceBucket": "batchoperationsdemo", "destinationBucket": "arn:aws:s3:::testbucket", "version": "2021-05-22", "creationTimestamp": "1558656000000", "fileFormat": "CSV", "fileSchema": "Bucket, Key, VersionId, IsLatest, IsDeleteMarker, BucketKeyStatus", "files": [ { "key": "demoinv/batchoperationsdemo/DemoInventory/data/009a40e4-f053-4c16-8c75-6100f8892202.csv.gz", "size": 72691, "MD5checksum": "c24c831717a099f0ebe4a9d1c5d3935c" } ] }

    버킷에서 버전 관리가 활성화되지 않았거나 최신 버전에 대한 보고서를 실행하도록 선택한 경우 fileschemaBucket, KeyBucketKeyStatus입니다.

    버전 관리가 활성화된 경우 인벤토리 보고서를 설정하는 방법에 따라 fileSchema에는 Bucket, Key, VersionId, IsLatest, IsDeleteMarker, BucketKeyStatus가 포함될 수 있습니다. 따라서 쿼리를 실행할 때는 1, 2, 3, 6 열에 주의하세요.

    S3 Batch Operations에는 버킷 키 상태인 검색 기준 필드 외에, 작업을 수행하기 위한 입력으로 버킷, 키 및 버전 ID가 필요합니다. 버전 ID 필드는 필요하지 않지만 버전 관리 버킷에서 작업할 때 버전 ID 필드를 지정하는 데 도움이 됩니다. 자세한 내용은 버전 관리가 활성화된 버킷의 객체 작업 섹션을 참조하세요.

  2. 인벤토리 보고서의 데이터 파일을 찾습니다. manifest.json 객체는 files 아래 데이터 파일을 나열합니다..

  3. S3 콘솔에서 데이터 파일을 찾아 선택한 후 [작업(Actions)]을 선택한 다음 [S3 Select에서 쿼리(Query with S3 Select)]를 선택합니다.

  4. 사전 설정된 [CSV], [쉼표(Comma)] 및 [GZIP] 필드를 선택한 상태로 두고 [다음(Next)]을 선택합니다.

  5. 계속하기 전에 인벤토리 보고서의 형식을 검토하려면 [파일 미리 보기 표시(Show file preview)]를 선택합니다.

  6. SQL 표현식 필드에 참조할 열을 입력하고 [SQL 실행(Run SQL)]을 선택합니다. 다음 표현식은 버킷 키가 구성되지 않은 모든 객체에 대해 1~3 열을 반환합니다.

    select s._1, s._2, s._3 from s3object s where s._6 = 'DISABLED'

    다음은 예 결과입니다.

    batchoperationsdemo,0100059%7Ethumb.jpg,lsrtIxksLu0R0ZkYPL.LhgD5caTYn6vu batchoperationsdemo,0100074%7Ethumb.jpg,sd2M60g6Fdazoi6D5kNARIE7KzUibmHR batchoperationsdemo,0100075%7Ethumb.jpg,TLYESLnl1mXD5c4BwiOIinqFrktddkoL batchoperationsdemo,0200147%7Ethumb.jpg,amufzfMi_fEw0Rs99rxR_HrDFlE.l3Y0 batchoperationsdemo,0301420%7Ethumb.jpg,9qGU2SEscL.C.c_sK89trmXYIwooABSh batchoperationsdemo,0401524%7Ethumb.jpg,ORnEWNuB1QhHrrYAGFsZhbyvEYJ3DUor batchoperationsdemo,200907200065HQ%7Ethumb.jpg,d8LgvIVjbDR5mUVwW6pu9ahTfReyn5V4 batchoperationsdemo,200907200076HQ%7Ethumb.jpg,XUT25d7.gK40u_GmnupdaZg3BVx2jN40 batchoperationsdemo,201103190002HQ%7Ethumb.jpg,z.2sVRh0myqVi0BuIrngWlsRPQdb7qOS
  7. 결과를 다운로드하여 CSV 형식으로 저장한 다음 S3 Batch Operations 작업의 객체 목록으로 Amazon S3에 업로드합니다.

  8. 매니페스트 파일이 여러 개인 경우 [S3 Select에서 쿼리(Query with S3 Select)도 실행합니다. 결과의 크기에 따라 목록을 결합하여 단일 S3 Batch Operations 작업을 실행하거나 각 목록을 별도의 작업으로 실행할 수 있습니다.

    실행할 작업 수를 결정할 때 각 S3 Batch Operations 작업 실행 요금을 고려합니다.

3단계: S3 Batch Operations 작업 설정 및 실행

S3 객체의 CSV 목록을 필터링했으므로 S3 Batch Operations 작업을 시작하여 S3 버킷 키로 객체를 암호화할 수 있습니다.

작업은 제공된 객체의 목록(매니페스트), 수행된 작업 및 지정된 파라미터를 총체적으로 나타냅니다. 이 객체 집합을 암호화하는 가장 쉬운 방법은 PUT 복사 작업을 사용하고 매니페스트에 나열된 객체와 동일한 대상 접두사를 지정하는 것입니다. 이렇게 하면 버전 관리되지 않은 버킷의 기존 객체를 덮어쓰거나 버전 관리가 설정된 상태에서 암호화된 최신 버전의 객체를 생성합니다.

객체를 복사하는 과정에서 Amazon S3가 SSE-KMS 암호화 및 S3로 객체를 암호화하도록 지정합니다. 이 작업은 객체를 복사하므로 처음에 S3에 추가한 시점과 관계없이 모든 객체가 완료 시 업데이트된 생성 날짜를 표시합니다. 또한, 객체 태그와 스토리지 클래스를 포함하여 S3 Batch Operations 작업의 일부로 객체 집합에 대한 다른 속성을 지정합니다.

IAM 정책 설정

  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 창에서 [정책(Policy)]을 선택한 후 [정책 생성(Create Policy)]을 선택합니다.

  3. [JSON] 탭을 선택합니다. [정책 편집(Edit policy)]을 선택하고 다음 코드 블록에 표시되는 IAM 정책 예제를 추가합니다.

    정책 예제를 IAM 콘솔에 복사한 후 다음을 바꿉니다.

    1. {SOURCE_BUCKET_FOR_COPY}를 소스 버킷 이름으로 바꿉니다.

    2. {DESTINATION_BUCKET_FOR_COPY}를 대상 버킷 이름으로 바꿉니다.

    3. {MANIFEST_KEY}를 매니페스트 객체 이름으로 바꿉니다.

    4. {REPORT_BUCKET}을 보고서를 저장하려는 버킷 이름으로 바꿉니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "CopyObjectsToEncrypt", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:PutObjectTagging", "s3:PutObjectAcl", "s3:PutObjectVersionTagging", "s3:PutObjectVersionAcl", "s3:GetObject", "s3:GetObjectAcl", "s3:GetObjectTagging", "s3:GetObjectVersion", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging" ], "Resource": [ "arn:aws:s3:::{SOURCE_BUCKET_FOR_COPY}/*", "arn:aws:s3:::{DESTINATION_BUCKET_FOR_COPY}/*" ] }, { "Sid": "ReadManifest", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::{MANIFEST_KEY}" }, { "Sid": "WriteReport", "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::{REPORT_BUCKET}/*" } ] }
  4. 다음: 태그를 선택합니다.

  5. 선택적으로 원하는 태그를 추가하고 [다음: 검토(Next: Review)]를 선택합니다.

  6. 정책 이름과 설명(선택 사항)을 추가하고 [정책 생성(Create policy)]을 선택합니다.

  7. [정책 검토(Review policy)] 및 [변경 사항 저장(Save changes)]을 선택합니다.

  8. 이제 S3 Batch Operations 정책이 완료되면 콘솔이 IAM 정책 페이지로 이동합니다. 정책 이름을 필터링하고 정책 이름 왼쪽에 있는 버튼을 선택한 다음 [정책 작업(Policy actions)]을 선택하고 [연결(Attach)]을 선택합니다.

    새로 생성된 정책을 IAM 역할에 연결하려면 계정에서 적절한 사용자, 그룹 또는 역할을 선택하고 [정책 연결(Attach policy)]을 선택합니다. 그러면 IAM 콘솔로 돌아갑니다.

Batch Operations IAM 역할 설정

  1. IAM 콘솔의 탐색 창에서 [역할(Roles)]을 선택하고 [역할 생성(Create role)]을 선택합니다.

  2. [AWS 서비스(AWS service)], [S3] 및 [S3 Batch Operations]를 선택합니다. 그런 다음 [Next: Permissions]를 선택합니다.

  3. 먼저 방금 생성한 IAM 정책 이름을 입력합니다. 정책 이름이 나타나면 해당 확인란을 선택하고 [다음: 태그(Next: Tags)]를 선택합니다.

  4. (선택 사항) 이 연습에서는 태그를 추가하거나 키 및 값 필드를 비워 둡니다. 다음: 검토를 선택합니다.

  5. 역할 이름을 입력하고 기본 설명을 그대로 사용하거나 직접 추가합니다. 역할 생성을 선택합니다.

  6. 작업을 생성하는 사용자에게 다음 예제의 권한이 있는지 확인합니다.

    AWS 계정 ID 및 {IAM_ROLE_NAME}{ACCOUNT-ID}를 나중에 Batch Operations 생성 단계에서 생성할 IAM 역할에 적용하려는 이름으로 바꿉니다. 자세한 내용은 Amazon S3 배치 작업에 대한 권한 부여 섹션을 참조하세요.

    { "Sid": "AddIamPermissions", "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole" ], "Resource": "arn:aws:iam::{ACCOUNT-ID}:role/{IAM_ROLE_NAME}" }

기존 버킷에 대해 S3 버킷 키 켜기

  1. https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. [버킷(Buckets)] 목록에서 S3 버킷 키를 활성화할 버킷을 선택합니다.

  3. [속성(Properties)]을 선택합니다.

  4. 기본 암호화에서 편집을 선택합니다.

  5. [서버 측 암호화(Server-side encryption)] 옵션 아래에서 [사용(Enable)]을 선택합니다.

  6. [암호화 키 유형(Encryption key type)] 아래에서 [AWS KMS 키(SSE-KMS)(AWS KMS key(SSE-KMS)]를 선택하고 원하는 AWS KMS 키 형식을 선택합니다.

    • AWS 관리형 키(aws/s3).

    • AWS KMS 키를 선택하고 버킷과 동일한 리전에서 대칭 KMS 키를 선택합니다.

    • AWS KMS 키 ARN

  7. [버킷 키(Bucket Key)] 아래에서 [사용(Enable)]을 선택하고 [변경 사항 저장(Save changes)]을 선택합니다.

버킷 수준에서 버킷 키가 설정되었으므로 이 버킷으로 업로드, 수정 또는 복사된 객체는 기본적으로 이 암호화 구성을 상속합니다. 여기에는 Amazon S3 Batch Operations를 사용하여 복사된 객체가 포함됩니다.

Batch Operations 작업 생성

  1. https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 탐색 창에서 [Batch Operations]를 선택하고 [작업 생성(Create Job)]을 선택합니다.

  3. 객체를 저장할 [리전(Region)]을 선택하고 매니페스트 유형으로 [CSV]를 선택합니다.

  4. 경로를 입력하거나 이전에 S3 Select(또는 Athena) 결과에서 생성한 CSV 매니페스트 파일로 이동합니다. 매니페스트에 버전 ID가 있으면 해당 상자를 선택합니다. [Next]를 선택합니다.

  5. [복사(Copy)] 작업을 선택하고 복사 대상 버킷을 선택합니다. 서버 측 암호화를 사용하지 않도록 설정할 수 있습니다. 버킷 대상에서 버킷 키가 사용되는 한, 복사 작업은 대상 버킷에 버킷 키를 적용합니다.

  6. (선택 사항) 스토리지 클래스와 다른 파라미터를 원하는 대로 선택합니다. 이 단계에서 지정하는 파라미터는 매니페스트에 나열된 객체에서 수행된 모든 작업에 적용됩니다. 다음을 선택합니다.

  7. 작업에 설명을 제공하거나 기본값을 유지하고 우선 순위 수준을 설정하며, 보고서 유형을 선택하고, [완료 보고서 대상 경로(Path to completion report destination)]를 지정합니다.

  8. [권한(Permissions)] 섹션에서 앞서 정의한 Batch Operations IAM 역할을 선택해야 합니다. [Next]를 선택합니다.

  9. [검토(Review)]에서 설정을 확인합니다. 변경하려면 [이전(Previous)]을 선택합니다 Batch Operations 설정을 확인한 후 [작업 생성(Create job)]을 선택합니다.

    자세한 내용은 S3 배치 작업 건 생성 섹션을 참조하세요.

Batch Operations 작업 실행

설치 마법사가 Amazon S3 콘솔의 S3 Batch Operations 섹션으로 자동으로 돌아갑니다. 새 작업은 S3에서 프로세스를 시작할 때 [신규(New)] 상태에서 [준비 중(Preparing)] 상태로 전환됩니다. 준비 중 상태에서는 S3가 작업의 매니페스트를 읽고 오류를 확인하며 객체 수를 계산합니다.

  1. Amazon S3 콘솔에서 새로 고침 버튼을 선택하여 진행 상태를 확인합니다. 매니페스트의 크기에 따라 읽는 데 몇 분 또는 몇 시간이 걸릴 수 있습니다.

  2. S3가 작업 매니페스트 읽기를 마치면 작업이 [확인을 기다리는 중(Awaiting your confirmation)] 상태로 이전됩니다. 작업 ID 왼쪽에 있는 옵션 버튼을 선택하고 [작업 실행(Run job)]을 선택합니다.

  3. 작업에 대한 설정을 확인하고 오른쪽 하단에 있는 [작업 실행(Run job)]을 선택합니다.

    작업 실행이 시작된 후 특정 작업을 선택하거나 새로 고침 버튼을 선택하여 콘솔 대시보드 보기를 통해 진행 상태를 확인할 수 있습니다.

  4. 작업이 완료되면 [성공(Successful)] 및 [실패(Failed)] 객체 개수를 보고 모든 작업이 예상대로 수행되었는지 확인할 수 있습니다. 작업 보고서를 사용하는 경우 보고서에서 실패한 작업의 정확한 원인을 확인합니다.

    AWS CLI, SDK 또는 API를 사용하여 이 단계를 수행할 수도 있습니다. 작업 상태 및 완료 보고서 추적에 대한 자세한 내용은 작업 상태 및 완료 보고서 추적 섹션을 참조하세요.

주의 사항

S3 Batch Operations를 사용하여 버킷 키로 객체를 암호화할 때는 다음 문제를 고려합니다.

  • 데이터 전송, 요청 및 기타 요금을 포함하여 사용자를 대신해, S3 Batch Operations에서 수행하는 작업과 연관된 요금 외에도 S3 Batch Operations 작업, 객체 및 요청에 대한 요금이 청구됩니다. 자세한 내용은 Amazon S3 요금을 참조하세요.

  • 버전 관리 버킷을 사용하는 경우 수행된 각 S3 Batch Operations 작업은 암호화된 새 객체 버전을 생성합니다. 또한, 버킷 키가 구성되지 않은 이전 버전도 유지 관리합니다. 이전 버전을 삭제하려면 수명 주기 구성의 요소에서 설명한 대로, 최신 버전이 아닌 버전에 대해 S3 수명 주기 만료 정책을 설정합니다.

  • 복사 작업은 새 생성 날짜에 새 객체를 생성하므로 아카이브와 같은 수명 주기 작업에 영향을 줄 수 있습니다. 버킷의 모든 객체를 복사하는 경우,

    모든 새 사본에서 생성 날짜가 동일하거나 비슷합니다. 이러한 객체를 추가로 식별하고 다양한 데이터 하위 집합에 대해 서로 다른 수명 주기 규칙을 생성하려면 객체 태그 사용을 고려합니다.

Summary

이 섹션에서는 기존 객체를 정렬하여 이미 암호화된 데이터를 필터링합니다. 그런 다음, S3 Batch Operations를 통해 버킷 키가 활성화된 버킷에 기존 데이터를 복사하여 암호화되지 않은 객체에 버킷 키 기능을 적용했습니다. 이 프로세스를 통해 기존의 모든 객체를 암호화하는 등의 작업을 완료하면서 시간과 비용을 절약할 수 있습니다.

S3 Batch Operations에 대한 자세한 내용은 Amazon S3 객체에 대한 대규모 배치 작업 수행 섹션을 참조하세요.