Amazon S3 인벤토리 구성

Amazon S3 인벤토리 구성

Amazon S3 인벤토리는 정의한 일정에 따라 객체와 메타데이터의 평면 파일 목록을 제공해요. S3 인벤토리를 Amazon S3 동기식 List API 작업의 예약된 대안으로 사용할 수 있어요. S3 인벤토리는 객체와 해당 메타데이터를 나열하는 쉼표로 구분된 값(CSV), Apache 최적화 행 열(ORC) 또는 Apache Parquet 출력 파일을 제공해요.

출처: 문서

본문

S3 인벤토리를 구성해 S3 버킷 또는 접두사를 공유하는 객체(같은 문자열로 시작하는 이름을 가진 객체)에 대해 매일 또는 매주 인벤토리 목록을 만들 수 있어요. 자세한 내용은 S3 인벤토리로 데이터 카탈로그화 및 분석을 참고하세요.

이 섹션은 인벤토리 소스 및 대상 버킷에 대한 자세한 내용을 포함해 인벤토리를 구성하는 방법을 설명해요.

개요 (Overview)

Amazon S3 인벤토리는 정의된 일정에 따라 S3 버킷의 객체 목록을 만들어 스토리지를 관리하는 데 도움이 돼요. 버킷에 여러 인벤토리 목록을 구성할 수 있어요. 인벤토리 목록은 대상 버킷의 CSV, ORC 또는 Parquet 파일로 게시돼요.

인벤토리를 설정하는 가장 쉬운 방법은 Amazon S3 콘솔을 사용하는 것이지만, Amazon S3 REST API, AWS Command Line Interface(AWS CLI) 또는 AWS SDK도 사용할 수 있어요. 콘솔은 다음 절차의 첫 번째 단계인 대상 버킷에 버킷 정책을 추가하는 작업을 대신 수행해요.

S3 버킷에 Amazon S3 인벤토리를 설정하려면

  • 대상 버킷의 버킷 정책을 추가해요. 정의된 위치의 버킷에 객체를 쓰는 권한을 Amazon S3에 부여하는 버킷 정책을 대상 버킷에 만들어야 해요. 예시 정책은 S3 인벤토리 및 S3 분석에 대한 권한 부여를 참고하세요.
  • 소스 버킷의 객체를 나열하고 그 목록을 대상 버킷에 게시하는 인벤토리를 구성해요. 소스 버킷의 인벤토리 목록을 구성할 때는 목록을 저장할 대상 버킷과 목록을 매일 또는 매주 생성할지 여부를 지정해요. 모든 객체 버전을 나열할지 현재 버전만 나열할지와 포함할 객체 메타데이터도 구성할 수 있어요. S3 인벤토리 보고서 구성의 일부 객체 메타데이터 필드는 선택 사항이에요. 즉 기본적으로 사용할 수 있지만, 사용자에게 s3:PutInventoryConfiguration 권한을 부여할 때 제한할 수 있어요. s3:InventoryAccessibleOptionalFields 조건 키로 사용자가 보고서에 이러한 선택적 메타데이터 필드를 포함할 수 있는지 제어할 수 있어요. S3 인벤토리에서 사용할 수 있는 선택적 메타데이터 필드에 대한 자세한 내용은 Amazon Simple Storage Service API Reference의 OptionalFields를 참고하세요. 인벤토리 구성에서 특정 선택적 메타데이터 필드에 대한 접근을 제한하는 방법에 대한 자세한 내용은 S3 인벤토리 보고서 구성 생성 제어를 참고하세요. 인벤토리 목록 파일이 Amazon S3 관리형 키(SSE-S3) 또는 AWS Key Management Service(AWS KMS) 고객 관리형 키(SSE-KMS)를 사용한 서버 측 암호화로 암호화되도록 지정할 수 있어요. 참고: AWS 관리형 키(aws/s3)는 S3 인벤토리와 함께 SSE-KMS 암호화에 지원되지 않아요. SSE-S3와 SSE-KMS에 대한 자세한 내용은 서버 측 암호화로 데이터 보호를 참고하세요. SSE-KMS 암호화를 사용할 계획이라면 3단계를 참고하세요. 콘솔로 인벤토리 목록을 구성하는 방법은 S3 콘솔로 인벤토리 구성을 참고하세요. Amazon S3 API로 인벤토리를 구성하는 방법은 REST API로 S3 인벤토리 사용을 참고하세요.
  • SSE-KMS로 인벤토리 목록 파일을 암호화하려면 Amazon S3에 AWS KMS 키 사용 권한을 부여해요. Amazon S3 콘솔, Amazon S3 REST API, AWS CLI 또는 AWS SDK로 인벤토리 목록 파일의 암호화를 구성할 수 있어요. 어떤 방법을 선택하든 인벤토리 파일을 암호화하는 데 사용할 고객 관리형 키를 사용하도록 Amazon S3에 권한을 부여해야 해요. 인벤토리 파일을 암호화하는 데 사용할 고객 관리형 키의 키 정책을 수정해 Amazon S3에 권한을 부여해요. S3 인벤토리 구성이나 대상 버킷의 암호화 설정에 KMS 키 ARN을 제공했는지 확인해요. KMS 키 ARN이 지정되지 않고 기본 암호화 설정을 사용하고 있다면 S3 인벤토리 보고서에 접근할 수 없어요. 인벤토리 목록 파일을 저장하는 대상 버킷은 소스 버킷을 소유한 계정과 다른 AWS 계정이 소유할 수 있어요. Amazon S3 인벤토리의 계정 간 작업에 SSE-KMS 암호화를 사용한다면 S3 인벤토리를 구성할 때 정규화된 KMS 키 ARN을 사용할 것을 권장해요. 자세한 내용은 계정 간 작업에 SSE-KMS 암호화 사용과 Amazon Simple Storage Service API Reference의 ServerSideEncryptionByDefault를 참고하세요. 참고: S3 인벤토리 보고서에 접근할 수 없다면 GetBucketEncryption API를 사용해 대상 버킷에 기본 SSE-KMS 암호화가 활성화되어 있는지 확인해요. KMS 키 ARN이 지정되지 않고 기본 암호화 설정을 사용하고 있다면 S3 인벤토리 보고서에 접근할 수 없어요. S3 인벤토리 보고서에 다시 접근하려면 인벤토리 구성이나 대상 버킷의 암호화 설정에 KMS 키 ARN을 제공해요.

디렉터리 버킷 — S3 인벤토리는 디렉터리 버킷에서 지원돼요. 디렉터리 버킷에 S3 인벤토리를 구성할 때는 다음 차이점을 유의해요.

  • 권한 – 디렉터리 버킷의 경우 버킷 정책 대신 IAM ID 기반 정책에서 s3express:PutInventoryConfiguration과 s3express:GetInventoryConfiguration 권한을 사용해야 해요. 이 권한들은 일반 목적 버킷에 사용되는 s3: 네임스페이스가 아닌 s3express: 네임스페이스를 사용해요. 자세한 내용은 IAM으로 리전별 엔드포인트 API 작업 인가를 참고하세요.
  • 지원되는 선택적 필드 – 디렉터리 버킷에서는 다음 선택적 필드가 지원돼요: Size, LastModifiedDate, StorageClass, ETag, IsMultipartUploaded, EncryptionStatus, BucketKeyStatus, ChecksumAlgorithm, LifecycleExpirationDate.
  • 조건 키 – 디렉터리 버킷의 경우 s3express:InventoryAccessibleOptionalFields 조건 키를 사용해 인벤토리 보고서의 선택적 메타데이터 필드에 대한 접근을 제어해요.

대상 버킷 정책 생성 (Creating a destination bucket policy)

Amazon S3 콘솔로 인벤토리 구성을 만들면 Amazon S3가 대상 버킷에 버킷 쓰기 권한을 부여하는 버킷 정책을 자동으로 만들어요. 하지만 AWS CLI, AWS SDK 또는 Amazon S3 REST API로 인벤토리 구성을 만들면 대상 버킷에 버킷 정책을 직접 추가해야 해요. S3 인벤토리 대상 버킷 정책은 Amazon S3가 인벤토리 보고서 데이터를 버킷에 쓸 수 있게 해줘요.

다음은 예시 버킷 정책이에요.

JSON

{
  "Version":"2012-10-17",
  "Statement": [
    {
      "Sid": "InventoryExamplePolicy",
      "Effect": "Allow",
      "Principal": { "Service": "s3.amazonaws.com" },
      "Action": "s3:PutObject",
      "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-DESTINATION-BUCKET/*" ],
      "Condition": {
        "ArnLike": { "aws:SourceArn": "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET" },
        "StringEquals": { "aws:SourceAccount": "source-123456789012", "s3:x-amz-acl": "bucket-owner-full-control" }
      }
    }
  ]
}

자세한 내용은 S3 인벤토리 및 S3 분석에 대한 권한 부여를 참고하세요.

디렉터리 버킷 — 디렉터리 버킷의 경우 대상 버킷 정책을 직접 추가해야 해요. 디렉터리 버킷의 대상 버킷 정책은 일반 목적 버킷과 다른 서비스 보안 주체와 ARN 형식을 사용해요. 서비스 보안 주체로 s3express.amazonaws.com을 지정하고, 소스 버킷에는 디렉터리 버킷 ARN 형식을 사용해요. 다음은 디렉터리 버킷용 대상 버킷 정책의 예시예요.

{
    "Version": "2012-10-17", 
    "Statement": [
        {
            "Sid": "InventoryExamplePolicy",
            "Effect": "Allow",
            "Principal": {
                "Service": "s3express.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": [
                "arn:aws:s3:::DOC-EXAMPLE-DESTINATION-BUCKET/*"
            ],
            "Condition": {
                "ArnLike": {
                    "aws:SourceARN": "arn:aws:s3express:region:source-account-id:bucket/DOC-EXAMPLE-SOURCE-BUCKET--zone-id--x-s3"
                },
                "StringEquals": {
                    "aws:SourceAccount": "source-account-id",
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            }
        }
    ]
}

버킷 정책을 만들려다 오류가 발생하면 수정 방법에 대한 안내가 제공돼요. 예를 들어 다른 AWS 계정의 대상 버킷을 선택했는데 버킷 정책을 읽고 쓸 권한이 없다면 오류 메시지가 보여요.

이 경우 대상 버킷 소유자가 대상 버킷에 버킷 정책을 추가해야 해요. 대상 버킷에 정책이 추가되지 않으면 Amazon S3가 대상 버킷에 쓸 권한이 없으므로 인벤토리 보고서를 받지 못해요. 소스 버킷이 현재 사용자와 다른 계정이 소유한다면 정책에 소스 버킷 소유자의 올바른 계정 ID를 대입해야 해요.

참고 인벤토리 보고서가 이 버킷으로 전달되는 것을 막는 Deny 문이 대상 버킷 정책에 추가되지 않았는지 확인해요. 자세한 내용은 Amazon S3 인벤토리 보고서를 생성할 수 없는 이유는 무엇인가요?를 참고하세요.

암호화에 고객 관리형 키를 사용하도록 Amazon S3에 권한 부여 (Granting Amazon S3 permission to use your customer managed key for encryption)

서버 측 암호화에 AWS Key Management Service(AWS KMS) 고객 관리형 키를 사용하도록 Amazon S3에 권한을 부여하려면 키 정책을 사용해야 해요. 고객 관리형 키를 사용할 수 있도록 키 정책을 업데이트하려면 다음 절차를 사용해요.

고객 관리형 키로 암호화하도록 Amazon S3에 권한을 부여하는 방법은 다음과 같아요.

  1. 고객 관리형 키를 소유한 AWS 계정으로 AWS Management Console에 로그인해요.
  2. https://console.aws.amazon.com/kms에서 AWS KMS 콘솔을 열어요.
  3. AWS 리전을 변경하려면 페이지 오른쪽 위의 리전 선택기를 사용해요.
  4. 왼쪽 탐색 창에서 Customer managed keys를 선택해요.
  5. Customer managed keys 아래에서 인벤토리 파일을 암호화하는 데 사용할 고객 관리형 키를 선택해요.
  6. Key policy 섹션에서 Switch to policy view를 선택해요.
  7. 키 정책을 업데이트하려면 Edit를 선택해요.
  8. Edit key policy 페이지에서 기존 키 정책에 다음 줄을 추가해요. source-account-id와 amzn-s3-demo-source-bucket에는 사용 사례에 맞는 값을 입력해요.
{
  "Sid": "Allow Amazon S3 use of the customer managed key",
  "Effect": "Allow",
  "Principal": { "Service": "s3.amazonaws.com" },
  "Action": [ "kms:GenerateDataKey" ],
  "Resource": "*",
  "Condition":{
    "StringEquals":{ "aws:SourceAccount":"source-account-id" },
    "ArnLike":{ "aws:SourceARN": "arn:aws:s3:::amzn-s3-demo-source-bucket" }
  }
}
  1. Save changes를 선택해요.

고객 관리형 키 생성과 키 정책 사용에 대한 자세한 내용은 AWS Key Management Service Developer Guide의 다음 링크를 참고하세요.

디렉터리 버킷 — 디렉터리 버킷의 경우 KMS 키 정책은 일반 목적 버킷과 다른 서비스 보안 주체와 소스 ARN 형식을 사용해요. 서비스 보안 주체로 s3express.amazonaws.com을 지정하고, 소스 ARN에는 디렉터리 버킷 ARN 형식을 사용해요. 다음은 디렉터리 버킷용 키 정책 문의 예시예요.

{
    "Sid": "Allow S3 Express use of the KMS key",
    "Effect": "Allow",
    "Principal": {
        "Service": "s3express.amazonaws.com"
    },
    "Action": [
        "kms:GenerateDataKey"
    ],
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "aws:SourceAccount": "source-account-id"
        },
        "ArnLike": {
            "aws:SourceARN": "arn:aws:s3express:region:source-account-id:bucket/DOC-EXAMPLE-SOURCE-BUCKET--zone-id--x-s3"
        }
    }
}

참고 인벤토리 보고서가 이 버킷으로 전달되는 것을 막는 Deny 문이 대상 버킷 정책에 추가되지 않았는지 확인해요. 자세한 내용은 Amazon S3 인벤토리 보고서를 생성할 수 없는 이유는 무엇인가요?를 참고하세요.

S3 콘솔로 인벤토리 구성 (Configuring inventory by using the S3 console)

다음 안내에 따라 S3 콘솔로 인벤토리를 구성해요.

참고 Amazon S3가 첫 번째 인벤토리 보고서를 전달하는 데 최대 48시간이 걸릴 수 있어요.

  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 열어요.
  2. 왼쪽 탐색 창에서 General purpose buckets를 선택해요. 참고: 디렉터리 버킷용 S3 인벤토리 구성은 Amazon Simple Storage Service 콘솔에서 지원되지 않아요. 디렉터리 버킷용 S3 인벤토리를 구성하려면 Amazon S3 REST API, AWS Command Line Interface(AWS CLI) 또는 AWS SDK를 사용해요.
  3. 버킷 목록에서 Amazon S3 인벤토리를 구성할 버킷의 이름을 선택해요.
  4. Management 탭을 선택해요.
  5. Inventory configurations 아래에서 Create inventory configuration을 선택해요.
  6. Inventory configuration name에 이름을 입력해요.
  7. Inventory scope에서 다음을 수행해요. 선택적 접두사를 입력해요. 접두사에 버킷 이름을 포함하지 마세요. 포함할 객체 버전을 선택해요. Current versions only 또는 Include all versions 중 하나예요.
  8. Report details 아래에서 보고서를 저장할 AWS 계정의 위치를 선택해요: This account 또는 A different account.
  9. Destination 아래에서 인벤토리 보고서를 저장할 대상 버킷을 선택해요. 대상 버킷은 인벤토리를 설정하는 버킷과 같은 AWS 리전에 있어야 해요. 대상 버킷은 다른 AWS 계정에 있을 수 있어요. 대상 버킷을 지정할 때 인벤토리 보고서를 함께 묶을 선택적 접두사도 포함할 수 있어요. Destination 버킷 필드 아래에는 Amazon S3가 해당 버킷에 데이터를 넣을 수 있도록 대상 버킷 정책에 추가되는 Destination bucket permission 문이 보여요. 자세한 내용은 대상 버킷 정책 생성을 참고하세요.
  10. Frequency 아래에서 보고서 생성 빈도를 선택해요: Daily 또는 Weekly.
  11. Output format에서 보고서의 형식 중 하나를 선택해요.
    • CSV – 이 인벤토리 보고서를 S3 Batch Operations와 함께 사용하거나 Microsoft Excel 같은 다른 도구에서 분석하려면 CSV를 선택해요.
    • Apache ORC
    • Apache Parquet
  12. Status 아래에서 Enable 또는 Disable을 선택해요.
  13. 서버 측 암호화를 구성하려면 Inventory report encryption 아래에서 다음 단계를 따라요.
    • Server-side encryption 아래에서 데이터를 암호화할 Do not specify an encryption key 또는 Specify an encryption key를 선택해요. Amazon S3에 저장할 때 객체의 기본 서버 측 암호화에 버킷 설정을 유지하려면 Do not specify an encryption key를 선택해요. 대상 버킷에서 S3 Bucket Keys가 활성화되어 있는 한 복사 작업은 대상 버킷에 S3 Bucket Key를 적용해요. 참고: 지정된 대상의 버킷 정책이 Amazon S3에 저장하기 전에 객체 암호화를 요구한다면 Specify an encryption key를 선택해야 해요. 그렇지 않으면 대상으로 객체를 복사하는 것이 실패해요. Amazon S3에 저장하기 전에 객체를 암호화하려면 Specify an encryption key를 선택해요.
    • Specify an encryption key를 선택했다면 Encryption type 아래에서 Amazon S3 managed key (SSE-S3) 또는 AWS Key Management Service key (SSE-KMS) 중 하나를 선택해야 해요. SSE-S3는 가장 강력한 블록 암호 중 하나인 256비트 고급 암호화 표준(AES-256)을 사용해 각 객체를 암호화해요. SSE-KMS는 키에 대한 더 많은 제어권을 제공해요. SSE-S3에 대한 자세한 내용은 Amazon S3 관리형 키(SSE-S3)를 사용한 서버 측 암호화를 참고하세요. SSE-KMS에 대한 자세한 내용은 AWS KMS 키(SSE-KMS)를 사용한 서버 측 암호화를 참고하세요. 참고: SSE-KMS로 인벤토리 목록 파일을 암호화하려면 고객 관리형 키를 사용하도록 Amazon S3에 권한을 부여해야 해요. 안내는 KMS 키로 암호화하도록 Amazon S3에 권한 부여를 참고하세요.
    • **AWS Key Management Service key (SSE-KMS)**를 선택했다면 AWS KMS key 아래에서 다음 옵션 중 하나로 AWS KMS 키를 지정할 수 있어요. 참고: 인벤토리 목록 파일을 저장하는 대상 버킷이 다른 AWS 계정이 소유한다면 정규화된 KMS 키 ARN을 사용해야 해요.
  14. Additional metadata fields에서 인벤토리 보고서에 추가할 필드를 하나 이상 선택해요.
    • Size – 불완전한 멀티파트 업로드, 객체 메타데이터, 삭제 마커의 크기를 제외한 객체 크기(바이트)예요.
    • Last modified date – 객체 생성 날짜 또는 마지막 수정 날짜 중 더 최신인 날짜예요.
    • Multipart upload – 객체가 멀티파트 업로드로 업로드되었음을 지정해요. 자세한 내용은 Amazon S3에서 멀티파트 업로드로 객체 업로드 및 복사를 참고하세요.
    • Replication status – 객체의 복제 상태예요. 자세한 내용은 복제 상태 정보 가져오기를 참고하세요.
    • Encryption status – 객체를 암호화하는 데 사용된 서버 측 암호화 유형이에요. 자세한 내용은 서버 측 암호화로 데이터 보호를 참고하세요.
    • Bucket Key status – AWS KMS가 생성한 버킷 수준 키가 객체에 적용되는지 여부를 나타내요. 자세한 내용은 Amazon S3 Bucket Keys로 SSE-KMS 비용 절감을 참고하세요.
    • Object access control list – 어떤 AWS 계정이나 그룹에 이 객체에 대한 접근이 부여되는지와 부여된 접근 유형을 정의하는 각 객체의 ACL이에요. 이 필드에 대한 자세한 내용은 Object ACL 필드 사용을 참고하세요. ACL에 대한 자세한 내용은 접근 제어 목록(ACL) 개요를 참고하세요.
    • Object owner – 객체의 소유자예요.
    • Storage class – 객체 저장에 사용되는 스토리지 클래스예요.
    • Intelligent-Tiering: Access tier – 객체가 S3 Intelligent-Tiering 스토리지 클래스에 저장된 경우의 액세스 계층(빈번 또는 비빈번)을 나타내요. 자세한 내용은 변화하거나 알 수 없는 접근 패턴이 있는 데이터를 자동으로 최적화하는 스토리지 클래스를 참고하세요.
    • ETag – ETag(엔터티 태그)는 객체의 해시예요.
    • Checksum algorithm – 객체의 체크섬을 만드는 데 사용된 알고리즘을 나타내요.
    • S3 Object Lock: Retain until date – 잠긴 객체를 삭제할 수 없는 날짜예요.
    • S3 Object Lock: Retention mode – 잠긴 객체에 적용된 보존 모드예요.
    • S3 Object Lock: Legal hold status – 객체에 법적 보존이 적용되었는지 여부예요.
    • S3 Object Lock: Event hold status – 객체에 적용된 이벤트 보존 상태예요.
    • S3 Object Lock: Event hold duration – 객체에 구성된 이벤트 보존 기간이에요.
    • Version ID – 객체 버전 ID예요.
    • Is Latest – 객체가 현재 버전인지 여부예요.
    • Delete marker – 객체가 삭제 마커인지 여부예요.
    • Lifecycle expiration date – 객체의 수명주기 만료 날짜예요.
  15. Create를 선택해요.

REST API로 S3 인벤토리 사용 (Using the REST API to work with S3 Inventory)

다음은 Amazon S3 인벤토리 작업에 사용할 수 있는 REST 작업이에요.

더 알아보기 (Learn more)