메뉴
Amazon Simple Storage Service
개발자 안내서 (API Version 2006-03-01)

Amazon S3 인벤토리

Amazon S3 인벤토리는 스토리지 관리에 도움이 되는 Amazon S3의 도구 중 하나입니다. 이 인벤토리를 사용하여 비즈니스, 규정 준수 및 규제 요건에 대한 객체의 복제 및 암호화 상태를 감사하고 보고할 수 있습니다. 또한 Amazon S3 동기식 List API 작업의 대안으로 Amazon S3 인벤토리를 사용하면 비즈니스 워크플로우 및 빅 데이터 업무를 단순화하고 속도를 높일 수 있습니다.

Amazon S3 인벤토리는 S3 버킷 또는 공유 접두사에 대해 매일 혹은 매주 객체 및 해당 메타데이터의 CSV(쉼표로 구분되는 값) 또는 Apache ORC(Optimized Row Columnar) 파일 출력을 가능하게 합니다(즉, 공통 문자열로 시작하는 이름을 가진 객체). Amazon S3 인벤토리 요금에 대한 자세한 내용은 Amazon S3 요금을 참조하십시오.

하나의 버킷에 대해 복수의 인벤토리 목록을 구성할 수 있습니다. 인벤토리에 포함시킬 객체 메타데이터, 모든 객체 버전을 목록에 포함시킬 것인지 혹은 최신 버전만을 목록에 포함시킬 것인지, 인벤토리 목록 파일 출력을 저장할 위치, 인벤토리를 매일 생성할 것인지 혹은 매주 생성할 것인지를 설정할 수 있습니다. 인벤토리 목록 파일을 암호화하도록 지정할 수도 있습니다.

Amazon Athena, Amazon Redshift Spectrum 및 기타 도구(예: Presto, Apache Hive, Apache Spark)를 사용하여 표준 SQL을 통해 Amazon S3 인벤토리를 쿼리할 수 있습니다. Athena를 사용하면 인벤토리 파일에 대한 쿼리를 쉽게 실행할 수 있습니다. Athena가 사용 가능한 모든 리전에서 Athena를 사용하여 S3 인벤토리를 쿼리할 수 있습니다.

Amazon S3 인벤토리 설정은 어떻게 합니까?

이 단원에서는 인벤토리 원본 및 대상 버킷에 대한 세부 정보를 비롯하여 인벤토리를 설정하는 방법에 대해 설명합니다.

Amazon S3 인벤토리 원본 및 대상 버킷

인벤토리가 객체를 열거하는 버킷을 원본 버킷이라고 합니다. 인벤토리 목록 파일이 저장되는 버킷을 대상 버킷이라고 합니다.

원본 버킷

인벤토리는 원본 버킷에 저장되어 있는 객체를 열거합니다. 전체 버킷에 대한 인벤토리 목록 또는 (객체 키 이름) 접두사로 필터링한 인벤토리 목록을 생성할 수 있습니다.

원본 버킷:

  • 인벤토리에 열거되어 있는 객체를 포함합니다.

  • 인벤토리 구성을 포함합니다.

대상 버킷

Amazon S3 인벤토리 목록 파일이 대상 버킷에 작성됩니다. 대상 버킷 내 일반적인 위치에 있는 모든 인벤토리 목록 파일을 그룹화하려면 인벤토리 구성에서 대상(객체 키 이름) 접두사를 지정할 수 있습니다.

대상 버킷:

  • 인벤토리 파일 목록을 포함합니다.

  • 대상 버킷에 저장되어 있는 모든 파일 인벤토리 목록이 열거된 매니페스트 파일을 포함합니다. 자세한 내용은 인벤토리 매니페스트는 무엇입니까? 단원을 참조하십시오.

  • Amazon S3가 버킷의 소유권을 검증하고 파일을 버킷에 쓸 수 있도록 허용하는 버킷 정책이 반드시 있어야 합니다.

  • 원본 버킷과 동일한 AWS 리전에 있어야 합니다.

  • 원본 버킷과 같을 수 있습니다.

  • 원본 버킷을 소유한 계정과 다른 AWS 계정에서 소유할 수 있습니다.

Amazon S3 인벤토리 설정

Amazon S3 인벤토리를 사용하면 정해진 일정에 객체 목록이 S3 버킷에 생성되므로 스토리지를 용이하게 관리할 수 있습니다. 하나의 버킷에 대해 복수의 인벤토리 목록을 구성할 수 있습니다. 인벤토리 목록은 대상 버킷에 있는 CSV 또는 ORC 파일에 게시됩니다.

인벤토리를 설정하는 가장 쉬운 방법은 AWS Management Console을 사용하는 것이지만, REST API, AWS CLI 또는 AWS SDK를 사용할 수도 있습니다. 콘솔에서는 대상 버킷에 버킷 정책을 추가하는 절차의 첫 번째 단계를 자동으로 수행합니다.

S3 버킷의 Amazon S3 인벤토리 설정

  1. 대상 버킷의 버킷 정책을 추가합니다.

    객체를 정해진 위치에 있는 버킷에 쓸 수 있는 권한을 Amazon S3에 부여하는 버킷 정책을 대상 버킷 상에 생성해야 합니다. 정책에 대한 예는 Amazon S3 인벤토리 및 Amazon S3 분석에 권한 부여을 참조하십시오.

  2. 원본 버킷에 있는 객체를 열거하여 대상 버킷에 목록을 게시하도록 인벤토리를 구성합니다.

    원본 버킷에 대한 인벤토리 목록을 구성할 때 목록을 저장하고자 하는 대상 버킷을 지정하고 목록을 매일 혹은 매주 생성할지 정합니다. 또한 포함시킬 객체 메타데이터와 모든 객체 버전을 목록에 포함시킬지 아니면 최신 버전만을 목록에 포함시킬지 구성할 수 있습니다.

    Amazon S3 관리형 키(SSE-S3) 또는 AWS KMS 관리형 키(SSE-KMS)를 사용하여 인벤토리 목록 파일을 암호화하도록 지정할 수 있습니다. SSE-S3 및 SSE-KMS에 대한 자세한 내용은 서버 측 암호화를 사용하여 데이터 보호 단원을 참조하십시오. SSE-KMS 암호화를 사용하려면 3단계를 참조하십시오.

    • 콘솔을 사용하여 인벤토리 목록을 구성하는 방법에 대한 자세한 내용은 Amazon S3 인벤토리를 구성하려면?(출처: Amazon Simple Storage Service 콘솔 사용 설명서)를 참조하십시오.

    • Amazon S3 API를 사용하여 인벤토리 목록을 구성하려면, PUT 버킷 인벤토리 구성의 REST API 또는 AWS CLI나 AWS SDK의 동일한 기능을 사용하면 됩니다.

  3. SSE-KMS를 사용하여 인벤토리 목록 파일을 암호화하려면 Amazon S3에 AWS KMS 키 사용 권한을 부여합니다.

    AWS Management Console, REST API, AWS CLI 또는 AWS SDK를 사용하여 인벤토리 목록 파일에 대한 암호화를 구성할 수 있습니다. 어느 방법을 선택하든 인벤토리 파일을 암호화하려면 Amazon S3에 AWS KMS CMK(고객 마스터 키) 사용 권한을 부여해야 합니다. 인벤토리 파일을 암호화하는 데 사용 중인 AWS KMS CMK에 대한 키 정책을 수정하여 Amazon S3 권한을 부여합니다. 자세한 정보는 다음 섹션을 참조하십시오, Amazon S3에 AWS KMS 키를 사용하여 암호화할 수 있는 권한 부여.

Amazon S3에 AWS KMS 키를 사용하여 암호화할 수 있는 권한 부여

Amazon S3에 키 정책에 따라 AWS KMS 키를 사용하여 암호화할 수 있는 권한을 부여해야 합니다. 다음 절차에서는 AWS Identity and Access Management(IAM) 콘솔을 사용하여 인벤토리 파일을 암호화하는 데 사용되는 AWS KMS CMK에 대한 키 정책을 수정하는 방법을 설명합니다.

AWS KMS 키를 사용하여 암호화 권한을 부여하려면

  1. AWS KMS CMK를 소유한 AWS 계정을 사용하여 AWS Management Console에 로그인하고 https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 [Encryption keys]를 선택합니다.

  3. [Region]에서 적절한 AWS 리전을 선택합니다. 탐색 모음(오른쪽 상단 모서리)에서 리전 선택기를 사용하지 마십시오.

  4. 인벤토리를 암호화할 CMK의 별칭을 선택합니다.

  5. 페이지의 [Key Policy] 섹션에서 [Switch to policy view]를 선택합니다.

  6. [Key Policy] 편집기를 사용하여 기존 정책에 다음 키 정책을 삽입한 다음 [Save Changes]를 선택합니다. 기존 정책의 끝에 정책을 복사할 수도 있습니다.

    Copy
    { "Sid": "Allow Amazon S3 use of the key", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": [ "kms:GenerateDataKey*" ], "Resource": "*" }

AWS KMS PUT 키 정책 API PutKeyPolicy를 사용하여 인벤토리 파일을 암호화하는 데 사용 중인 CMK에 키 정책을 복사할 수도 있습니다. AWS KMS CMK 생성 및 편집에 대한 자세한 내용은 AWS Key Management Service Developer Guide시작하기를 참조하십시오.

Amazon S3 인벤토리에 포함된 항목은 무엇입니까?

인벤토리 목록 파일에는 원본 버킷에 있는 객체의 목록과 각 객체의 메타데이터가 포함됩니다. 인벤토리 목록은 대상 버킷에 GZIP으로 압축된 CSV 파일 또는 Apache ORC(Optimized Row Columnar) 파일로 저장됩니다.

인벤토리 목록에는 S3 버킷에 있는 객체 목록과 목록 상의 각 객체에 대한 다음의 메타데이터가 포함됩니다.

  • Bucket name – 인벤토리 대상 버킷의 이름.

  • Key name – 버킷에 있는 객체를 고유하게 식별하는 객체 키 이름(또는 키).

  • Version ID – 객체 버전 ID. 버전 관리를 사용하는 버킷의 경우 Amazon S3는 버킷에 추가된 객체에 버전 번호를 지정합니다. 자세한 내용은 객체 버전 관리 단원을 참조하십시오. (목록에 최신 버전의 객체만 있을 경우 이 필드는 포함되지 않습니다.)

  • IsLatest – 객체가 최신 버전인 경우 True로 설정합니다. (목록에 최신 버전의 객체만 있을 경우 이 필드는 포함되지 않습니다.)

  • Size – 객체 크기(바이트).

  • Last modified date – 객체 생성일 또는 최종 수정일 중 최근 날짜.

  • ETag – 개체 태그는 객체의 해시입니다. ETag는 객체의 콘텐츠에 대한 변경 사항만 반영하고 메타데이터에 대한 변경을 반영하지 않습니다. ETag는 객체 데이터의 MD5 다이제스트일 수도 아닐 수도 있습니다. 다이제스트인지 여부는 객체 생성 방식 및 암호화 방식에 좌우됩니다.

  • Storage class – 객체 저장에 사용되는 스토리지 클래스. 자세한 내용은 스토리지 클래스 섹션을 참조하십시오.

  • Multipart upload flag – 객체가 멀티파트 업로드로 업로드된 경우 True로 설정합니다. 자세한 내용은 멀티파트 업로드 개요 섹션을 참조하십시오.

  • Delete marker – 객체가 삭제 마커인 경우 True로 설정합니다. 자세한 내용은 객체 버전 관리 단원을 참조하십시오. (목록에 최신 버전의 객체만 있을 경우 이 필드는 포함되지 않습니다.)

  • Replication statusPENDING, COMPLETED, FAILED 또는 REPLICA.로 설정합니다. 자세한 내용은 교차 리전 복제 상태 찾기 단원을 참조하십시오.

  • Encryption statusSSE-S3, SSE-C, SSE-KMS 또는 NOT-SSE로 설정합니다. SSE-S3, SSE-KMS 및 고객 제공 키를 사용하는 SSE(SSE-C)에 대한 서버 측 암호화 상태입니다. NOT-SSE 상태는 객체가 서버 측 암호화를 사용하여 암호화되지 않은 것을 의미합니다. 자세한 내용은 암호화를 사용하여 데이터 보호 단원을 참조하십시오.

다음은 스프레드시트 애플리케이션에 열려 있는 CSV 인벤토리 목록의 예입니다. 머리글 행은 예를 설명하기 위한 것으로, 실제 목록에는 포함되지 않습니다.

 스프레드시트 애플리케이션에 열려 있는 인벤토리 목록의 예제 스크린샷

오래된 인벤토리 목록을 삭제하는 수명 주기 정책을 생성할 것을 권장합니다. 자세한 내용은 객체 수명 주기 관리 단원을 참조하십시오.

인벤토리 일관성

모든 객체가 각 인벤토리 목록에 나타나지 않을 수도 있습니다. 인벤토리 목록은 새 객체 및 덮어쓰기의 PUT에 대한 최종 일관성과 DELETE에 대한 최종 일관성을 제공합니다. 인벤토리 목록은 최종 일관성을 지닌 버킷 항목의 롤링 스냅샷입니다(즉, 최근에 추가되거나 삭제된 객체가 목록에 포함되지 않을 수 있습니다).

객체에 대한 작업을 수행하기 전에 객체 상태의 유효성을 검증하기 위해 객체의 메타데이터를 가져오도록 HEAD Object REST API 요청을 수행하거나 Amazon S3 콘솔에서 객체의 속성을 확인합니다. AWS CLI 또는 AWS SDKS를 사용하여 객체 메타데이터를 확인할 수도 있습니다. 자세한 내용은 Amazon Simple Storage Service API ReferenceHEAD Object를 참조하십시오.

인벤토리 목록의 위치는 어디입니까?

매니페스트 파일은 인벤토리 목록이 게시될 때 대상 버킷의 다음 위치에 게시됩니다.

Copy
destination-prefix/source-bucket/config-ID/YYYY-MM-DDTHH-MMZ/manifest.json destination-prefix/source-bucket/config-ID/YYYY-MM-DDTHH-MMZ/manifest.checksum destination-prefix/source-bucket/config-ID/hive/dt=YYYY-MM-DD-HH-MM/symlink.txt
  • destination-prefix는 인벤토리 구성에서 설정하여 대상 버킷 내의 일반적인 위치에 있는 모든 인벤토리 목록 파일을 그룹화하는 데 사용할 수 있는 (객체 키 이름) 접두사입니다.

  • source-bucket은 인벤토리 목록에 객체가 열거되는 버킷입니다. 여러 원본 버킷에서 복수의 인벤토리 보고서가 동일한 대상 버킷으로 전송되는 경우 충돌을 방지하기 위해 추가됩니다.

  • config-ID는 동일한 원본 버킷에서 동일한 대상 버킷으로 복수의 인벤토리 보고서가 전송되는 경우 이들의 충돌을 방지하기 위해 추가됩니다.

  • YYYY-MM-DDTHH-MMZ는 인벤토리 목록이 생성된 날짜입니다. 예: 2016-11-06T21-32Z.

  • manifest.json은 매니페스트 파일입니다.

  • manifest.checksummanifest.json 파일 콘텐츠의 MD5입니다.

  • symlink.txt는 Apache Hive 호환 매니페스트 파일입니다.

인벤토리 목록은 매일 또는 매주 대상 버킷의 다음 위치에 게시됩니다.

Copy
destination-prefix/source-bucket/data/example-file-name.csv.gz ... destination-prefix/source-bucket/data/example-file-name-1.csv.gz
  • destination-prefix는 인벤토리 구성에서 설정되는 (객체 키 이름) 접두사이며, 대상 버킷 내의 일반적인 위치에 있는 모든 인벤토리 목록 파일을 그룹화하는 데 사용할 수 있습니다.

  • source-bucket은 인벤토리 목록에 객체가 열거되는 버킷입니다. 여러 원본 버킷에서 복수의 인벤토리 보고서가 동일한 대상 버킷으로 전송되는 경우 충돌을 방지하기 위해 추가됩니다.

  • example-file-name.csv.gz는 CSV 인벤토리 파일의 하나입니다. ORC 인벤토리 이름은 파일 이름 확장자가 .orc로 끝납니다.

인벤토리 매니페스트는 무엇입니까?

매니페스트 파일 manifest.jsonsymlink.txt는 인벤토리 파일의 위치에 대해 설명합니다. 새 인벤토리 목록이 제공될 때마다 새 매니페스트 파일 세트가 함께 제공됩니다.

manifest.json 파일에 포함된 각 매니페스트에는 인벤토리에 대한 기타 기본 정보와 메타데이터가 들어 있습니다. 이 정보에는 원본 버킷 이름, 대상 버킷 이름, 인벤토리 버전, 인벤토리 파일의 형식 및 스키마, 대상 버킷에 있는 인벤토리 파일의 실제 목록 등이 포함됩니다. manifest.json 파일이 쓰여질 때마다 manifest.json 파일 콘텐츠의 MD5인 manifest.checksum 파일이 수반됩니다.

다음은 CSV 형식 인벤토리에 대해 manifest.json 파일에 있는 매니페스트의 예입니다.

Copy
{ "sourceBucket": "example-source-bucket", "destinationBucket": "example-inventory-destination-bucket", "version": "2016-11-30", "fileFormat": "CSV", "fileSchema": "Bucket, Key, VersionId, IsLatest, IsDeleteMarker, Size, LastModifiedDate, ETag, StorageClass, MultipartUploaded, ReplicationStatus", "files": [ { "key": "Inventory/example-source-bucket/2016-11-06T21-32Z/files/939c6d46-85a9-4ba8-87bd-9db705a579ce.csv.gz", "size": 2147483647, "MD5checksum": "f11166069f1990abeb9c97ace9cdfabc", "inventoriedRecord": 58050695 } ] }

다음은 ORC 형식 인벤토리에 대해 manifest.json 파일에 있는 매니페스트의 예입니다.

Copy
{ "sourceBucket": "example-source-bucket", "destinationBucket": "arn:aws:s3:::example-destination-bucket", "version": "2016-11-30", "fileFormat": "ORC", "fileSchema": "struct<bucket:string,key:string,version_id:string,is_latest:boolean,is_delete_marker:boolean,size:bigint,last_modified_date:timestamp,e_tag:string,storage_class:string,is_multipart_uploaded:boolean,replication_status:string,encryption_status:string>", "files": [ { "key": "inventory/example-source-bucket/data/d794c570-95bb-4271-9128-26023c8b4900.orc", "size": 56291, "MD5checksum": "5925f4e78e1695c2d020b9f6eexample" } ] }

symlink.txt 파일은 Apache Hive 호환 매니페스트 파일이며, Hive에서 인벤토리 파일과 연결된 데이터 파일을 자동으로 검색할 수 있도록 해줍니다. Hive 호환 매니페스트는 Athena, AWS Glue, Amazon Redshift Spectrum 등과 같은 Hive 호환 서비스와 함께 작동합니다. 또한 Presto, Apache Hive, Apache Spark 등과 같은 Hive 호환 애플리케이션과 함께 작동합니다.

인벤토리가 완료되는 시점을 어떻게 알 수 있습니까?

매니페스트 체크섬 파일이 생성될 때 인벤토리 목록이 대상 버킷에 추가되었음을 알려 주는 통보를 수신하도록 Amazon S3 이벤트 알림을 설정할 수 있습니다. 매니페스트는 대상 위치에 있는 모든 인벤토리 목록의 최신 목록입니다.

Amazon S3는 이벤트를 Amazon Simple Notification Service(Amazon SNS) 주제, Amazon Simple Queue Service(Amazon SQS) 대기열 또는 AWS Lambda 기능에 게시할 수 있습니다. 자세한 내용은 Amazon S3 이벤트 알림 구성 단원을 참조하십시오.

다음의 알림 구성은 대상 버킷에 새롭게 추가된 모든 manifest.checksum 파일이 AWS Lambda cloud-function-list-write에 의해 처리되도록 구성합니다.

Copy
<NotificationConfiguration> <QueueConfiguration> <Id>1</Id> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>destination-prefix/source-bucket</Value> </FilterRule> <FilterRule> <Name>suffix</Name> <Value>checksum</Value> </FilterRule> </S3Key> </Filter> <Cloudcode>arn:aws:lambda:us-west-2:222233334444:cloud-function-list-write</Cloudcode> <Event>s3:ObjectCreated:*</Event> </QueueConfiguration> </NotificationConfiguration>

자세한 내용은 AWS Lambda Developer Guide에서 Amazon S3와 AWS Lambda 사용하기 단원을 참조하십시오.

Amazon Athena로 인벤토리 쿼리

Athena가 사용 가능한 모든 리전에서 Amazon Athena를 사용하여 표준 SQL로 Amazon S3 인벤토리를 쿼리할 수 있습니다. AWS 리전 가용성을 확인하려면 AWS 리전 표를 참조하십시오.

Athena는 Amazon S3 인벤토리 파일을 ORC 또는 CSV 형식으로 쿼리할 수 있습니다. Athena를 사용하여 인벤토리를 쿼리할 경우 CSV 대신 ORC 형식 인벤토리 파일을 사용하는 것이 좋습니다. ORC는 더 빠른 쿼리 성능을 제공하지만 쿼리 비용이 더 저렴합니다. ORC는 Apache Hadoop용으로 설계된 자기 기술성 유형 인식 컬럼 방식의 파일 형식입니다. 이 컬럼 방식의 형식을 통해 리더가 현재 쿼리에 필요한 컬럼만 읽고 압축 해제하며 처리합니다. Amazon S3 인벤토리에 대한 ORC 형식은 모든 AWS 리전에서 사용할 수 있습니다.

Athena를 사용하여 Amazon S3 인벤토리 쿼리를 시작하려면

  1. Athena 테이블을 생성합니다. 테이블 생성에 대한 자세한 내용은 Amazon Athena 사용 설명서시작하기를 참조하십시오.

    다음 쿼리 예에는 인벤토리 보고서의 모든 선택적 필드가 포함되어 있습니다. 쿼리가 인벤토리에 대해 선택한 필드와 일치하도록 인벤토리에 대해 선택하지 않은 선택적 필드를 삭제합니다. 또한 버킷 이름과 위치를 사용해야 합니다. 위치는 인벤토리 대상 경로(예: destination-prefix/source-bucket/config-ID/hive)를 가리킵니다.

    Copy
    CREATE EXTERNAL TABLE your-table-name( `destination-bucket-name` string, key string, version_id string, is_latest boolean, is_delete_marker boolean, size bigint, last_modified_date timestamp, e_tag string, storage_class string, is_multipart_uploaded boolean, replication_status string, encryption_status string ) PARTITIONED BY (dt string) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.orc.OrcSerde' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat' LOCATION 's3://destination-prefix/source-bucket/config-ID/hive';
  2. 테이블에 새 인벤토리 목록을 추가하려면 다음 MSCK REPAIR TABLE 명령을 사용합니다.

    Copy
    MSCK REPAIR TABLE your-table-name;
  3. 처음 두 단계를 수행한 후 다음 예제와 같이 인벤토리에 대해 임시 쿼리를 실행할 수 있습니다.

    Copy
    SELECT encryption_status, count(*) FROM your-table-name GROUP BY encryption_status;

Athena 사용에 대한 자세한 내용은 Amazon Athena 사용 설명서 단원을 참조하십시오.

다음은 Amazon S3 인벤토리에 사용되는 REST 작업입니다.