如何針對 AWS Glue 中的 Lake Formation 許可錯誤進行疑難排解?

4 分的閱讀內容
0

我的 AWS Glue 爬蟲程式或 ETL 任務失敗,並且有 AWS Lake Formation 相關錯誤。但是我已設定所需的 AWS Identity and Access Management (IAM) 許可。

簡短描述

若要存取 AWS Glue Data Catalog 和 Amazon Simple Storage Service (Amazon S3) 等資源,您必須擁有正確的 IAM 政策和 Lake Formation 許可。當與 Amazon S3 爬蟲程式或 ETL 任務相關聯的 IAM 角色沒有足夠的 Lake Formation 許可時,您會收到錯誤訊息。您必須擁有正確的 Lake Formation 許可,才能從以下資源讀取和寫入:

  • Data Catalog 中的資料庫和資料表
  • Amazon S3 中的基礎資料

解決方案

建立 Data Catalog 資料庫時的存取問題

如果 Data Catalog 資料庫建立問題導致錯誤,則您會收到類似下列內容的錯誤訊息:

Insufficient Lake Formation permission(s): Required Create Database on Catalog

若要解決此錯誤,請使用資料湖管理員角色來存取 Lake Formation 主控台。然後,將 Create database permission (建立資料庫許可) 授予相關 IAM 角色。

  1. 開啟 AWS Lake Formation 主控台
  2. 在導覽窗格的 Permissions (許可) 下,選擇 Administrative roles and tasks (管理角色和任務)。
  3. Database creators (資料庫建立者) 下,選擇 Grant (授予)。
  4. 對於 IAM users and roles (IAM 使用者和角色),請從下拉式清單中選取要授予其存取權的 IAM 角色。
  5. Catalog permissions (型錄許可) 下,選擇 Create database (建立資料庫)。
  6. 如果您想要 IAM 角色向帳戶中的其他角色授予權限,請在 Grantable permissions (可授予許可) 下選擇 Create database (建立資料庫)。
  7. 選擇 Grant (授予)。

Data Catalog 資料庫的存取問題

如果 Data Catalog 資料庫問題導致錯誤,則您會收到類似下列其中一個內容的錯誤訊息:

Insufficient Lake Formation permission(s) on example_database: Required Create Table
Insufficient Lake Formation permission(s) on example_database: (Database name: example_database)
Insufficient Lake Formation permission(s) on example_table (Database name: example_database, Table Name: example_table)

若要解決第一個和第三個錯誤,請將 example-databaseCreate table (建立資料表) 許可授予與爬蟲程式或 ETL 任務關聯的 IAM 角色。

若要解決第二個錯誤,請將 example-databaseDescribe (描述) 許可授予與爬蟲程式或 ETL 任務關聯的 IAM 角色。

  1. 開啟 Lake Formation 主控台
  2. 在導覽窗格的 Permissions (許可) 下,選擇 Data lake permissions (資料湖許可)。
  3. 選擇 Grant (授予)。
  4. Principals (主體) 下,選擇 IAM users and roles (IAM 使用者和角色)。
  5. 對於 IAM users and roles (IAM 使用者和角色),選擇與爬蟲程式相關聯的 IAM 角色。
  6. LF-Tags or catalog resources (LF 標籤或型錄資源) 下,選擇 Named data catalog resources (命名的 Data Catalog 資源)。
  7. 對於 Databases (資料庫),選擇您要將爬蟲程式寫入其中的資料庫。
  8. Database permissions (資料庫許可) 下,根據您的使用案例選擇 Create table (建立資料表) 或 Describe (描述)。注意:爬蟲程式角色對於寫入其中的資料庫,必須同時具有 Describe (描述) 和 Create Table (建立資料表) 許可。對於 AWS Glue ETL,這些許可也就足夠,除非您從任務本身執行 UpdateDatabaseDeleteDatabase API 呼叫。在這些情況下,請授予 Alter (變更) 或 Drop (捨棄) 許可。
  9. 如果您需要 IAM 角色向帳戶中的其他角色授予權限,請在 Grantable permissions (可授予許可) 下設定許可。
  10. 選擇 Grant (授予)。

Data Catalog 資料表的存取問題

如果 Data Catalog 資料表問題導致錯誤,則您會收到類似下列其中一個內容的錯誤訊息:

Insufficient Lake Formation permission(s) on example_table (Database name: example_database, Table Name: example_table)
Insufficient Lake Formation permission(s): Required Alter on example_table

如果您收到此錯誤,表示 AWS Glue 爬蟲程式或 ETL 任務正在存取該資料表。對於爬蟲程式,將 example_tableDescribe (描述) 和 Alter (變更) 許可授予與爬蟲程式相關聯的 IAM 角色。

對於讀取 example_table 的 ETL 任務,將 example_tableDescribe (描述) 和 Select (選取) 許可授予與任務相關聯的 IAM 角色。如果 ETL 任務正在更新 example_table,將 example_tableAlter (變更) 許可授予與任務相關聯的 IAM 角色。

  1. 開啟 Lake Formation 主控台
  2. 在導覽窗格的 Permissions (許可) 下,選擇 Data lake permissions (資料湖許可)。
  3. 選擇 Grant (授予)。
  4. Principals (主體) 下,選擇 IAM users and roles (IAM 使用者和角色)。
  5. 對於 IAM users and roles (IAM 使用者和角色),選擇 IAM role (IAM 角色)。
  6. LF-Tags or catalog resources (LF 標籤或型錄資源) 下,選擇 Named data catalog resources (命名的 Data Catalog 資源)。
  7. 對於 Databases (資料庫),選擇您要將爬蟲程式寫入其中的資料庫。
  8. 對於 Tables-optional (表格-選擇性),請選擇爬蟲程式正在存取的資料表。
  9. Table permissions (資料表許可) 底下,根據您的使用案例選擇 Select (選取)、Describe (描述) 或 Alter (變更)。
  10. 如果您需要 IAM 角色向帳戶中的其他角色授予權限,請在 Grantable permissions (可授予許可) 下設定許可。
  11. 選擇 Grant (授予)。

Lake Formation IAM 許可的存取問題

如果 Lake Formation 的 IAM 許可問題導致錯誤,則您會收到類似下列其中一個內容的錯誤訊息:

com.amazonaws.services.lakeformation.model.AccessDeniedException: Service Principal: glue.amazonaws.com is not authorized to perform: lakeformation:GetDataAccess
on resource: s3://sample-bucket/sample-prefix/ because no identity-based policy allows the lakeformation:GetDataAccess action

當 AWS Glue 任務角色或 AWS Glue 爬蟲程式角色沒有足夠的 IAM 許可時,您會收到此錯誤。工作或角色必須具有許可,才能檢查 Lake Formation 是否可以將臨時憑證傳送給角色和 Amazon S3 位置。

  1. 開啟 IAM 主控台。
  2. 為您的 AWS Glue 爬蟲程式或 AWS Glue 任務角色建立 IAM 政策。
  3. 新增許可 lakeformation:GetDataAccess 做為政策中資源的動作。注意:API lakeformation:GetDataAccess 必須使用萬用字元做為它的資源。
  4. 將政策附加到您的 AWS Glue 爬蟲程式或 AWS Glue 任務角色。

Amazon S3 路徑的存取問題

如果 Amazon S3 路徑問題導致錯誤,則錯誤訊息看起來類似於以下內容。錯誤包含 Amazon S3 路徑:

Insufficient Lake Formation permission(s) on s3://s3-example-bucket/example-prefix/ (Database name: example-database, Table Name: example-table)<br>
Insufficient Lake Formation permission(s) on s3://s3-example-bucket/example-prefix/

與爬蟲程式或 ETL 任務關聯的 IAM 角色沒有存取 Amazon S3 路徑的必要許可時,會發生此錯誤。

若要解決此錯誤,請完成下列步驟:

  1. 開啟 Lake Formation 主控台
  2. 在導覽窗格的 Register and ingest (註冊和擷取) 下,選擇 Data lake locations (資料湖位置)。
  3. 驗證錯誤訊息中的 Amazon S3 路徑或路徑前綴是否為 Data lake locations (資料湖位置) 清單中的註冊位置。
  4. 如果錯誤訊息中的 Amazon S3 路徑或前綴未列在資料湖位置清單中,則選擇 Register location (註冊位置)。
  5. 對於 Amazon S3 path (Amazon S3 路徑),請選擇 Browse (瀏覽),然後選擇正確的 Amazon S3 路徑。
  6. 對於 IAM role (IAM 角色),請保留預設選項 AWSServiceRoleForLakeFormationDataAccess。如果您使用自訂 IAM 角色,請確認滿足相關要求。**重要:**註冊 Amazon S3 位置時,Lake Formation 會擔任上述 IAM 角色。這會將臨時憑證授予存取該位置資料的整合式 AWS 服務。確認與已註冊 Amazon S3 位置關聯的 IAM 角色具有讀取和寫入 S3 儲存貯體的所需許可。這可以防止 AccessDenied錯誤。
  7. 在導覽窗格的 Permissions (許可) 下,選擇 Data locations (資料位置)。
  8. 選擇 Grant (授予)。
  9. 對於 Grant permissions (授予許可),選擇 My account (我的帳戶)。
  10. IAM users and roles (IAM 使用者和角色) 下,選擇要授予其存取權的 IAM 角色。
  11. 選擇 Grant (授予)。

相關資訊

管理 Lake Formation 許可

註冊 Amazon S3 位置

AWS 官方
AWS 官方已更新 1 年前