使用 Athena 查詢向 Lake Formation 註冊之資料的考量事項與限制 - Amazon Athena

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Athena 查詢向 Lake Formation 註冊之資料的考量事項與限制

使用 Athena 查詢在 Lake Formation 中註冊的資料時請考慮以下項目。如需其他資訊,請參閱《AWS Lake Formation 開發人員指南》中的 AWS Lake Formation的已知問題

在 Avro 和 custom 的某些情況下,未經授權的用戶可以看到列元數據 SerDe

Lake Formation 資料欄層級授權可防止沒有 Lake Formation 許可的使用者存取資料欄中的資料。不過,在某些情況下,使用者可以存取描述資料表中所有資料欄的中繼資料,包括他們沒有資料許可的資料欄。

當資料行中繼資料儲存在使用 Apache Avro 儲存格式的資料表屬性中,或使用自訂序列化程式/還原序列化程式 (SerDe),其中資料表結構定義與定義一起在資料表屬性中定義時,就會發生這種情況。 SerDe搭配 Lake Formation 使用 Athena 時,我們建議您檢閱向 Lake Formation 註冊的資料表屬性內容,並盡可能限制資料表屬性中所存放的資訊,以防止使用者看到任何敏感中繼資料。

使用檢視的 Lake Formation 許可

對於向 Lake Formation 註冊的資料,Athena 使用者只有在擁有資料表、資料欄,以及來源 Simple Storage Service (Amazon S3) 資料位置 (此為 VIEW 之根據) 之 Lake Formation 許可時,才能建立 VIEW。在 Athena 中建立 VIEW 之後,Lake Formation 許可即可套用至 VIEW。資料欄層級許可不適用於 VIEW。具有 VIEW 的 Lake Formation 許可,但沒有資料表和資料欄許可 (此為檢視之根據) 的使用者,無法使用 VIEW 來查詢資料。不過,具有此混合許可的使用者可以使用陳述式 (例如 DESCRIBE VIEWSHOW CREATE VIEWSHOW COLUMNS) 來查看 VIEW 中繼資料。因此,請務必針對每個 VIEW 調整 Lake Formation 許可以符合基礎資料表的許可。在資料表中定義的儲存格篩選條件不適用於針對該資料表的 VIEW。資源連結名稱必須與原始帳戶中的資源名稱相同。在跨帳戶設定中使用檢視時,還會有其他限制。如需有關設定跨帳戶的共用視圖的許可的詳細資訊,請參閱跨帳戶存取資料目錄

Lake Formation 精細存取控制和 Athena 工作群組

同一 Athena 工作群組中的使用者可以看到 Lake Formation 精細存取控制設定為可供工作群組存取的資料。如需有關在 Lake Formation 中使用精細定義存取控制的詳細資訊,請參閱 AWS 大數據部落格中的使用 AWS Lake Formation管理精細定義存取控制

Amazon S3 中的 Athena 查詢結果位置未向 Lake Formation 註冊

Simple Storage Service (Amazon S3) 中的 Athena 查詢結果無法向 Lake Formation 註冊。Lake Formation 許可不會限制對這些位置的存取。除非您限制存取,否則 Athena 使用者可以在沒有 Lake Formation 的資料許可時存取查詢結果檔案和中繼資料。若要避免這種情況,我們建議您使用工作群組來指定查詢結果的位置,並使工作群組成員資格與 Lake Formation 許可保持一致。然後,您可以使用 IAM 許可政策來限制查詢結果位置的存取。如需有關查詢結果的詳細資訊,請參閱使用查詢結果、近期查詢和輸出檔案

使用 Athena 工作群組限制查詢歷史記錄的存取

Athena 查詢歷史記錄會公開已儲存查詢和完整查詢字串的清單。除非您使用工作群組來分隔查詢歷程記錄的存取權限,否則未獲授權在 Lake Formation 中查詢資料的 Athena 使用者可以檢視對該資料執行的查詢字串,包括資料欄名稱、選取準則等。我們建議您使用工作群組來分隔查詢歷程記錄,並使 Athena 工作群組成員資格與 Lake Formation 許可保持一致,以限制存取。如需詳細資訊,請參閱 使用工作群組來控制查詢存取和成本

跨帳戶存取資料目錄

若要存取另一個帳戶中的資料目錄,您可以使用 Athena 的跨帳戶 AWS Glue 功能或在 Lake Formation 中設定跨帳戶存取。

Athena 跨帳戶存取資料目錄

您可以使用 Athena 的跨帳戶 AWS Glue 目錄功能,在帳戶中註冊目錄。僅 Athena 引擎版本 2 及更新版本中提供此功能,且僅限於帳戶之間的相同區域使用。如需詳細資訊,請參閱 AWS Glue Data Catalog 從另一個帳戶註冊

如果要共用的資料目錄已在中設定資源策略 AWS Glue,則必須更新該策略,以允許存取帳戶 B AWS Resource Access Manager 並授與使用帳戶 A 的資料目錄的權限,如下列範例所示。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "ram.amazonaws.com" }, "Action": "glue:ShareResource", "Resource": [ "arn:aws:glue:<REGION>:<ACCOUNT-A>:table/*/*", "arn:aws:glue:<REGION>:<ACCOUNT-A>:database/*", "arn:aws:glue:<REGION>:<ACCOUNT-A>:catalog" ] }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<ACCOUNT-B>:root" }, "Action": "glue:*", "Resource": [ "arn:aws:glue:<REGION>:<ACCOUNT-A>:table/*/*", "arn:aws:glue:<REGION>:<ACCOUNT-A>:database/*", "arn:aws:glue:<REGION>:<ACCOUNT-A>:catalog" ] } ] }

如需詳細資訊,請參閱 跨帳戶存取 AWS Glue 資料目錄

在 Lake Formation 中設定跨帳戶存取

AWS Lake Formation 可讓您使用單一帳戶來管理中央資料目錄。您可以使用此功能來實作對資料目錄中繼資料和基礎資料的跨帳戶存取。例如,擁有者帳戶可以授予另一個 (收件人) 帳戶對資料表的 SELECT 許可。

若要在 Athena 查詢編輯器中顯示共用的資料庫或資料表,您需在 Lake Formation 中對共用的資料庫或資料表建立資源連結。當 Lake Formation 中的收件者帳戶查詢擁有者的資料表時,會將資料存取事件CloudTrail新增至收件者帳戶和擁有者帳戶的記錄中。

如需共用視圖,請謹記下列要點:

  • 在目標資源連結上執行,而不是來源資料表或視圖上執行查詢,然後將輸出共用到目標帳戶。

  • 僅共用視圖並不足夠。建立視圖所涉及的所有資料表必須是跨帳戶共用的一部分。

  • 在共用資源上建立的資源連結的名稱必須與擁有者帳戶中的資源名稱相符。如果名稱不匹配,則出現錯誤消息,如分析存儲視圖「awsdata atalog 失敗」。 my-lf-resource-linkmy-lf-view': 第 3 行:結構描述名稱不存在發生。

如需有關在 Lake Formation 中跨帳戶存取的詳細資訊,請參閱《AWS Lake Formation 開發人員指南》中的以下資源:

跨帳戶存取

資源連結在 Lake Formation 中如何運作

跨帳戶 CloudTrail 記錄

在 Lake Formation 註冊的 CSE-KMS 加密 Amazon S3 位置

Athena 無法查詢開放表格格式 (OTF) 表格,例如具有下列特性的 Apache 冰山:

  • 這些表格是以在 Lake Formation 註冊的 Amazon S3 資料位置為基礎。

  • Amazon S3 中的物件會使用用戶端加密 (CSE) 加密。

  • 加密使用 AWS KMS 客戶管理的金鑰 (CSE_KMS)。

若要查詢使用CSE_KMS金鑰加密的非 OTF 資料表),請將下列區塊新增至您用於 CSE 加密的 AWS KMS 金鑰原則中。<KMS_KEY_ARN>是加密數據的密 AWS KMS 鑰的 ARN。<IAM-ROLE-ARN>是 IAM 角色的 ARN,可在 Lake Formation 中註冊 Amazon S3 位置。

{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "kms:Decrypt", "Resource": "<KMS-KEY-ARN>", "Condition": { "ArnLike": { "aws:PrincipalArn": "<IAM-ROLE-ARN>" } } }

向 Lake Formation 註冊的分割資料位置必須位於資料表子目錄中

向 Lake Formation 註冊的分割資料表必須在目錄中擁有分割資料,這些目錄是 Simple Storage Service (Amazon S3) 中資料表的子目錄。例如,具有 s3://DOC-EXAMPLE-BUCKET/mytable 位置和分割區 s3://DOC-EXAMPLE-BUCKET/mytable/dt=2019-07-11s3://DOC-EXAMPLE-BUCKET/mytable/dt=2019-07-12 等的資料表,可以向 Lake Formation 註冊並使用 Athena 進行查詢。另一方面,位置 s3://DOC-EXAMPLE-BUCKET/mytable 的資料表和位於 s3://DOC-EXAMPLE-BUCKET/dt=2019-07-11s3://DOC-EXAMPLE-BUCKET/dt=2019-07-12 等的分割區,無法向 Lake Formation 註冊。此類分割區不是 s3://DOC-EXAMPLE-BUCKET/mytable 的子目錄,因此也無法從 Athena 讀取。

Create Table As Select (CTAS) 查詢需要 Amazon S3 寫入許可

Create Table As Statements (CTAS) 需要對資料表的 Simple Storage Service (Amazon S3) 位置的寫入存取權限。若要對在 Lake Formation 註冊的資料執行 CTAS 查詢,Athena 使用者除了適當的 Lake Formation 許可以讀取資料位置之外,還必須具有 IAM 許可才能寫入資料表 Simple Storage Service (Amazon S3) 位置。如需詳細資訊,請參閱從查詢結果建立資料表 (CTAS)

預設資料庫需要 DESCRIBE 許可

default 資料庫需要 Lake Formation DESCRIBE 許可。下列範例 AWS CLI 命令會將default資料庫的DESCRIBE權限授與 AWS 帳戶datalake_user1中的使用者111122223333

aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "DESCRIBE" --resource '{ "Database": {"Name":"default"}}

如需詳細資訊,請參閱《AWS Lake Formation 開發人員指南》中的 Lake Formation 許可參考