使用 Lake Formation 標籤型存取控制管理資料湖 - AWS Lake Formation

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

使用 Lake Formation 標籤型存取控制管理資料湖

成千上萬的客戶正在 上建置 PB 級資料湖 AWS。其中許多客戶都使用 AWS Lake Formation 在整個組織中輕鬆建置和共用其資料湖。隨著資料表和使用者數量的增加,資料管理員和管理員正在尋找可以輕鬆大規模管理資料湖許可的方法。Lake Formation Tag 型存取控制 (LF-TBAC) 可讓資料管理員建立 LF 標籤 (根據其資料分類和內部部署),然後連接到 資源,以解決此問題。

LF-TBAC 是一種根據屬性定義許可的授權策略。在 Lake Formation 中,這些屬性稱為 LF 標籤。您可以將 LF 標籤連接至 Data Catalog 資源和 Lake Formation 主體。Data lake 管理員可以使用 LF 標籤來指派和撤銷 Lake Formation 資源的許可。如需詳細資訊,請參閱 基於 Lake Formation 標籤的訪問控制

本教學課程示範如何使用 AWS 公有資料集建立 Lake Formation 標籤型存取控制政策。此外,它展示如何查詢具有與其相關聯的 Lake Formation 標籤型存取政策的資料表、資料庫和資料欄。

您可以針對下列使用案例使用 LF-TBAC:

  • 您有大量資料表和主體,資料湖管理員必須授予存取權

  • 您想要根據內科來分類資料,並根據分類來授予許可

  • 資料湖管理員想要以鬆散的方式動態指派許可

以下是使用 LF- 設定許可的高階步驟TBAC:

  1. 資料管理員使用兩個 LF 標籤定義標籤本體: ConfidentialSensitive。使用 的資料Confidential=True具有更嚴格的存取控制。使用 的資料Sensitive=True需要分析師的特定分析。

  2. 資料管理員會將不同的許可層級指派給資料工程師,以使用不同的 LF 標籤建置資料表。

  3. 資料工程師會建立兩個資料庫: tag_databasecol_tag_database。中的所有資料表tag_database都使用 設定Confidential=True。中的所有資料表col_tag_database都使用 設定Confidential=False。中資料表的某些資料欄col_tag_database會標記 ,Sensitive=True以因應特定分析需求。

  4. 對於具有特定表達條件 Confidential=TrueConfidential=False、 的資料表,資料工程師會授予分析師讀取許可Sensitive=True

  5. 透過此組態,資料分析師可以專注於使用正確的資料執行分析。

目標對象

本教學課程適用於資料管理員、資料工程師和資料分析師。在 Lake Formation 中管理 AWS Glue Data Catalog 許可時,生產帳戶中的資料管理員會根據其支援的功能擁有功能所有權,並可以授予各種取用者、外部組織和帳戶的存取權。

下表列出本教學課程中使用的角色:

角色 描述
資料管理員 (管理員) lf-data-steward 使用者具有下列存取權:
  • 讀取 Data Catalog 中所有資源的存取權

  • 可以建立 LF 標籤,並與資料工程師角色建立關聯,以授予其他主體許可

資料工程師

lf-data-engineer 使用者具有下列存取權:

  • 完整讀取、寫入和更新對 Data Catalog 中所有資源的存取

  • 資料湖中的資料位置許可

  • 可以關聯 LF 標籤和與 Data Catalog 建立關聯

  • 可以將 LF 標籤連接至 資源,該資源會根據資料管理員建立的任何政策提供主體存取權

資料分析 lf-data-analyst 使用者具有下列存取權:
  • 精細存取 Lake Formation 標籤型存取政策共用的資源

必要條件

開始本教學課程之前,您必須擁有 AWS 帳戶 可用於以具有正確許可的管理使用者身分登入的 。如需詳細資訊,請參閱完成初始 AWS 組態任務

本教學課程假設您熟悉 IAM。如需 的相關資訊IAM,請參閱 IAM 使用者指南

步驟 1:佈建資源

本教學課程包含快速設定的 AWS CloudFormation 範本。您可以檢閱並自訂它,以符合您的需求。範本會建立三個不同的角色 (列於 中目標對象) 來執行此練習,並將 nyc-taxi-data 資料集複製到本機 Amazon S3 儲存貯體。

  • Amazon S3 儲存貯體

  • 適當的 Lake Formation 設定

  • 適當的 Amazon EC2 資源

  • 具有憑證的三個IAM角色

建立您的資源
  1. 在美國東部 (維吉尼亞北部) 的 https://console.aws.amazon.com/cloudformation 登入 AWS CloudFormation 主控台。

  2. 選擇啟動堆疊

  3. 選擇 Next (下一步)

  4. 使用者組態區段中,輸入三個角色的密碼:DataStewardUserPasswordDataEngineerUserPasswordDataAnalystUserPassword

  5. 檢閱最終頁面上的詳細資訊,然後選取我確認 AWS CloudFormation 可能會建立IAM資源

  6. 選擇 Create (建立)。

    堆疊建立最多可能需要五分鐘的時間。

注意

完成教學課程後,您可能想要刪除 中的堆疊 AWS CloudFormation ,以避免繼續產生費用。確認資源在堆疊的事件狀態中已成功刪除。

步驟 2:註冊您的資料位置、建立 LF-Tag 內部部署,以及授予許可

在此步驟中,資料管理員使用者使用兩個 LF 標籤定義標籤本體: ConfidentialSensitive,並讓特定IAM主體能夠將新建立的 LF 標籤連接至 資源。

註冊資料位置並定義 LF 標籤本體
  1. 以資料管理員使用者 (lf-data-steward) 身分執行第一個步驟,以驗證 Amazon S3 中的資料,以及 Lake Formation 中的資料目錄。

    1. 在 登入 Lake Formation 主控台https://console.aws.amazon.com/lakeformation/lf-data-steward如同部署 AWS CloudFormation 堆疊時使用的密碼。

    2. 在導覽窗格中,在許可 ̧ 下選擇管理角色和任務

    3. Data lake 管理員區段中選擇新增

    4. 新增管理員頁面上,針對IAM使用者和角色 ,選擇使用者 lf-data-steward

    5. 選擇儲存以新增lf-data-steward為 Lake Formation 管理員。

  2. 接下來,更新 Data Catalog 設定,以使用 Lake Formation 許可來控制目錄資源,而不是IAM以 為基礎的存取控制。

    1. 在導覽窗格中的管理 下,選擇 Data Catalog 設定

    2. 取消核取 僅對新資料庫使用IAM存取控制

    3. 取消核取 僅對新資料庫 中的新資料表使用IAM存取控制。

    4. 按一下 Save (儲存)

  3. 接下來,註冊資料湖的資料位置。

    1. 在導覽窗格中的管理 下,選擇 Data lake 位置

    2. 選擇註冊位置

    3. 註冊位置頁面上,針對 Amazon S3 路徑 ,輸入 s3://lf-tagbased-demo-Account-ID

    4. 對於IAM角色 ̧,保持預設值AWSServiceRoleForLakeFormationDataAccess不變。

    5. 選擇 Lake Formation 作為許可模式。

    6. 選擇註冊位置

  4. 接下來,定義 LF 標籤來建立本體。

    1. 在導覽窗格中的許可下,選擇 LF 標籤和許可。

    2. 選擇新增 LF 標籤

    3. Key (索引鍵) 欄位,輸入 Confidential

    4. 對於,新增 TrueFalse

    5. 選擇新增 LF 標籤

    6. 重複這些步驟,以建立Sensitive具有 值 的 LF 標籤True

    您已為此練習建立所有必要的 LF 標籤。

授予IAM使用者許可
  1. 接下來,讓特定IAM主體能夠將新建立的 LF 標籤連接至資源。

    1. 在導覽窗格中的許可下,選擇 LF 標籤和許可

    2. LF-Tag 許可區段中,選擇授予許可

    3. 針對許可類型 ,選擇 LF-Tag 鍵值對許可

    4. 選取IAM使用者和角色

    5. 對於IAM使用者和角色 ,搜尋並選擇lf-data-engineer角色。

    6. LF 標籤區段中,新增Confidential具有值 True和 的索引鍵False,以及keySensitive具有值 的 True

    7. 許可 下,選取描述關聯許可可授予許可

    8. 選擇 Grant (授予)。

  2. 接下來,將許可授予 lf-data-engineer,以在 Data Catalog 和 建立的基礎 Amazon S3 儲存貯體中建立資料庫 AWS CloudFormation。

    1. 在導覽窗格中的管理下,選擇管理角色和任務

    2. 資料庫建立者區段中,選擇授予

    3. 針對IAM使用者和角色 ,選擇lf-data-engineer角色。

    4. 針對目錄許可 ,選取建立資料庫

    5. 選擇 Grant (授予)。

  3. 接下來,將 Amazon S3 儲存貯體的許可授予(s3://lf-tagbased-demo-Account-ID)lf-data-engineer使用者。

    1. 在導覽窗格中的許可 下,選擇資料位置

    2. 選擇 Grant (授予)。

    3. 選取我的帳戶

    4. 針對IAM使用者和角色 ,選擇lf-data-engineer角色。

    5. 對於儲存位置 ,輸入範本 建立的 Amazon S3 AWS CloudFormation 儲存貯體(s3://lf-tagbased-demo-Account-ID)

    6. 選擇 Grant (授予)。

  4. 接下來,對與 LF-Tag 表達式 相關聯的資源授予可lf-data-engineer授予許可Confidential=True

    1. 在導覽窗格中的許可 下,選擇 Data lake 許可

    2. 選擇 Grant (授予)。

    3. 選取IAM使用者和角色

    4. 選擇角色 lf-data-engineer

    5. LF-Tags 或目錄資源區段中,選取符合 LF-Tags 的資源

    6. 選擇新增 LF 標籤鍵值對

    7. 使用Confidential值 新增 金鑰True

    8. 資料庫許可區段中,選取描述資料庫許可准許許可

    9. 資料表許可區段中,針對資料表許可和可授予許可,選取描述 選取 變更

    10. 選擇 Grant (授予)。

  5. 接下來,對與 LF-Tag 表達式 相關聯的資源授予可lf-data-engineer授予許可Confidential=False

    1. 在導覽窗格中的許可 下,選擇 Data lake 許可

    2. 選擇 Grant (授予)。

    3. 選取IAM使用者和角色

    4. 選擇角色 lf-data-engineer

    5. 選取與 LF 標籤相符的資源。

    6. 選擇新增 LF 標籤

    7. 使用 Confidential值新增 金鑰False

    8. 資料庫許可區段中,選取描述資料庫許可准許許可

    9. 資料表和資料欄許可區段中,請勿選取任何項目。

    10. 選擇 Grant (授予)。

  6. 接下來,我們對與 LF-Tag 鍵值對Confidential=False和 相關聯的資源授予可lf-data-engineer授予許可Sensitive=True

    1. 在導覽窗格中的許可 下,選擇資料許可

    2. 選擇 Grant (授予)。

    3. 選取IAM使用者和角色

    4. 選擇角色 lf-data-engineer

    5. LF-Tags 或目錄資源區段下,選取 LF-Tags 相符的資源

    6. 選擇新增 LF 標籤

    7. 使用 Confidential值新增 金鑰False

    8. 選擇新增 LF 標籤鍵值對

    9. 使用 Sensitive值新增 金鑰True

    10. 資料庫許可區段中,選取描述資料庫許可准許許可

    11. 資料表許可區段中,針對資料表許可和可授予許可,選取描述選取 變更

    12. 選擇 Grant (授予)。

步驟 3:建立 Lake Formation 資料庫

在此步驟中,您會建立兩個資料庫,並將 LF 標籤連接至資料庫和特定資料欄,以供測試之用。

建立資料庫和資料表以進行資料庫層級存取
  1. 首先,建立資料庫 tag_database、資料表 source_data,並連接適當的 LF 標籤。

    1. 在 Lake Formation 主控台 (https://console.aws.amazon.com/lakeformation/) 的資料目錄 下,選擇資料庫

    2. 選擇建立資料庫

    3. 針對名稱,輸入 tag_database

    4. 針對位置 ,輸入範本 建立的 Amazon S3 AWS CloudFormation 位置(s3://lf-tagbased-demo-Account-ID/tag_database/)

    5. 取消選取 僅對此資料庫 中的新資料表使用IAM存取控制

    6. 選擇建立資料庫

  2. 接下來,在 中建立新的資料表tag_database

    1. 資料庫頁面上,選取資料庫 tag_database

    2. 選擇檢視資料表,然後按一下建立資料表

    3. 針對名稱,輸入 source_data

    4. Database (資料庫) 中,選擇 tag_database 資料庫。

    5. 針對資料表格式 ,選擇標準 AWS Glue 資料表

    6. 對於位於 的資料,選取帳戶 中的指定路徑

    7. 對於包含路徑,輸入 AWS CloudFormation 範本 tag_database 建立的路徑(s3://lf-tagbased-demoAccount-ID/tag_database/)

    8. 對於資料格式 ,選取 CSV

    9. 上傳結構描述 下,輸入下列資料欄結構JSON陣列以建立結構描述:

      [ { "Name": "vendorid", "Type": "string" }, { "Name": "lpep_pickup_datetime", "Type": "string" }, { "Name": "lpep_dropoff_datetime", "Type": "string" }, { "Name": "store_and_fwd_flag", "Type": "string" }, { "Name": "ratecodeid", "Type": "string" }, { "Name": "pulocationid", "Type": "string" }, { "Name": "dolocationid", "Type": "string" }, { "Name": "passenger_count", "Type": "string" }, { "Name": "trip_distance", "Type": "string" }, { "Name": "fare_amount", "Type": "string" }, { "Name": "extra", "Type": "string" }, { "Name": "mta_tax", "Type": "string" }, { "Name": "tip_amount", "Type": "string" }, { "Name": "tolls_amount", "Type": "string" }, { "Name": "ehail_fee", "Type": "string" }, { "Name": "improvement_surcharge", "Type": "string" }, { "Name": "total_amount", "Type": "string" }, { "Name": "payment_type", "Type": "string" } ]
    10. 選擇上傳。上傳結構描述後,資料表結構描述應如下所示螢幕擷取畫面:

      Table schema with 18 columns showing column names and data types, all set to string.
    11. 選擇提交

  3. 接下來,在資料庫層級連接 LF 標籤。

    1. 資料庫頁面上,尋找並選取 tag_database

    2. 動作功能表中,選擇編輯 LF 標籤

    3. 選擇指派新的 LF 標籤

    4. 針對指派的金鑰 ̧ 選擇您先前建立的 Confidential LF 標籤。

    5. 針對,選擇 True

    6. 選擇 Save (儲存)。

    如此即完成 tag_database 資料庫的 LF-Tag 指派。

建立資料庫和資料表以進行資料欄層級存取

重複下列步驟以建立資料庫col_tag_database和資料表 source_data_col_lvl,並在資料欄層級連接 LF 標籤。

  1. 資料庫頁面上,選擇建立資料庫

  2. 針對名稱,輸入 col_tag_database

  3. 對於位置 ,輸入 AWS CloudFormation 範本 建立的 Amazon S3 位置(s3://lf-tagbased-demo-Account-ID/col_tag_database/)

  4. 取消選取 僅對此資料庫 中的新資料表使用IAM存取控制

  5. 選擇建立資料庫

  6. 資料庫頁面上,選取您的新資料庫 (col_tag_database)

  7. 選擇檢視資料表,然後按一下建立資料表

  8. 針對名稱,輸入 source_data_col_lvl

  9. 針對資料庫 ,選擇您的新資料庫 (col_tag_database)

  10. 針對資料表格式 ,選擇標準 AWS Glue 資料表

  11. 對於位於 的資料,選取帳戶 中的指定路徑

  12. 輸入 的 col_tag_database Amazon S3 路徑(s3://lf-tagbased-demo-Account-ID/col_tag_database/)

  13. 對於資料格式 ,選取 CSV

  14. 在 下Upload schema,輸入下列結構描述JSON:

    [ { "Name": "vendorid", "Type": "string" }, { "Name": "lpep_pickup_datetime", "Type": "string" }, { "Name": "lpep_dropoff_datetime", "Type": "string" }, { "Name": "store_and_fwd_flag", "Type": "string" }, { "Name": "ratecodeid", "Type": "string" }, { "Name": "pulocationid", "Type": "string" }, { "Name": "dolocationid", "Type": "string" }, { "Name": "passenger_count", "Type": "string" }, { "Name": "trip_distance", "Type": "string" }, { "Name": "fare_amount", "Type": "string" }, { "Name": "extra", "Type": "string" }, { "Name": "mta_tax", "Type": "string" }, { "Name": "tip_amount", "Type": "string" }, { "Name": "tolls_amount", "Type": "string" }, { "Name": "ehail_fee", "Type": "string" }, { "Name": "improvement_surcharge", "Type": "string" }, { "Name": "total_amount", "Type": "string" }, { "Name": "payment_type", "Type": "string" } ]
  15. 選擇 Upload。上傳結構描述後,資料表結構描述應如下所示螢幕擷取畫面。

    Table schema with 18 columns showing column names and data types, all set to string.
  16. 選擇提交以完成資料表的建立。

  17. 現在,將 Sensitive=True LF-Tag 與資料欄 vendorid和 建立關聯fare_amount

    1. 資料表頁面上,選取您建立的資料表(source_data_col_lvl)

    2. 動作功能表中,選擇結構描述

    3. 選取欄vendorid,然後選擇編輯 LF 標籤

    4. 針對指派的金鑰 ,選擇敏感

    5. 針對,選擇 True

    6. 選擇 Save (儲存)。

  18. 接下來,將 Confidential=False LF-Tag 與 建立關聯col_tag_database。從 登入col_tag_database時,這是lf-data-analyst描述資料庫的必要條件 Amazon Athena。

    1. 資料庫頁面上,尋找並選取 col_tag_database

    2. 動作功能表中,選擇編輯 LF 標籤

    3. 選擇指派新的 LF 標籤

    4. 針對指派的金鑰 ,選擇您先前建立的 Confidential LF 標籤。

    5. 針對,選擇 False

    6. 選擇 Save (儲存)。

步驟 4:授予資料表許可

col_tag_database 使用 LF 標籤tag_database和 將許可授予資料分析師,以取用資料庫Confidential和資料表Sensitive

  1. 請依照下列步驟,在與 LF-Tag Confidential=True(Database:tag_database) 相關聯的物件上授予lf-data-analyst使用者許可,以Describe擁有資料表的資料庫和Select許可。

    1. https://console.aws.amazon.com/lakeformation/身分登入 Lake Formation 主控台lf-data-engineer

    2. 許可 下,選取 Data lake 許可

    3. 選擇 Grant (授予)。

    4. 主體 下,選取IAM使用者和角色

    5. 針對IAM使用者和角色 ,選擇 lf-data-analyst

    6. LF 標籤 或目錄資源 下,選取 LF 標籤 相符的資源

    7. 選擇新增 LF 標籤

    8. 針對金鑰 ,選擇 Confidential

    9. 針對,選擇 True

    10. 針對資料庫許可 ,選取 Describe

    11. 針對資料表許可 ,選擇選取描述

    12. 選擇 Grant (授予)。

  2. 接下來,重複這些步驟,將 LF-Tag 表達式的許可授予資料分析師Confidential=False。從 Amazon Athena 登入source_data_col_lvl時,此 LF 標籤用於描述 lf-data-analyst col_tag_database和 資料表。

    1. https://console.aws.amazon.com/lakeformation/身分登入 Lake Formation 主控台lf-data-engineer

    2. 資料庫頁面上,選取資料庫 col_tag_database

    3. 選擇動作授予

    4. 主體 下,選取IAM使用者和角色

    5. 針對IAM使用者和角色 ,選擇 lf-data-analyst

    6. 選取 LF-Tags 相符的資源

    7. 選擇新增 LF 標籤

    8. 針對金鑰 ,選擇 Confidential

    9. 針對̧ 選擇 False

    10. 針對資料庫許可 ,選取 Describe

    11. 針對資料表許可 ,請勿選取任何項目。

    12. 選擇 Grant (授予)。

  3. 接下來,重複這些步驟,將 Confidential=False和 的 LF-Tag 表達式的許可授予資料分析師Sensitive=True。從 Amazon Athena 登入時,此 LF 標籤用於描述 col_tag_database和 資料表 lf-data-analyst source_data_col_lvl(欄層級)。

    1. https://console.aws.amazon.com/lakeformation/ 身分登入 Lake Formation 主控台lf-data-engineer

    2. 在資料庫頁面上,選取資料庫 col_tag_database

    3. 選擇動作授予

    4. 主體 下,選取IAM使用者和角色

    5. 針對IAM使用者和角色 ,選擇 lf-data-analyst

    6. 選取 LF-Tags 相符的資源

    7. 選擇新增 LF 標籤

    8. 針對金鑰 ,選擇 Confidential

    9. 針對̧ 選擇 False

    10. 選擇新增 LF 標籤

    11. 針對金鑰 ,選擇 Sensitive

    12. 針對̧ 選擇 True

    13. 針對資料庫許可 ,選取 Describe

    14. 針對資料表許可 ,選取 SelectDescribe

    15. 選擇 Grant (授予)。

步驟 5:在 Amazon Athena 中執行查詢以驗證許可

對於此步驟,請使用 Amazon Athena 對兩個資料表 執行SELECT查詢(source_data and source_data_col_lvl)。使用 Amazon S3 路徑作為查詢結果位置 (s3://lf-tagbased-demo-Account-ID/athena-results/)

  1. https://console.aws.amazon.com/athena/身分登入 Athena 主控台lf-data-analyst

  2. 在 Athena 查詢編輯器中,選擇左側面板tag_database中的 。

  3. 選擇旁邊的其他功能表選項圖示 (三個垂直點)source_data,然後選擇預覽資料表

  4. 選擇 Run query (執行查詢)。

    查詢應該需要幾分鐘的時間才能執行。查詢會顯示輸出中的所有資料欄,因為 LF 標籤與資料庫層級相關聯,且source_data資料表會自動LF-tag從資料庫繼承 tag_database

  5. 使用 col_tag_database和 執行另一個查詢source_data_col_lvl

    第二個查詢會傳回標記為 Non-Confidential和 的兩個資料欄Sensitive

  6. 您也可以檢查以查看您沒有政策授予之資料欄上的 Lake Formation 標籤型存取政策行為。從資料表 選取未標記的資料欄時source_data_col_lvl,Athena 會傳回錯誤。例如,您可以執行下列查詢,以選擇未標記的資料欄geolocationid

    SELECT geolocationid FROM "col_tag_database"."source_data_col_lvl" limit 10;

步驟 6:清除 AWS 資源

若要避免不必要的 費用 AWS 帳戶,您可以刪除用於本教學課程 AWS 的資源。

  1. 以 登入 Lake Formation 主控台,lf-data-engineer並刪除資料庫tag_databasecol_tag_database

  2. 接下來,以 身分登入lf-data-steward並清除上述授予的所有 LF 標籤許可資料許可資料位置許可,這些許可已授予 lf-data-engineerlf-data-analyst.

  3. 使用您用來部署 AWS CloudFormation 堆疊的IAM憑證,以帳戶擁有者身分登入 Amazon S3 主控台。

  4. 刪除下列儲存貯體:

    • lf-tagbased-demo-accesslogs-acct-id

    • lf-tagbased-demo-acct-id

  5. https://console.aws.amazon.com/cloudformation 登入 AWS CloudFormation 主控台,並刪除您建立的堆疊。等待堆疊狀態變更為 DELETE_COMPLETE