如何針對 AWS Glue 中的 Lake Formation 許可錯誤進行疑難排解?
我的 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 角色。
- 開啟 AWS Lake Formation 主控台。
- 在導覽窗格的 Permissions (許可) 下,選擇 Administrative roles and tasks (管理角色和任務)。
- 在 Database creators (資料庫建立者) 下,選擇 Grant (授予)。
- 對於 IAM users and roles (IAM 使用者和角色),請從下拉式清單中選取要授予其存取權的 IAM 角色。
- 在 Catalog permissions (型錄許可) 下,選擇 Create database (建立資料庫)。
- 如果您想要 IAM 角色向帳戶中的其他角色授予權限,請在 Grantable permissions (可授予許可) 下選擇 Create database (建立資料庫)。
- 選擇 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-database 的 Create table (建立資料表) 許可授予與爬蟲程式或 ETL 任務關聯的 IAM 角色。
若要解決第二個錯誤,請將 example-database 的 Describe (描述) 許可授予與爬蟲程式或 ETL 任務關聯的 IAM 角色。
- 開啟 Lake Formation 主控台。
- 在導覽窗格的 Permissions (許可) 下,選擇 Data lake permissions (資料湖許可)。
- 選擇 Grant (授予)。
- 在 Principals (主體) 下,選擇 IAM users and roles (IAM 使用者和角色)。
- 對於 IAM users and roles (IAM 使用者和角色),選擇與爬蟲程式相關聯的 IAM 角色。
- 在 LF-Tags or catalog resources (LF 標籤或型錄資源) 下,選擇 Named data catalog resources (命名的 Data Catalog 資源)。
- 對於 Databases (資料庫),選擇您要將爬蟲程式寫入其中的資料庫。
- 在 Database permissions (資料庫許可) 下,根據您的使用案例選擇 Create table (建立資料表) 或 Describe (描述)。注意:爬蟲程式角色對於寫入其中的資料庫,必須同時具有 Describe (描述) 和 Create Table (建立資料表) 許可。對於 AWS Glue ETL,這些許可也就足夠,除非您從任務本身執行 UpdateDatabase 或 DeleteDatabase API 呼叫。在這些情況下,請授予 Alter (變更) 或 Drop (捨棄) 許可。
- 如果您需要 IAM 角色向帳戶中的其他角色授予權限,請在 Grantable permissions (可授予許可) 下設定許可。
- 選擇 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_table 的 Describe (描述) 和 Alter (變更) 許可授予與爬蟲程式相關聯的 IAM 角色。
對於讀取 example_table 的 ETL 任務,將 example_table 的 Describe (描述) 和 Select (選取) 許可授予與任務相關聯的 IAM 角色。如果 ETL 任務正在更新 example_table,將 example_table 的 Alter (變更) 許可授予與任務相關聯的 IAM 角色。
- 開啟 Lake Formation 主控台。
- 在導覽窗格的 Permissions (許可) 下,選擇 Data lake permissions (資料湖許可)。
- 選擇 Grant (授予)。
- 在 Principals (主體) 下,選擇 IAM users and roles (IAM 使用者和角色)。
- 對於 IAM users and roles (IAM 使用者和角色),選擇 IAM role (IAM 角色)。
- 在 LF-Tags or catalog resources (LF 標籤或型錄資源) 下,選擇 Named data catalog resources (命名的 Data Catalog 資源)。
- 對於 Databases (資料庫),選擇您要將爬蟲程式寫入其中的資料庫。
- 對於 Tables-optional (表格-選擇性),請選擇爬蟲程式正在存取的資料表。
- 在 Table permissions (資料表許可) 底下,根據您的使用案例選擇 Select (選取)、Describe (描述) 或 Alter (變更)。
- 如果您需要 IAM 角色向帳戶中的其他角色授予權限,請在 Grantable permissions (可授予許可) 下設定許可。
- 選擇 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 位置。
- 開啟 IAM 主控台。
- 為您的 AWS Glue 爬蟲程式或 AWS Glue 任務角色建立 IAM 政策。
- 新增許可 lakeformation:GetDataAccess 做為政策中資源的動作。注意:API lakeformation:GetDataAccess 必須使用萬用字元做為它的資源。
- 將政策附加到您的 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 路徑的必要許可時,會發生此錯誤。
若要解決此錯誤,請完成下列步驟:
- 開啟 Lake Formation 主控台。
- 在導覽窗格的 Register and ingest (註冊和擷取) 下,選擇 Data lake locations (資料湖位置)。
- 驗證錯誤訊息中的 Amazon S3 路徑或路徑前綴是否為 Data lake locations (資料湖位置) 清單中的註冊位置。
- 如果錯誤訊息中的 Amazon S3 路徑或前綴未列在資料湖位置清單中,則選擇 Register location (註冊位置)。
- 對於 Amazon S3 path (Amazon S3 路徑),請選擇 Browse (瀏覽),然後選擇正確的 Amazon S3 路徑。
- 對於 IAM role (IAM 角色),請保留預設選項 AWSServiceRoleForLakeFormationDataAccess。如果您使用自訂 IAM 角色,請確認滿足相關要求。**重要:**註冊 Amazon S3 位置時,Lake Formation 會擔任上述 IAM 角色。這會將臨時憑證授予存取該位置資料的整合式 AWS 服務。確認與已註冊 Amazon S3 位置關聯的 IAM 角色具有讀取和寫入 S3 儲存貯體的所需許可。這可以防止 AccessDenied錯誤。
- 在導覽窗格的 Permissions (許可) 下,選擇 Data locations (資料位置)。
- 選擇 Grant (授予)。
- 對於 Grant permissions (授予許可),選擇 My account (我的帳戶)。
- 在 IAM users and roles (IAM 使用者和角色) 下,選擇要授予其存取權的 IAM 角色。
- 選擇 Grant (授予)。
相關資訊
相關內容
- 已提問 9 個月前lg...
- 已提問 8 個月前lg...
- 已提問 1 年前lg...
- AWS 官方已更新 2 年前
- AWS 官方已更新 1 年前