AWS announces preview of AWS Interconnect - multicloud
AWS announces AWS Interconnect – multicloud (preview), providing simple, resilient, high-speed private connections to other cloud service providers. AWS Interconnect - multicloud is easy to configure and provides high-speed, resilient connectivity with dedicated bandwidth, enabling customers to interconnect AWS networking services such as AWS Transit Gateway, AWS Cloud WAN, and Amazon VPC to other cloud service providers with ease.
Athena를 사용해 Amazon S3 인벤토리 보고서를 쿼리하려면 어떻게 해야 하나요?
Amazon Athena를 사용해 Amazon Simple Storage Service (Amazon S3) 인벤토리 파일을 쿼리하고 싶습니다.
해결 방법
Amazon S3 재고 파일을 ORC 형식, Parquet 형식, 또는 CSV 형식의 인벤토리 보고서로 쿼리하려면 다음 단계를 따르세요.
-
S3 버킷의 Amazon S3 인벤토리를 구성하세요. 인벤토리 보고서가 저장되는 대상 버킷 값을 기록해 두세요.
-
Athena 콘솔을 엽니다.
참고: 첫 번째 쿼리를 실행하기 전에 Amazon S3에 쿼리 결과 위치를 설정해야 할 수 있습니다. -
쿼리 편집기에서 DDL 문을 실행해 데이터베이스를 생성하세요.
create database s3_inventory_db -
데이터베이스에 테이블 스키마를 생성하세요.
ORC 형식의 인벤토리 보고서 예제 쿼리:
참고: 다음 변수를 내 변수로 바꾸세요.
- your_table_name을 내 Athena 테이블 이름으로 바꾸세요.
- LOCATION에 단계 1의 S3 버킷과 접두사 경로를 입력하세요. 접두사 끝에 슬래시(/)를 포함해야 합니다(예: s3://doc-example-bucket/prefix/). 접두사를 사용하지 않는 경우에는 버킷 이름 끝에 슬래시(/)를 붙이세요(예: s3://doc-example-bucket/).
- projection.dt.range 아래 2022-01-01-00-00에 Athena에서 파티션한 날짜 시간 범위의 첫 날을 입력하세요.
- 인벤토리에서 선택하지 않은 옵션 필드를 모두 제거하세요.
CREATE EXTERNAL TABLE your_table_name( 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, object_lock_retain_until_date bigint, object_lock_mode string, object_lock_legal_hold_status string, intelligent_tiering_access_tier string, bucket_key_status string, checksum_algorithm string, object_access_control_list string, object_owner 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://source-bucket/config-ID/hive/' TBLPROPERTIES ( "projection.enabled" = "true", "projection.dt.type" = "date", "projection.dt.format" = "yyyy-MM-dd-HH-mm", "projection.dt.range" = "2022-01-01-00-00,NOW", "projection.dt.interval" = "1", "projection.dt.interval.unit" = "HOURS" );참고: Parquet 형식의 재고 보고서를 쿼리하려면 RROW FORMAT SERDE 문에서 ORC SerDE 자리에 다음과 같은 Parquet SerDE를 사용하세요.
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'CSV 형식의 인벤토리 보고서 예제 쿼리:
CREATE EXTERNAL TABLE your_table_name( bucket string, key string, version_id string, is_latest boolean, is_delete_marker boolean, size string, last_modified_date string, e_tag string, storage_class string, is_multipart_uploaded boolean, replication_status string, encryption_status string, object_lock_retain_until_date string, object_lock_mode string, object_lock_legal_hold_status string, intelligent_tiering_access_tier string, bucket_key_status string, checksum_algorithm string, object_access_control_list string, object_owner string ) PARTITIONED BY ( dt string ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat' LOCATION 's3://source-bucket/config-ID/hive/' TBLPROPERTIES ( "projection.enabled" = "true", "projection.dt.type" = "date", "projection.dt.format" = "yyyy-MM-dd-HH-mm", "projection.dt.range" = "2022-01-01-00-00,NOW", "projection.dt.interval" = "1", "projection.dt.interval.unit" = "HOURS" ); -
왼쪽 창의 테이블 아래에서 테이블 이름 옆의 줄임표를 선택하고 테이블의 미리 보기를 선택하세요. 결과 창에 서버 액세스 로그의 데이터가 표시되면, Athena 테이블을 성공적으로 생성한 것입니다. 데이터는 bucket, key, version_id, size, objectowner와 같은 값으로 나타납니다.
이제 Amazon S3 인벤토리 파일을 쿼리할 수 있습니다.
Amazon S3 인벤토리 파일을 쿼리하는 방법에 대한 자세한 지침은 Amazon Athena를 사용해 Amazon S3 인벤토리 쿼리를 참고하세요.
쿼리 예시
다음 예제 쿼리를 사용해 Amazon S3 인벤토리 보고서를 실행할 수 있습니다. 내 사용 사례에 맞게 쿼리를 직접 만들 수도 있습니다.
크기별 개체 정렬 및 보고
SELECT DISTINCT size FROM your_table_name ORDER BY 1 DESC limit 10; SELECT size, count(*) FROM your_table_name GROUP BY size;
암호화 상태를 확인해 보안 노출을 파악하고 암호화 활성화
SELECT encryption_status, count(*) FROM your_table_name GROUP BY encryption_status;
최근 수정한 날짜까지 계산해 활성 데이터 확인
SELECT last_modified_date, count(*) FROM your_table_name GROUP BY last_modified_date;
인벤토리 날짜부터 5GB 이상인 개체 수를 세거나 목록으로 표시
SELECT COUNT(*) FROM your_table_name WHERE size >= 5000000000; SELECT bucket,key,size FROM your_table_name WHERE size>5000000000;
티어별로 액세스 빈도가 낮은 데이터를 보고
SELECT intelligent_tiering_tier,count (*) FROM your_table_name GROUP BY intelligent_tiering_tier;
공용 액세스가 가능하고 Object ACL 권한이 있는 S3 키 가져오기
SELECT key, CAST( json_extract(from_utf8(from_base64(object_access_control_list)), '$.grants') AS ARRAY(MAP(VARCHAR, VARCHAR)) ) AS grants_array FROM your_table_name ) SELECT key, grants_array, grant FROM grants, UNNEST(grants_array) AS t(grant) WHERE element_at(grant, 'uri') = 'http://acs.amazonaws.com/groups/global/AllUsers'
Object ACL 피부여자와 개체 소유자가 있는 S3 키 가져오기
WITH grants AS (SELECT key, from_utf8(from_base64(object_access_control_list)) AS object_access_control_list, object_owner, CAST(json_extract(from_utf8(from_base64(object_access_control_list)), '$.grants') AS ARRAY(MAP(VARCHAR, VARCHAR))) AS grants_array FROM your_table_name) SELECT key, grant, objectowner FROM grants, UNNEST(grants_array) AS t(grant) WHERE cardinality(grants_array) > 1 AND element_at(grant, 'canonicalId') != object_owner;
Object ACL에 읽기 권한이 부여된 S3 키 가져오기
WITH grants AS ( SELECT key, CAST( json_extract(from_utf8(from_base64(object_access_control_list)), '$.grants') AS ARRAY(MAP(VARCHAR, VARCHAR)) ) AS grants_array FROM your_table_name ) SELECT key, grants_array, grant FROM grants, UNNEST(grants_array) AS t(grant) WHERE element_at(grant, 'permission') = 'READ';
정식 사용자 ID에 Object ACL 권한이 있는 S3 키 가져오기
WITH grants AS ( SELECT key, CAST( json_extract(from_utf8(from_base64(object_access_control_list)), '$.grants') AS ARRAY(MAP(VARCHAR, VARCHAR)) ) AS grants_array FROM your_table_name ) SELECT key, grants_array, grant FROM grants, UNNEST(grants_array) AS t(grant) WHERE element_at(grant, 'canonicalId') = 'user-canonical-id';
Object ACL의 피부여자 수 가져오기
SELECT key, object_access_control_list, json_array_length(json_extract(object_access_control_list,'$.grants')) AS grants_count FROM your_table_name;
관련 정보
- 언어
- 한국어

관련 콘텐츠
- 질문됨 일 년 전
- 질문됨 일 년 전
- 질문됨 일 년 전
- 질문됨 일 년 전