Amazon S3의 암호화된 데이터세트에 기반한 테이블 생성 - Amazon Athena

Amazon S3의 암호화된 데이터세트에 기반한 테이블 생성

Athena는 기본 데이터세트가 SSE-S3, SSE-KMS 또는 CSE-KMS로 암호화된 테이블을 읽고 쓸 수 있습니다. 테이블 데이터에 사용되는 암호화 옵션 및 실행된 쿼리 유형에 따라 암호화된 데이터를 읽고 쓰려면 몇 가지 추가 테이블 속성을 지정해야 할 수 있습니다.

SSE-S3/SSE-KMS로 암호화된 테이블 읽기

SSE-S3/SSE-KMS로 암호화된 데이터세트를 읽기 위해 테이블 생성 시 추가 테이블 속성을 지정할 필요가 없습니다. Amazon S3는 SSE 객체 복호화를 자동으로 처리합니다.

CSE-KMS로 암호화된 테이블 읽기

Athena가 CSE-KMS로 암호화된 데이터세트를 읽기 위해 지정할 수 있는 두 가지 테이블 속성 세트가 있습니다.

  • encryption_optionkms_key 테이블 속성 사용(권장)

  • has_encrypted_data 테이블 속성 사용

중요

Amazon EMR을 EMRFS와 함께 사용해 CSE-KMS로 암호화된 Parquet 파일을 업로드하는 경우 fs.s3n.multipart.uploads.enabledfalse로 설정해 멀티파트 업로드를 비활성화해야 합니다. 이 작업을 하지 않으면, Athena는 Parquet 파일 길이를 확인하지 못하며 HIVE_CANNOT_OPEN_SPLIT 오류가 발생합니다. 자세한 내용은 Amazon EMR 관리 안내서Amazon S3에 대한 멀티파트 업로드 구성을 참조하세요.

encryption_option 및 kms_key 테이블 속성 사용

다음 예제처럼 CREATE TABLE 문에서 encryption_option='CSE_KMS'kms_key='aws_kms_key_arn'을 지정하는 TBLPROPERTIES 절을 사용합니다.

CREATE EXTERNAL TABLE 'my_encrypted_data' ( `n_nationkey` int, `n_name` string, `n_regionkey` int, `n_comment` string) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' LOCATION 's3://amzn-s3-demo-bucket/folder_with_my_encrypted_data/' TBLPROPERTIES ( 'encryption_option' = 'CSE_KMS', 'kms_key' = 'arn:aws:kms:us-east-1:012345678901:key/my_kms_key')

이러한 속성이 구성되는 경우

  • Athena는 V1, V2 또는 V3 Amazon S3 암호화 클라이언트에서 생성된 CSE-KMS로 암호화된 객체를 읽을 수 있습니다.

  • Athena는 kms_key의 AWS KMS 키를 사용하여 CSE-KMS 데이터를 복호화합니다. 객체가 다른 AWS KMS 키로 암호화된 경우 쿼리에 실패합니다.

  • 서버 측 객체와 클라이언트 측의 암호화된 객체를 혼합하는 방식은 권장되지 않지만 Athena는 여전히 SSE-S3 및 SSE-KMS로 암호화된 객체를 읽을 수 있습니다.

has_encrypted_data 테이블 속성 사용

다음 예제처럼 CREATE TABLE 문에서 has_encrypted_data='true'를 지정하는 TBLPROPERTIES 절을 사용합니다.

CREATE EXTERNAL TABLE 'my_encrypted_data' ( `n_nationkey` int, `n_name` string, `n_regionkey` int, `n_comment` string) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' LOCATION 's3://amzn-s3-demo-bucket/folder_with_my_encrypted_data/' TBLPROPERTIES ( 'has_encrypted_data' = 'true')

has_encrypted_data 테이블 속성이 지정되는 경우

  • Athena는 V1 Amazon S3 암호화 클라이언트에서 생성된 CSE-KMS로 암호화된 객체만 읽을 수 있습니다.

  • Athena는 객체 메타데이터에서 CSE-KMS 객체를 암호화하는 데 사용되는 AWS KMS 키를 추론한 다음, 해당 키를 사용하여 객체를 복호화합니다.

  • 서버 측 객체와 클라이언트 측의 암호화된 객체를 혼합하는 방식은 권장되지 않지만 Athena는 여전히 SSE-S3 및 SSE-KMS로 암호화된 객체를 읽을 수 있습니다.

참고

encryption_optionkms_keyhas_encrypted_data와 함께 지정되면 encryption_optionkms_key 테이블 속성이 우선하고 has_encrypted_data는 무시됩니다.

Athena 콘솔에서 양식을 사용하여 테이블을 생성하고 테이블 위치를 지정할 때 암호화된 데이터세트 옵션을 선택하고 has_encrypted_data='true' 속성을 테이블에 추가합니다.

테이블 추가 양식에서 암호화된 데이터 세트(Encrypted data set)을 선택합니다.

Athena 콘솔 테이블 목록에서 has_encrypted_data='true'를 사용하여 CSE-KMS로 암호화된 테이블은 열쇠 모양 아이콘을 표시합니다.

암호화 테이블 아이콘

SSE-S3/SSE-KMS/CSE-KMS 암호화 데이터 쓰기

기본적으로 새로 삽입된 데이터 파일은 Athena 작업 그룹에 지정된 쿼리 결과의 암호화 구성을 사용하여 암호화됩니다. 쿼리 결과의 암호화 구성과 다른 암호화 구성으로 테이블 데이터를 쓰려면 몇 가지 테이블 속성을 더 추가해야 합니다.

다음 예제처럼 CREATE TABLE 문에서 encryption_option='SSE_S3 | SSE_KMS | CSE_KMS'kms_key='aws_kms_key_arn'을 지정하는 TBLPROPERTIES 절을 사용합니다.

CREATE EXTERNAL TABLE 'my_encrypted_data' ( `n_nationkey` int, `n_name` string, `n_regionkey` int, `n_comment` string) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' LOCATION 's3://amzn-s3-demo-bucket/folder_with_my_encrypted_data/' TBLPROPERTIES ( 'encryption_option' = 'SSE_KMS', 'kms_key' = 'arn:aws:kms:us-east-1:012345678901:key/my_kms_key')

새로 삽입된 모든 데이터는 작업 그룹에서 쿼리 결과의 암호화 구성을 사용하는 대신 테이블 속성에 지정된 암호화 구성을 사용하여 암호화됩니다.

고려 사항 및 제한

암호화된 데이터세트를 쓰고 읽을 때 다음 사항을 고려합니다.

  • has_encrypted_data, encryption_optionkms_key 테이블 속성은 Hive 테이블에서만 사용할 수 있습니다.

  • CSE-KMS로 암호화된 데이터가 포함된 테이블을 생성할 때는 모든 데이터가 동일한 AWS KMS 키로 암호화되도록 하는 것이 좋습니다.

  • CSE-KMS로 암호화된 데이터가 포함된 테이블을 생성할 때는 모든 데이터가 CSE-KMS로 암호화되고 CSE-KMS 및 CSE-KMS 이외 방식으로 암호화된 객체가 혼합되지 않도록 하는 것이 좋습니다.