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 | 주석에 사용되는 체크섬 알고리즘. |