

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

# 使用資料列層級存取控制保護資料湖
<a name="cbac-tutorial"></a>

AWS Lake Formation 資料列層級許可可讓您根據資料合規和管理政策，提供資料表中特定資料列的存取權。如果您有存放數十億筆記錄的大型資料表，您需要一種方法來讓不同的使用者和團隊僅存取他們被允許查看的資料。資料列層級存取控制是保護資料的簡單執行方式，同時讓使用者存取執行其任務所需的資料。Lake Formation 透過識別哪些主體存取了哪些資料、何時以及透過哪些服務，提供集中式稽核和合規報告。

在本教學課程中，您將了解資料列層級存取控制如何在 Lake Formation 中運作，以及如何設定它們。

本教學課程包含 AWS CloudFormation 範本，可讓您快速設定所需的資源。您可以檢閱並自訂它，以符合您的需求。

**Topics**
+ [目標對象](#tut-cbac-roles-tutorial)
+ [先決條件](#tut-cbac-prereqs)
+ [步驟 1：佈建您的 資源](#set-up-cbac-resources)
+ [步驟 2：不含資料篩選條件的查詢](#query-without-filters)
+ [步驟 3：設定資料篩選條件並授予許可](#setup-data-filters)
+ [步驟 4：使用資料篩選條件查詢](#query-with-filters)
+ [步驟 5：清除 AWS 資源](#cbac-clean-up)

## 目標對象
<a name="tut-cbac-roles-tutorial"></a>

本教學課程適用於資料管理員、資料工程師和資料分析師。下表列出資料擁有者和資料取用者的角色和責任。


| Role | Description | 
| --- | --- | 
| IAM 管理員 | 可建立使用者和角色以及 Amazon Simple Storage Service (Amazon S3) 儲存貯體的使用者。具有 AdministratorAccess AWS 受管政策。 | 
| 資料湖管理員 | 負責設定資料湖、建立資料篩選條件，以及將許可授予資料分析師的使用者。 | 
| 資料分析 | 可對資料湖執行查詢的使用者。位於不同國家/地區的資料分析師 （針對我們的使用案例，美國和日本） 只能分析位於自己國家/地區的客戶的產品評論，而且基於合規原因， 應該無法查看位於其他國家/地區的客戶資料。 | 

## 先決條件
<a name="tut-cbac-prereqs"></a>

開始本教學課程之前，您必須擁有可用於以具有正確許可的管理使用者身分登入 AWS 帳戶 的 。如需詳細資訊，請參閱[完成初始 AWS 組態任務](getting-started-setup.md#initial-aws-signup)。

本教學課程假設您熟悉 IAM。如需 IAM 的相關資訊，請參閱 [IAM 使用者指南](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)。

**變更 Lake Formation 設定**
**重要**  
啟動 CloudFormation 範本之前，請依照下列步驟停用選項 在 Lake Formation **中僅對新資料庫/資料表使用 IAM 存取控制**：

1. 在美國東部 （維吉尼亞北部） 區域或美國西部 （奧勒岡） 區域，登入位於 [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)：// 的 Lake Formation 主控台。

1. 在資料型錄下，選擇**設定**。

1. 取消選取 **僅對新資料庫使用 IAM 存取控制**，並**僅對新資料庫中的新資料表使用 IAM 存取控制**。

1.  選擇**儲存**。

## 步驟 1：佈建您的 資源
<a name="set-up-cbac-resources"></a>

本教學課程包含快速設定的 CloudFormation 範本。您可以檢閱並自訂它，以符合您的需求。 CloudFormation 範本會產生下列資源：
+ 使用者和政策：
  + DataLakeAdmin
  + DataAnalystUS
  + DataAnalystJP
+ Lake Formation 資料湖設定和許可
+ 用來將範例資料檔案從公有 Amazon S3 儲存貯體複製到 Amazon S3 儲存貯體的 Lambda 函數 （適用於 Lambda 後端 CloudFormation 自訂資源）
+ 做為資料湖的 Amazon S3 儲存貯體
+  AWS Glue Data Catalog 資料庫、資料表和分割區

**建立您的 資源**

請依照下列步驟，使用 CloudFormation 範本建立您的 資源。

1. 在美國東部 （維吉尼亞北部） 區域登入 CloudFormation 主控台，網址為 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)。

1. 選擇[啟動堆疊](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/create?templateURL=https://aws-bigdata-blog.s3.amazonaws.com/artifacts/lakeformation_row_security/lakeformation_tutorial_row_security.yaml)。

1. 在**建立堆疊**畫面上選擇**下一步**。

1. 輸入**堆疊名稱。**

1. 針對 **DatalakeAdminUserName** 和 **DatalakeAdminUserPassword**，輸入資料湖管理員使用者的 IAM 使用者名稱和密碼。

1. 針對 **DataAnalystUsUserName** 和 **DataAnalystUsUserPassword**，輸入您要用於負責美國市場之資料分析師使用者的使用者名稱和密碼。

1. 針對 **DataAnalystJpUserName** 和 **DataAnalystJpUserPassword**，輸入您要用於負責日文市集之資料分析師使用者的使用者名稱和密碼。

1. 針對 **DataLakeBucketName**，輸入資料儲存貯體的名稱。

1. 對於 **DatabaseName** 和 **TableName**，保留 為預設值。

1. 選擇**下一步**

1. 在下一頁中，選擇**下一步**。

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

1. 選擇**建立**。

   堆疊建立可能需要一分鐘才能完成。

## 步驟 2：不含資料篩選條件的查詢
<a name="query-without-filters"></a>

設定環境之後，您可以查詢產品評論資料表。首先在沒有資料列層級存取控制的情況下查詢資料表，以確保您可以看到資料。如果您是第一次在 Amazon Athena 中執行查詢，則需要設定查詢結果位置。

**在沒有資料列層級存取控制的情況下查詢資料表**

1. 以`DatalakeAdmin`使用者身分登入位於 https：//[https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 的Athena主控台，並執行下列查詢：

   ```
   SELECT * 
   FROM lakeformation_tutorial_row_security.amazon_reviews
   LIMIT 10
   ```

   下列螢幕擷取畫面顯示查詢結果。此資料表只有一個分割區 `product_category=Video`，因此每個記錄都是影片產品的檢閱註解。  
![查詢結果表格顯示 Amazon 產品評論，其中包含市集、客戶 ID、檢閱 ID、產品詳細資訊、評分和投票的資料欄。](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/cbac-tut-query-results1.jpg)

1. 接著，執行彙總查詢來擷取每個 的記錄總數`marketplace`。

   ```
   SELECT marketplace, count(*) as total_count
   FROM lakeformation_tutorial_row_security.amazon_reviews
   GROUP BY marketplace
   ```

   下列螢幕擷取畫面顯示查詢結果。資料`marketplace`欄有五個不同的值。在後續步驟中，您將使用 `marketplace`資料欄設定資料列型篩選條件。  
![查詢結果顯示具有五個值的市場資料欄：FR、UK、JP、DE 和 US 與計數。](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/cbac-tut-query-results2.jpg)

## 步驟 3：設定資料篩選條件並授予許可
<a name="setup-data-filters"></a>

本教學課程使用兩個資料分析師：一個負責美國市場，另一個負責日本市場。每個分析師只會使用 Athena 來分析其特定市場的客戶評論。建立兩個不同的資料篩選條件，一個用於負責美國市場的分析師，另一個用於負責日本市場的分析師。然後，授予分析師各自的許可。

**建立資料篩選條件並授予許可**

1. 建立篩選條件以限制對`US``marketplace`資料的存取。

   1. 以`DatalakeAdmin`使用者身分登入美國東部 （維吉尼亞北部） 區域的 Lake Formation 主控台，網址為 [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)：//。

   1. 選擇**資料篩選條件**。

   1. 選擇**建立新篩選條件**。

   1. 針對**資料篩選條件名稱**，輸入 `amazon_reviews_US`。

   1. 針對**目標資料庫**，選擇資料庫 `lakeformation_tutorial_row_security`。

   1. 針對**目標資料表**，選擇資料表 `amazon_reviews`。

   1.  對於**資料欄層級存取**，請將 保留為預設值。

   1. 針對**資料列篩選條件表達**式，輸入 `marketplace='US'`。

   1.  選擇 **Create filter (建立篩選條件)**。

1. 建立篩選條件以限制對日文`marketplace`資料的存取。

   1. 在**資料篩選條件**頁面上，選擇**建立新篩選條件**。

   1. 針對**資料篩選條件名稱**，輸入 `amazon_reviews_JP`。

   1. 針對**目標資料庫**，選擇資料庫 `lakeformation_tutorial_row_security`。

   1.  針對**目標資料表**，選擇 `table amazon_reviews`。

   1. 對於**資料欄層級存取**，請將 保留為預設值。

   1. 針對資料列篩選條件表達式，輸入 `marketplace='JP'`。

   1.  選擇 **Create filter (建立篩選條件)**。

1. 接著，使用這些資料篩選條件將許可授予資料分析師。請依照下列步驟將許可授予美國資料分析師 (`DataAnalystUS`)：

   1. 在**許可**下，選擇**資料湖許可**。

   1. 在**資料許可**下，選擇**授予**。

   1. 針對**主體**，選擇 **IAM 使用者和角色**，然後選取角色 `DataAnalystUS`。

   1.  針對 **LF 標籤或目錄資源**，選擇**具名資料目錄資源**。

   1. 針對 **Database (資料庫)**，輸入 `lakeformation_tutorial_row_security`。

   1.  針對**資料表選用**，選擇 `amazon_reviews`。

   1. 針對**資料篩選條件 – 選用**̧ 選取 `amazon_reviews_US`。

   1. 針對**資料篩選條件許可**，選取**選取**。

   1. 選擇 **Grant** (授予)。

1. 請依照下列步驟將許可授予日文資料分析師 (`DataAnalystJP`)：

   1. 在**許可**下，選擇**資料湖許可**。

   1. 在**資料許可**下，選擇**授予**。

   1. 針對**主體**，選擇 **IAM 使用者和角色**，然後選取角色 `DataAnalystJP`。

   1.  針對 **LF 標籤或目錄資源**，選擇**具名資料目錄資源**。

   1. 針對 **Database (資料庫)**，輸入 `lakeformation_tutorial_row_security`。

   1.  針對**資料表選用**，選擇 `amazon_reviews`。

   1. 針對**資料篩選條件 – 選用**̧ 選取 `amazon_reviews_JP`。

   1. 針對**資料篩選條件許可**，選取**選取**。

   1. 選擇 **Grant** (授予)。

## 步驟 4：使用資料篩選條件查詢
<a name="query-with-filters"></a>

將資料篩選條件連接到產品檢閱資料表後，請執行一些查詢，並查看 Lake Formation 如何強制執行許可。

1. 以`DataAnalystUS`使用者身分登入位於 https：//[https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 的 Athena 主控台。

1. 執行下列查詢以擷取一些記錄，這些記錄會根據我們定義的資料列層級許可進行篩選：

   ```
   SELECT * 
   FROM lakeformation_tutorial_row_security.amazon_reviews
   LIMIT 10
   ```

   下列螢幕擷取畫面顯示查詢結果。  
![查詢結果表格顯示 Amazon 產品評論，其中包含市集、客戶 ID、檢閱 ID、產品詳細資訊和評分的資料欄。](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/cbac-tut-query-results3.png)

1. 同樣地，請執行查詢來計算每個市集的記錄總數。

   ```
   SELECT marketplace , count ( * ) as total_count
   FROM lakeformation_tutorial_row_security .amazon_reviews
   GROUP BY marketplace
   ```

   查詢結果只會在結果`marketplace``US`中顯示 。這是因為僅允許使用者查看`marketplace`資料欄值等於 的資料列`US`。

1. 切換到`DataAnalystJP`使用者並執行相同的查詢。

   ```
   SELECT * 
   FROM lakeformation_tutorial_row_security.amazon_reviews
   LIMIT 10
   ```

   查詢結果只會顯示屬於 `JP` 的記錄`marketplace`。

1. 執行查詢以計算每個 的記錄總數`marketplace`。

   ```
   SELECT marketplace, count(*) as total_count
   FROM lakeformation_tutorial_row_security.amazon_reviews
   GROUP BY marketplace
   ```

   查詢結果只會顯示屬於 `JP` 的資料列`marketplace`。

## 步驟 5：清除 AWS 資源
<a name="cbac-clean-up"></a>

**清除資源**

若要避免不必要的費用 AWS 帳戶，您可以刪除用於本教學課程 AWS 的資源。
+ [刪除雲端形成堆疊](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html)。