

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

# 管理使用外部中繼存放區的資料集許可
<a name="data-sharing-hms"></a>

使用 AWS Glue Data Catalog 中繼資料聯合 (Data Catalog 聯合），您可以將 Data Catalog 連線到外部中繼存放區，以存放 Amazon S3 資料的中繼資料，並使用 安全地管理資料存取許可 AWS Lake Formation。您不需要將中繼資料從外部中繼存放區遷移到 Data Catalog。

Data Catalog 提供集中式中繼資料儲存庫，可讓您更輕鬆地管理和探索不同系統中的資料。當您的組織管理 Data Catalog 中的資料時，您可以使用 AWS Lake Formation 來控制對 Amazon S3 中資料集的存取。

**注意**  
目前，我們僅支援 Apache Hive （第 3 版及更高版本） 中繼存放區聯合。

若要設定 Data Catalog 聯合，我們在 中提供名為 [GlueDataCatalogFederation-HiveMetastore](https://console.aws.amazon.com/lambda/home#/create/app?applicationId=arn:aws:serverlessrepo:us-east-1:766175011753:applications/GlueDataCatalogFederation-HiveMetastore) 的 AWS Serverless Application Model (AWS SAM) 應用程式 AWS Serverless Application Repository。

參考實作是在 GitHub 上提供，做為[AWS Glue Data Catalog 聯合 - Hive 中繼存放區的](https://github.com/awslabs/aws-glue-data-catalog-federation)開放原始碼專案。

 AWS SAM 應用程式會建立和部署將 Data Catalog 連線至 Hive 中繼存放區所需的下列資源：
+ ** AWS Lambda 函數** – 託管在 Data Catalog 與 Hive 中繼存放區之間通訊的聯合服務的實作。 會 AWS Glue 叫用此 Lambda 函數，從 Hive 中繼存放區擷取中繼資料物件。
+ **Amazon API Gateway** – Hive 中繼存放區的連線端點，可做為代理，將所有調用路由至 Lambda 函數。
+ **IAM 角色** – 具有必要許可的角色，可在 Data Catalog 與 Hive 中繼存放區之間建立連線。
+ **AWS Glue 連線** – 一種 AWS Glue 連線 Amazon API Gateway 類型，可存放 Amazon API Gateway 端點和 IAM 角色以叫用它。

當您查詢資料表時， AWS Glue 服務會對 Hive 中繼存放區進行執行期呼叫，並擷取中繼資料。Lambda 函數可做為 Hive 中繼存放區和 Data Catalog 之間的轉譯器。

建立連線後，若要將 Hive 中繼存放區中的中繼資料與 Data Catalog 同步，您需要使用 Hive 中繼存放區連線詳細資訊在 Data Catalog 中建立*聯合資料庫*，並將此資料庫映射至 Hive 資料庫。當資料庫指向 Data Catalog 外部的實體時，即稱為聯合資料庫。

您可以使用標籤型存取控制和聯合資料庫上的具名資源方法來套用 Lake Formation 許可，並將其共用到多個 AWS 帳戶、 AWS Organizations和組織單位 (OUs)。您也可以直接與來自另一個帳戶的 IAM 主體共用聯合資料庫。

 您可以使用外部 Hive 資料表上的 Lake Formation 資料篩選條件，在資料欄層級、資料列層級和儲存格層級定義精細許可。您可以使用 Amazon Athena、Amazon Redshift 或 Amazon EMR 查詢 Lake Formation 受管外部 Hive 資料表。

如需跨帳戶資料共用和資料篩選的詳細資訊，請參閱：
+ [Lake Formation 中的跨帳戶資料共用](cross-account-permissions.md)
+ [Lake Formation 中的資料篩選和儲存格層級安全性](data-filtering.md)

**Data Catalog 中繼資料聯合高階步驟**

1. 您可以建立具有適當許可的 IAM 使用者和角色，以部署 AWS SAM 應用程式和建立聯合資料庫。

1. 您可以透過選取使用外部 Hive 中繼存放區的資料集`Enable Data Catalog federation`選項，向 Lake Formation 註冊 Amazon S3 資料位置。

1. 您可以設定 AWS SAM 應用程式設定 (AWS Glue 連線名稱、Hive 中繼存放區的 URL 和 Lambda 函數參數），並部署 AWS SAM 應用程式。

1.  AWS SAM 應用程式會部署將外部 Hive 中繼存放區與 Data Catalog 連線所需的資源。

1. 若要在 Hive 資料庫和資料表上套用 Lake Formation 許可，您可以使用 Hive 中繼存放區連線詳細資訊在 Data Catalog 中建立資料庫，並將此資料庫映射至 Hive 資料庫。

1. 將聯合資料庫的許可授予您帳戶或其他帳戶中的主體。

**注意**  
您可以將 Data Catalog 連線到外部 Hive 訊息存放區、建立聯合資料庫，以及在 Hive 資料庫和資料表上執行查詢和 ETL 指令碼，而無需套用 Lake Formation 許可。對於未向 Lake Formation 註冊的 Amazon S3 中的來源資料，存取權取決於 Amazon S3 的 IAM 許可政策和 AWS Glue 動作。

如需限制的詳細資訊，請參閱[Hive 中繼資料存放區資料共用的考量和限制](notes-hms.md)。

**Topics**
+ [工作流程](#hms-workflow)
+ [將 Data Catalog 連線至 Hive 中繼存放區的先決條件](hms-prerequisites.md)
+ [將 Data Catalog 連接到外部 Hive 中繼存放區](hms-setup.md)
+ [其他資源](additional-resources-hms.md)

## 工作流程
<a name="hms-workflow"></a>

下圖顯示將 AWS Glue Data Catalog 連接到外部 Hive 中繼存放區的工作流程。

![\[Workflow diagram showing Hive metastore connection to AWS Glue Data Catalog with numbered steps.\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/hms-workflow.png)


1. 委託人使用整合的服務提交查詢，例如 Athena 或 Redshift Spectrum。

1. 整合的服務會呼叫 Data Catalog 以取得中繼資料，進而呼叫 Hive 中繼存放區端點， Amazon API Gateway並接收中繼資料請求的回應。

1. 整合的服務會將請求傳送至 Lake Formation，以驗證資料表資訊和登入資料來存取資料表。

1.  Lake Formation 會授權請求，並將臨時登入資料提供給整合的應用程式，以允許資料存取。

1. 使用從 Lake Formation 收到的臨時登入資料，整合服務會從 Amazon S3 讀取資料，並將結果分享給委託人。

# 將 Data Catalog 連線至 Hive 中繼存放區的先決條件
<a name="hms-prerequisites"></a>

若要將 AWS Glue Data Catalog 連線至外部 Apache Hive 中繼存放區並設定資料存取許可，您需要完成下列要求：
**注意**  
我們建議 Lake Formation 管理員部署 AWS SAM 應用程式，只有具有特殊權限的使用者使用 Hive 中繼存放區連線來建立對應的聯合資料庫。

1. 

**建立 IAM 角色。**

**部署 AWS SAM 應用程式**
   + 建立具有必要許可的角色，以部署建立與 Hive 中繼存放區連線所需的資源 Amazon API Gateway(Lambda 函數、、IAM 角色和 AWS Glue 連線）。

**建立聯合資料庫**

   資源需要下列許可：
   + `glue:CreateDatabase on resource arn:aws:glue:region:account-id:database/gluedatabasename`
   + `glue:PassConnection on resource arn:aws:glue:region:account-id:connection/hms_connection`

1. 

**向 Lake Formation 註冊 Amazon S3 位置。**

   若要使用 Lake Formation 來管理和保護資料湖中的資料，您必須向 Lake Formation 註冊具有 Hive 中繼存放區中資料表資料的 Amazon S3 位置。藉由這樣做，Lake Formation 可以將登入資料提供給 AWS 分析服務，例如 Athena、Redshift Spectrum 和 Amazon EMR。

   如需註冊 Amazon S3 位置的詳細資訊，請參閱 [將 Amazon S3 位置新增至您的資料湖](register-data-lake.md)。

   當您註冊 Amazon S3 位置時，請選取**啟用資料目錄聯合核取方塊**，以允許 Lake Formation 擔任角色來存取聯合資料庫中的資料表。  
![\[Register location form for AWS Lake Formation with Amazon S3 path and IAM role options.\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/hms-register-s3.png)

   如需向 Lake Formation 註冊資料位置的詳細資訊，請參閱 [為您的資料湖設定 Amazon S3 位置](initial-lf-config.md#register-s3-location)。

1. 

**使用正確的 Amazon EMR 版本。**

   若要搭配聯合 Hive 中繼存放區資料庫使用 Amazon EMR，您需要有 Hive 3.x 版或更新版本，以及 Amazon EMR 6.x 版或更新版本。

# 將 Data Catalog 連接到外部 Hive 中繼存放區
<a name="hms-setup"></a>

若要將 AWS Glue Data Catalog 連接到 Hive 中繼存放區，您需要部署名為 [GlueDataCatalogFederation-HiveMetastore](https://console.aws.amazon.com/lambda/home#/create/app?applicationId=arn:aws:serverlessrepo:us-east-1:766175011753:applications/GlueDataCatalogFederation-HiveMetastore) AWS SAM 的應用程式。它會建立將外部 Hive 中繼存放區與 Data Catalog 連線所需的資源。您可以在 中存取 AWS SAM 應用程式 AWS Serverless Application Repository。

 AWS SAM 應用程式會使用 Lambda 函數建立 Amazon API Gateway 後方 Hive 中繼存放區的連線。 AWS SAM 應用程式使用統一資源識別符 (URI) 做為使用者的輸入，並將外部 Hive 中繼存放區連接到 Data Catalog。當使用者在 Hive 資料表上執行查詢時，Data Catalog 會呼叫 API Gateway 端點。端點會叫用 Lambda 函數來擷取 Hive 資料表的中繼資料。

**將 Data Catalog 連接到 Hive 中繼存放區並設定許可**

1. 

**部署 AWS SAM 應用程式。**

   1. 登入 AWS 管理主控台 並開啟 AWS Serverless Application Repository。

   1. 選擇在導覽窗格中的 **Available applications** (可用的應用程式)。

   1. 選擇**公有應用程式**。

   1. 選取選項 **Show apps that create custom IAM roles or resource policies** (顯示建立自訂 IAM 角色或資源政策的應用程式)。

   1. 在搜尋方塊中，輸入名稱 **GlueDataCatalogFederation-HiveMetastore**。

   1. 選擇 **GlueDataCatalogFederation-HiveMetastore** 應用程式。

   1. 在**應用程式設定**下，輸入 Lambda 函數的下列最低必要設定：
      + **應用程式名稱** - 您 AWS SAM 應用程式的名稱。
      + **GlueConnectionName** - 連線的名稱。
      + **HiveMetastoreURIs** - Hive 中繼存放區主機的 URI。
      + **LambdaMemory** - 從 128-10240 開始，以 MB 為單位的 Lambda 記憶體數量。預設值為 1024。
      + **LambdaTimeout** - Lambda 調用執行時間上限，以秒為單位。預設值為 30。
      + **VPCSecurityGroupIds** 和 **VPCSubnetIds** - Hive 中繼存放區所在的 VPC 資訊。

   1. 選擇 **I acknowledge that this app creates custom IAM roles and resource policies** (我認可此應用程式建立自訂的 IAM 角色和資源政策)。如需詳細資訊，請選擇 **Info (資訊)** 連結。

   1. 在 **Application settings** (應用程式設定) 部分的右下方，選擇 **Deploy** (部署)。部署完成後，Lambda 函數會出現在 Lambda 主控台的 **Resources** (資源) 區段中。

    應用程式已部署至 Lambda。其名稱前面加上 **serverlessrepo-**，表示應用程式已從 部署 AWS Serverless Application Repository。選取應用程式會帶您前往**資源**頁面，其中會列出已部署應用程式的每個資源。資源包含 Lambda 函數，允許 Data Catalog 與 Hive 中繼存放區之間、 AWS Glue 連線，以及資料庫聯合所需的其他資源進行通訊。

1. 

**在 Data Catalog 中建立聯合資料庫。**

   建立 Hive 中繼存放區的連線之後，您可以在 Data Catalog 中建立指向外部 Hive 中繼存放區資料庫的聯合資料庫。您需要為連線到 Data Catalog 的每個 Hive 中繼存放區資料庫，在 Data Catalog 中建立對應的資料庫。

------
#### [ Lake Formation console ]

   1. 在**資料共用**頁面上，選擇**共用資料庫**索引標籤，然後選擇**建立資料庫**。

   1. 針對**連線名稱**，從下拉式功能表中選擇 Hive 中繼存放區連線的名稱。

   1. 輸入資料庫的唯一資料庫名稱和聯合來源識別符。這是您在查詢資料表時在 SQL 陳述式中使用的名稱。名稱最多可包含 255 個字元，而且在您的帳戶中必須是唯一的。

   1. 選擇**建立資料庫**。

------
#### [ AWS CLI ]

   ```
   aws glue create-database \
   '{
    "CatalogId": "<111122223333>",
     "database-input": {
       "Name":"<fed_glue_db>",
       "FederatedDatabase":{
           "Identifier":"<hive_db_on_emr>",
           "ConnectionName":"<hms_connection>"
        }
      }
    }'
   ```

------

1. 

**檢視聯合資料庫中的資料表。**

   建立聯合資料庫之後，您可以使用 Lake Formation 主控台或 檢視 Hive 中繼存放區中的資料表清單 AWS CLI。

------
#### [ Lake Formation console ]

   1. 從**共用資料庫索引標籤中選取資料庫**名稱。

   1. 在**資料庫**頁面上，選擇**檢視資料表**。

------
#### [ AWS CLI ]

   下列範例示範如何擷取連線定義、資料庫名稱，以及資料庫中的部分或全部資料表。將 Data Catalog 的 ID 取代為您用來建立資料庫的有效 AWS 帳戶 ID。將 取代`hms_connection`為連線名稱。

   ```
   aws glue get-connection \
   --name <hms_connection>  \       
   --catalog-id 111122223333
   ```

   ```
   aws glue get-database \
   --name <fed_glu_db> \             
   --catalog-id 111122223333
   ```

   ```
   aws glue get-tables \
   --database-name <fed_glue_db> \
   --catalog-id 111122223333
   ```

   ```
   aws glue get-table \
   --database-name <fed_glue_db> \
   --name <hive_table_name> \
   --catalog-id 111122223333
   ```

------

1. 

**授予許可。**

    建立資料庫之後，您可以將許可授予帳戶中的其他 IAM 使用者和角色，或外部 AWS 帳戶 和組織。您將無法在聯合資料庫上授予寫入資料許可 （插入、刪除） 和中繼資料許可 （變更、捨棄、建立）。如需授予許可的詳細資訊，請參閱 [管理 Lake Formation 許可](managing-permissions.md)。

1. 

**查詢聯合資料庫。**

   授予許可後，使用者可以使用 Athena 和 Amazon Redshift 登入並開始查詢聯合資料庫。使用者現在可以使用本機資料庫名稱來參考 SQL 查詢中的 Hive 資料庫。

   ** Amazon Athena 查詢語法範例**

   `fed_glue_db` 將 取代為您先前建立的本機資料庫名稱。

    `Select * from fed_glue_db.customers limit 10;`

# 其他資源
<a name="additional-resources-hms"></a>

下列部落格文章包含在 Hive 中繼存放區資料庫和資料表上設定 Lake Formation 許可，以及使用 Athena 查詢這些許可的詳細說明。我們也說明跨帳戶共用使用案例，其中生產者帳戶中的 Lake Formation 主體 A 使用 LF 標籤與消費者帳戶 B 共用聯合 Hive 資料庫和資料表。
+ [使用 AWS Lake Formation 許可查詢您的 Apache Hive 中繼存放區](https://aws.amazon.com/blogs/big-data/query-your-apache-hive-metastore-with-aws-lake-formation-permissions/)