S3 Metadata 저널 테이블 스키마

S3 Metadata 저널 테이블 스키마 (S3 Metadata journal tables schema)

저널 테이블은 데이터에 대한 변경 사항을 거의 실시간으로 기록해서, 버킷에 업로드된 새 데이터를 식별하고 최근 삭제된 객체를 추적하고 수명주기 전환을 모니터링하는 데 도움을 줘요. 저널 테이블은 새 객체와 객체 및 해당 메타데이터에 대한 업데이트(PUT 또는 DELETE 작업이 필요한 업데이트)를 기록해요. 이 테이블은 조회 가능하므로 단순한 SQL 쿼리로 버킷의 변경 사항을 감사할 수 있어요.

출처: 문서

본문

저널 테이블은 보안, 감사 및 규정 준수 사용 사례에서 버킷에서 업로드, 삭제, 변경된 객체를 추적하는 데 사용할 수 있어요. 예를 들어 저널 테이블을 조회해 다음과 같은 질문에 답할 수 있어요.

  • 지난 24시간 동안 S3 Lifecycle이 삭제한 객체는 무엇인가요?
  • 가장 최근의 PUT 요청은 어떤 IP 주소에서 왔나요?
  • 지난 7일 동안 PUT 요청에 사용된 AWS Key Management Service(AWS KMS) 키는 무엇인가요?
  • 지난 5일 동안 Amazon Bedrock이 만든 버킷의 객체는 무엇인가요?

Amazon S3 Metadata 저널 테이블에는 행과 열이 있어요. 각 행은 범용 버킷에서 객체를 생성, 업데이트 또는 삭제한 변형(mutation) 이벤트를 나타내요. 이러한 이벤트의 대부분은 사용자 작업에서 발생하지만, 일부는 S3 Lifecycle 만료나 스토리지 클래스 전환처럼 Amazon S3가 사용자를 대신해 수행하는 작업에서 발생해요.

S3 Metadata 저널 테이블은 범용 버킷에서 발생한 변경 사항과 최종적으로 일관성(eventually consistent)을 가져요. 어떤 경우에는 S3 Metadata가 객체가 생성되거나 업데이트되었다는 알림을 받을 즈음, 그 객체가 이미 버킷에서 덮어써지거나 삭제됐을 수 있어요. 그런 경우 객체를 더 이상 검색할 수 없고, 일부 열은 누락된 메타데이터 스키마를 나타내는 NULL 값을 보여줄 수 있어요.

다음은 amzn-s3-demo-bucket이라는 범용 버킷의 저널 테이블 예시예요.

bucket                key                        sequence_number                                                                                          record_type   record_timestamp           version_id   is_delete_marker   size   last_modified_date   e_tag	                           storage_class  is_multipart   encryption_status   is_bucket_key_enabled   kms_key_arn                                                                   checksum_algorithm   object_tags   user_metadata	                                                                                                                 requester      source_ip_address   request_id 
amzn-s3-demo-bucket   Finance/statement1.pdf     80e737d8b4d82f776affffffffffffffff006737d8b4d82f776a00000000000000000000000000000000000000000000000072   CREATE        2024-11-15 23:26:44.899                 FALSE              6223   11/15/2024 23:26     e131b86632dda753aac4018f72192b83    STANDARD	  FALSE          SSE-KMS             FALSE                   arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890df   SSECRC32             {}            {count -> Asia, customs -> false, family -> true, location -> Mary, name -> football, user -> United States}                       111122223333   192.0.2.1           CVK8FWYRW0M9JW65
amzn-s3-demo-bucket   s3-dg.pdf                  80e737d8b4e39f1dbdffffffffffffffff006737d8b4e39f1dbd00000000000000000000000000000000000000000000000072   CREATE        2024-11-15 23:26:44.942                 FALSE              3554   11/15/2024 23:26     9bb49efc2d92c05558ddffbbde8636d5    STANDARD	  FALSE          DSSE-KMS            FALSE                   arn:aws:kms:us-east-1:936810216292:key/0dcebce6-49fd-4cae-b2e2-5512ad281afd   SSESHA1              {}            {}                                                                                                                                 111122223333   192.0.2.1           CVKAQDRAZEG7KXAY
amzn-s3-demo-bucket   Development/Projects.xls   80e737d8b4ed9ac5c6ffffffffffffffff006737d8b4ed9ac5c600000000000000000000000000000000000000000000000072   CREATE        2024-11-15 23:26:44.966                 FALSE              7746   11/15/2024 23:26     729a6863e47fb9955b31bfabce984908    STANDARD	  FALSE          SSE-S3              FALSE                   NULL                                                                          SSECRC32             {}            {count -> Asia, customs -> Canada, family -> Billiards, filter -> true, location -> Europe, name -> Asia, user -> United States}   111122223333   192.0.2.1           CVK7Z6XQTQ90BSRV

저널 테이블은 다음과 같은 스키마를 가져요.

열 이름 필수? 데이터 타입 설명
bucket 예 String 범용 버킷 이름. 자세한 내용은 범용 버킷 명명 규칙을 참고하세요.
key 예 String 버킷에서 객체를 고유하게 식별하는 객체 키 이름(또는 키). 자세한 내용은 Amazon S3 객체 명명을 참고하세요.
sequence_number 예 String 주어진 객체에 대한 레코드에 포함되는 서수 값인 시퀀스 번호. 같은 버킷과 키의 레코드를 정렬하려면 sequence_number로 정렬할 수 있어요. 주어진 버킷과 키에 대해 사전식으로 더 큰 sequence_number 값은 그 레코드가 버킷에 더 최근에 도입됐다는 것을 의미해요.
record_type 예 String CREATE, UPDATE_METADATA, DELETE, CREATE_ANNOTATION, DELETE_ANNOTATION 또는 UPDATE_ANNOTATION_METADATA 중 하나인 이 레코드의 유형. CREATE 레코드는 새 객체(또는 객체의 새 버전)가 버킷에 쓰여졌음을 나타내요. UPDATE_METADATA 레코드는 스토리지 클래스나 태그처럼 기존 객체의 변경 가능한 메타데이터에 대한 변경을 캡처해요. DELETE 레코드는 이 객체(또는 이 객체 버전)가 삭제됐음을 나타내요. 버전 관리가 활성화되면 DELETE 레코드는 삭제 마커와 영구 삭제 중 하나를 나타내요. 이는 선택적 is_delete_marker 열을 확인해 더 구분할 수 있어요. CREATE_ANNOTATION 레코드는 객체에 새 주석을 도입하거나 기존 주석을 덮어쓰는 것을 나타내요. DELETE_ANNOTATION 레코드는 주석이 삭제됐음을 나타내요. UPDATE_ANNOTATION_METADATA 레코드는 복제 상태가 변경되는 경우처럼 기존 주석의 변경 가능한 메타데이터에 대한 변경을 캡처해요. 자세한 내용은 버전 관리가 활성화된 버킷에서 객체 버전 삭제를 참고하세요. 참고: 영구 삭제는 bucket, key, sequence_number, record_type, record_timestamp, version_id(즉 필수로 표시된 열)를 제외한 모든 열에서 NULL을 가져요.
record_timestamp 예 Timestamp NTZ(시간대 없음) 이 레코드와 연결된 타임스탬프.
version_id 아니요 String 객체의 버전 ID. 버킷에서 버전 관리를 활성화하면 Amazon S3가 버킷에 추가되는 객체에 버전 번호를 할당해요. 자세한 내용은 S3 Versioning으로 객체의 여러 버전 유지하기를 참고하세요. 버전 관리 상태를 설정하기 전에 버킷에 저장된 객체는 version_id가 null이에요.
is_delete_marker 아니요 Boolean 객체의 삭제 마커 상태. 삭제 마커인 DELETE 레코드의 경우 이 값은 TRUE예요. 영구 삭제의 경우 이 값은 생략(NULL)돼요. 다른 레코드 유형(CREATE 및 UPDATE_METADATA)은 FALSE 값을 가져요. 자세한 내용은 삭제 마커 작업을 참고하세요. 참고: 삭제 마커에 대해 추가된 행의 record_type 값은 UPDATE_METADATA가 아닌 DELETE예요. 삭제 마커가 S3 Lifecycle 만료의 결과로 생성된 경우 requester 값은 s3.amazonaws.com이에요.
size 아니요 Long 바이트 단위의 객체 크기. 불완전한 멀티파트 업로드나 객체 메타데이터의 크기는 포함하지 않아요. is_delete_marker가 TRUE이면 size는 0이에요. 자세한 내용은 시스템 정의 객체 메타데이터를 참고하세요.
last_modified_date 아니요 Timestamp NTZ(시간대 없음) 객체 생성 날짜 또는 마지막 수정 날짜 중 더 최신 것. 멀티파트 업로드의 경우 객체 생성 날짜는 멀티파트 업로드가 시작된 날짜예요. 자세한 내용은 시스템 정의 객체 메타데이터를 참고하세요.
e_tag 아니요 String 객체의 해시인 엔터티 태그(ETag). ETag는 객체의 메타데이터가 아닌 콘텐츠에 대한 변경만 반영해요. ETag는 객체 데이터의 MD5 다이제스트일 수 있어요. ETag가 MD5 다이제스트인지 여부는 객체가 어떻게 생성되고 암호화되는지에 따라 달라져요. 자세한 내용은 Amazon S3 API Reference의 Object를 참고하세요.
storage_class 아니요 String 객체 저장에 사용되는 스토리지 클래스. STANDARD, REDUCED_REDUNDANCY, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER, DEEP_ARCHIVE 또는 GLACIER_IR 중 하나. 자세한 내용은 Amazon S3 스토리지 클래스 이해 및 관리를 참고하세요.
is_multipart 아니요 Boolean 객체의 업로드 유형. 객체가 멀티파트 업로드로 업로드된 경우 이 값은 TRUE예요. 그렇지 않으면 FALSE예요. 자세한 내용은 Amazon S3에서 멀티파트 업로드를 사용한 객체 업로드 및 복사를 참고하세요.
encryption_status 아니요 String 사용되는 암호화 키 종류에 따른 객체의 서버 측 암호화 상태: Amazon S3 관리형 키를 사용한 서버 측 암호화(SSE-S3), AWS Key Management Service(AWS KMS) 키를 사용한 서버 측 암호화(SSE-KMS), AWS KMS 키를 사용한 이중 계층 서버 측 암호화(DSSE-KMS), 또는 고객 제공 키를 사용한 서버 측 암호화(SSE-C). 객체가 암호화되지 않은 경우 이 값은 null이에요. 가능한 값은 SSE-S3, SSE-KMS, DSSE-KMS, SSE-C 또는 null이에요. 자세한 내용은 암호화로 데이터 보호하기를 참고하세요.
is_bucket_key_enabled 아니요 Boolean 객체의 S3 버킷 키 활성화 상태. 객체가 SSE-KMS에 S3 버킷 키를 사용하는 경우 이 값은 TRUE예요. 그렇지 않으면 FALSE예요. 자세한 내용은 객체 수준에서 S3 버킷 키 구성하기를 참고하세요.
kms_key_arn 아니요 String encryption_status가 SSE-KMS 또는 DSSE-KMS인 행에서 객체가 암호화된 KMS 키의 Amazon 리소스 이름(ARN). 객체가 SSE-KMS 또는 DSSE-KMS로 암호화되지 않은 경우 값은 null이에요. 자세한 내용은 AWS KMS 키를 사용한 서버 측 암호화(SSE-KMS) 사용 및 AWS KMS 키를 사용한 이중 계층 서버 측 암호화(DSSE-KMS) 사용을 참고하세요. 참고: 행이 삭제 또는 덮어쓰기 이벤트가 처리될 당시 더 이상 존재하지 않았던 객체 버전을 나타내는 경우, encryption_status 열 값이 SSE-KMS 또는 DSSE-KMS라 하더라도 kms_key_arn에는 null 값이 포함돼요.
checksum_algorithm 아니요 String 객체의 체크섬을 만드는 데 사용되는 알고리즘: CRC64NVME, CRC32, CRC32C, SHA1, SHA256, MD5, XXHASH64, XXHASH3, XXHASH128 또는 SHA512 중 하나. 체크섬이 없으면 이 값은 null이에요. 자세한 내용은 지원되는 체크섬 알고리즘 사용하기를 참고하세요.
object_tags 아니요 Map<String, String> 객체와 연결된 객체 태그. 객체 태그는 키-값 쌍의 맵으로 저장돼요. 객체에 태그가 없으면 빈 맵({})이 저장돼요. 자세한 내용은 객체 태깅을 참고하세요. 참고: record_type 값이 DELETE이면 object_tags 열에 null 값이 포함돼요. record_type 값이 CREATE 또는 UPDATE_METADATA이면 삭제 또는 덮어쓰기 이벤트가 처리될 당시 더 이상 존재하지 않았던 객체 버전을 나타내는 행은 object_tags 열에 null 값이 포함돼요.
user_metadata 아니요 Map<String, String> 객체와 연결된 사용자 메타데이터. 사용자 메타데이터는 키-값 쌍의 맵으로 저장돼요. 객체에 사용자 메타데이터가 없으면 빈 맵({})이 저장돼요. 자세한 내용은 사용자 정의 메타데이터를 참고하세요. 참고: record_type 값이 DELETE이면 user_metadata 열에 null 값이 포함돼요. record_type 값이 CREATE 또는 UPDATE_METADATA이면 삭제 또는 덮어쓰기 이벤트가 처리될 당시 더 이상 존재하지 않았던 객체 버전을 나타내는 행은 user_metadata 열에 null 값이 포함돼요.
requester 아니요 String 요청을 수행한 요청자의 AWS 계정 ID 또는 AWS 서비스 보안 주체. 예를 들어 요청자가 S3 Lifecycle이면 이 값은 s3.amazonaws.com이에요.
source_ip_address 아니요 String 요청의 소스 IP 주소. 사용자 요청에 의해 생성된 레코드의 경우 이 열에는 요청의 소스 IP 주소가 포함돼요. 사용자를 대신해 Amazon S3 또는 다른 AWS 서비스가 수행한 작업의 경우 이 열에는 null 값이 포함돼요.
request_id 아니요 String 요청과 연결된 요청 ID.
object_join_key 아니요 String 새 버전마다 또는 null 버전이 생성되거나 덮어써질 때 할당되는 이 객체의 고유 식별자. 이 열을 사용해 주석 테이블과 조인해요.
annotation.name 아니요 String 수정되는 주석의 이름. CREATE_ANNOTATION, UPDATE_ANNOTATION_METADATA 및 DELETE_ANNOTATION 레코드 유형에만 표시돼요.
annotation.sequence_number 아니요 String 주석 개정을 정렬하기 위한 서수 값.
annotation.last_modified_date 아니요 Timestamp 주석이 마지막으로 수정된 날짜와 시간.
annotation.size 아니요 Long 바이트 단위의 주석 페이로드 크기.
annotation.e_tag 아니요 String 주석 콘텐츠의 ETag.
annotation.replication_status 아니요 String 주석의 복제 상태. PENDING, COMPLETED, FAILED는 복제 소스에서만 볼 수 있어요. REPLICA는 복제 대상에서만 볼 수 있어요. 적용 가능한 복제 구성이 없으면 이 값은 NULL이에요.
annotation.checksum_algorithm 아니요 String 주석에 사용되는 체크섬 알고리즘.

더 알아보기 (Learn more)