View a markdown version of this page

根據 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.enabled設定為 來停用分段上傳false。如果您不執行此操作,則 Athena 無法判斷 Parquet 檔案長度,並且會發生 HIVE_CANNOT_OPEN_SPLIT 錯誤。如需詳細資訊,請參閱《Amazon EMR 管理指南》中的設定適用於 Amazon S3 的分段上傳

使用 encryption_option 和 kms_key 資料表屬性

CREATE TABLE 陳述式中,使用指定 encryption_option='CSE_KMS'和 的TBLPROPERTIES子句kms_key='aws_kms_key_arn',如下列範例所示。

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 將使用 中的 AWS KMS 金鑰kms_key來解密 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 加密物件,但不建議混合伺服器端和用戶端加密物件。

注意

kms_key encryption_option和 與 一起指定時has_encrypted_dataencryption_optionkms_key資料表屬性會優先,且has_encrypted_data會被忽略。

當您使用 Athena 主控台使用表單建立資料表並指定資料表位置時,請選取加密的資料集選項,將 has_encrypted_data='true' 屬性新增至資料表。

在新增資料表表格中選取 Encrypted data set (加密的資料集)

在 Athena 主控台的資料表清單中,具有 的 CSE-KMS 加密資料表has_encrypted_data='true'會顯示金鑰形狀圖示。

已加密資料表圖示

寫入 SSE-S3/SSE-KMS/CSE-KMS 加密資料

根據預設,新插入的資料檔案將使用 Athena 工作群組中指定的查詢結果的加密組態進行加密。為了使用與查詢結果的加密組態不同的加密組態來寫入資料表資料,您必須新增一些額外的資料表屬性。

CREATE TABLE 陳述式中,使用指定 encryption_option='SSE_S3 | SSE_KMS | CSE_KMS'和 的TBLPROPERTIES子句kms_key='aws_kms_key_arn',如下列範例所示。

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_dataencryption_optionkms_key資料表屬性只能與 Hive 資料表搭配使用。

  • 使用 CSE-KMS 加密資料建立資料表時,建議您確保所有資料都使用相同的 AWS KMS 金鑰加密。

  • 使用 CSE-KMS 加密資料建立資料表時,建議您確保所有資料都經過 CSE-KMS 加密,而且不會混合non-CSE-KMS 和 CSE-KMS 加密物件。