

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 联合到外部数据源中 AWS Glue Data Catalog
<a name="federated-catalog-data-connection"></a>

 您可以使用连接将 AWS Glue Data Catalog （数据目录）连接到数据仓库，例如Amazon Redshift、Snowflake、Amazon RDS Amazon DynamoDB、Oracle等云数据库和流媒体服务（例如亚马逊 MSK）以及本地系统（例如Teradata）。 AWS Glue 这些连接存储在中 AWS Glue Data Catalog 并注册到中 AWS Lake Formation，允许您为每个可用数据源创建联合目录。

 *联合目录*是指向外部数据系统中的数据库的顶层容器。借助联合目录，您可以直接从外部数据系统查询数据，而无需完成提取、转换、加载（ETL）流程。

有关 AWS Glue 连接的更多信息，请参阅《 AWS Glue 开发人员指南》中的[连接数据](https://docs.aws.amazon.com/glue/latest/dg/glue-connections.html)。

数据湖管理员可以使用 [Amazon Lakeh SageMaker ou](https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/lakehouse.html) se 创建联合目录，或者。[Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/connect-to-a-data-source.html)

然后，数据湖管理员可以使用 Lake Formation 对目录内的对象授予精细权限，在目录、数据库、表、列、行或单元格等不同级别控制访问权限。数据分析师可以使用 Athena 来发现和查询已编目的数据来源，而 Lake Formation 则实施已定义的访问策略。分析师可以在单个查询中合并多个来源的数据，而无需单独连接到每个来源。

**Topics**
+ [工作流](#connect-data-source-workflow)
+ [将 Data Catalog 连接到外部数据来源的先决条件](connect-data-source-prerequisites.md)
+ [使用 AWS Glue 连接创建联合目录](create-fed-catalog-data-source.md)
+ [查看目录对象](view-fed-glue-connection-catalog.md)
+ [删除联合目录](delete-glue-fed-catalog.md)
+ [查询联合目录](query-glue-fed-catalog.md)
+ [其他资源](additional-resources-fed-connection.md)

## 工作流
<a name="connect-data-source-workflow"></a>

数据湖管理员或具有所需权限的用户完成以下步骤，将 AWS Glue Data Catalog 连接到外部数据源。

1.  创建 AWS Glue 与数据源的连接。注册连接时，用于注册连接的 IAM 角色必须有权访问 Lambda 函数和 Amazon S3 溢出存储桶位置。

1.  向 Lake Formation 注册连接。

1.  使用 AWS Glue 连接在数据目录中创建联合目录以连接到可用数据源。数据库、表和视图会自动在 Data Catalog 中进行编目，并向 Lake Formation 注册。

1.  使用 Lake Formation 权限向数据分析师授予对特定目录、数据库和表的访问权限。可以使用 Lake Formation 在数据湖、仓库和 OLTP 源上定义精细访问控制策略，从而实现行级和列级安全筛选器。

    然后，数据分析师可以使用 Athena 中的 SQL 查询通过 Data Catalog 访问所有数据，无需单独的连接或数据来源凭证。分析师可以运行联合 SQL 查询，扫描来自多个来源的数据，无需复杂的数据管道即可就地联接数据。

# 将 Data Catalog 连接到外部数据来源的先决条件
<a name="connect-data-source-prerequisites"></a>

要将 AWS Glue Data Catalog 连接到外部数据源、向 Lake Formation 注册连接并设置联合目录，您需要完成以下要求：
**注意**  
我们建议 Lake Formation 数据湖管理员创建 AWS Glue 连接以连接到外部数据源，并创建联合目录。

1. 

**创建 IAM 角色。**
   +  创建具有部署创建外部数据源连接所需的资源（Lambda 函数、Amazon S3 泄漏存储桶、IAM 角色和 AWS Glue 连接）的必要权限的角色。
   + 创建一个具有访问 AWS Glue 连接属性（Lambda 函数和 Amazon S3 泄漏存储桶）所需的最低权限的角色。当您向 Lake Formation 注册连接时，将加入这个角色。

     要使用 Lake Formation 管理和保护数据湖中的数据，必须向 Lake Formati AWS Glue on 注册连接。这样，Lake Formation 就可以向 Amazon Athena 提供凭证来查询联合数据来源。

     该角色必须拥有对 Amazon S3 存储桶和 Lambda 函数的 `Select` 或 `Describe` 权限。
     +  s3：ListBucket
     + s3：GetObject
     +  lambda: InvokeFunction 

------
#### [ JSON ]

****  

     ```
     {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
         {
           "Effect": "Allow",
           "Action": [
             "s3:*"
           ],
           "Resource": [
             "arn:aws:s3:::amzn-s3-demo-bucket1/object/*",
             "arn:aws:s3:::amzn-s3-demo-bucket1/object"
           ]
         },
         {
           "Sid": "lambdainvoke",
           "Effect": "Allow",
           "Action": "lambda:InvokeFunction",
           "Resource": "arn:aws:lambda:us-east-1:123456789012:function:example-lambda-function"
         },
         {
           "Sid": "gluepolicy",
           "Effect": "Allow",
           "Action": "glue:*",
           "Resource": "*"
         }
       ]
     }
     ```

------
   + 将以下信任策略添加到在注册连接时使用的 IAM 角色：

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement": [
             {
                 "Effect": "Allow",
                 "Principal": {
                     "Service": [
                         "lakeformation.amazonaws.com"
                   ]
                 },
                 "Action": "sts:AssumeRole"
             }
         ]
     }
     ```

------
   + 注册连接的数据湖管理员必须具有对该角色的 `iam:PassRole` 权限。

     以下是授予此权限的内联策略。*<account-id>*替换为有效的 AWS 账号，然后*<role-name>*替换为角色的名称。

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement": [
             {
                 "Sid": "PassRolePermissions",
                 "Effect": "Allow",
                 "Action": [
                     "iam:PassRole"
                 ],
                 "Resource": [
                     "arn:aws:iam::111122223333:role/example-role-name>"
                 ]
             }
         ]
     }
     ```

------
   +  要在 Data Catalog 中创建联合目录，请检查数据湖设置（`aws lakeformation get-data-lake-settings`），确保您使用的 IAM 角色是 Lake Formation 数据湖管理员。

      如果您不是数据湖管理员，则需要拥有 Lake Formation `CREATE_CATALOG` 权限才能创建目录。以下示例说明如何授予创建目录所需的权限。

     ```
     aws lakeformation grant-permissions \
     --cli-input-json \
             '{
                 "Principal": {
                  "DataLakePrincipalIdentifier":"arn:aws:iam::123456789012:role/non-admin"
                 },
                 "Resource": {
                     "Catalog": {
                     }
                 },
                 "Permissions": [
                     "CREATE_CATALOG",
                     "DESCRIBE"
                 ]
             }'
     ```

1. 如果您使用客户管理的密 AWS KMS 钥对数据源中的数据进行加密，请在密钥中添加以下密钥策略。将账号替换为有效的 AWS 账号，并指定角色名称。默认情况下，数据将使用 KMS 密钥进行加密。Lake Formation 提供了创建自定义 KMS 密钥进行加密的选项。如果您使用客户管理型密钥，您必须向密钥添加特定的密钥策略。

   有关管理客户管理型密钥权限的更多信息，请参阅[客户管理型密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "kms:Encrypt",
                   "kms:Decrypt",
                   "kms:ReEncrypt*",
                   "kms:GenerateDataKey*",
                   "kms:DescribeKey"
               ],
               "Resource": "arn:aws:kms:us-east-1:123456789012:key/key-1"
           }
       ]
   }
   ```

------

# 使用 AWS Glue 连接创建联合目录
<a name="create-fed-catalog-data-source"></a>

 要将 AWS Glue Data Catalog 连接到外部数据源，您需要使用能够与外部数据源进行通信的 AWS Glue 连接。您可以使用 AWS Glue 控制台、[创建 AWS Glue 连接](https://docs.aws.amazon.com/glue/latest/webapi/API_CreateConnection.html) API 和 Amazon SageMaker Lakehouse 控制台创建连接。

有关创建连接的分步说明，请参阅 AWS Glue 开发者指南中的 AWS Glue 连接[数据](https://docs.aws.amazon.com/glue/latest/dg/glue-connections.html)或在 [Amazon SageMaker Lakehouse 中创建连接](https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/lakehouse-create-connection.html)。

当用户对联合表运行查询时，Lake Formation 会出售证书，这些凭据调用 AWS Glue 连接中指定的 AWS Lambda 函数从数据源检索元数据对象。

------
#### [ AWS 管理控制台 ]

**从外部数据来源创建联合目录并设置权限（控制台）**

1. 打开 Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

1. 在导航窗格的 **Data Catalog** 下，选择**目录**。

1. 选择**创建目录**选项。

1. 在**设置目录**详细信息页面上，输入以下信息：  
![\[带有选项的创建目录页面。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/create-glue-connection-catalog.png)
   + **名称**：您的联合目录的唯一名称。名称不能更改，且必须为小写。名称最多可包含 255 个字符，并且在账户内必须是唯一的。
   + **类型**：选择联合目录作为目录类型。
   + **来源**：从下拉列表中选择一个数据来源。将显示您为其创建了连接的数据来源。有关创建外部数据源 AWS Glue 连接的更多信息，请参阅 AWS Glue 开发者指南中的[为连接器创建连接](https://docs.aws.amazon.com/glue/latest/dg/creating-connections.html)或在 [Amazon SageMaker Lakehouse 中创建连接](https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/lakehouse-create-connection.html)。
   + **连接**-选择与数据源的现有 AWS Glue 连接。
   + **描述**：输入从数据来源创建的目录的描述。

1. 选择 **IAM 角色**来让 Lake Formation 代入，以便为查询引擎提供凭证，从而访问数据来源中的数据。此角色必须具有访问 AWS Glue 连接和调用 Lambda 函数访问来自外部数据源的数据所需的权限。

   您也可以在 IAM 控制台中**创建新角色**。

   有关所需权限，请参阅 [将 Data Catalog 连接到外部数据来源的先决条件](connect-data-source-prerequisites.md) 部分。

1.  选择**激活连接器以连接到数据来源**选项，以便使 Athena 可以运行联合查询。

   有关支持的连接器列表，请参阅《Amazon Athena 用户指南》中的[注册连接](https://docs.aws.amazon.com/athena/latest/ug/register-connection-as-gdc.html)。

1. **加密选项**：如果要使用自定义密钥来加密目录，请选择**自定义加密设置**选项。要使用自定义密钥，必须向 KMS 密钥添加额外的自定义托管式密钥策略。

1. 选择**下一步**向其他主体授予权限。

1. 在**授予权限**页面上，请选择**添加权限**。

1.  在**添加权限**屏幕上，选择主体和要授予的权限类型。  
![\[包含主体类型和授予选项的目录权限页面。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/catalog-permissions.png)
   +  在**主体**部分中，选择主体类型，然后指定要授予权限的主体。
     + **IAM 用户和角色**：从 IAM 用户和角色列表中选择一个或多个用户或角色。
     + **SAML 用户和群组** — 对于 SAML 以及 Amazon Quick 用户和群组，请为通过 SAML 联合的用户或群组或 Amazon Quick 用户或群组输入一个或多个 ARNs Amazon 资源名称 (ARNs)。在每个 ARN 后按 **Enter**。
   +  在**权限**部分中，选择权限和可授予的权限。

     在**目录权限**下，选择要授予的一项或多项权限。

     选择**超级用户**以授予对目录中所有资源的不受限管理权限。

      在 “**可授予权限**” 下，选择授予接受者可以向其 AWS 账户中的其他委托人授予的权限。当您从外部账户向 IAM 委托人授予权限时，不支持此选项。

1. 选择**下一步**检查信息并创建目录。**目录**列表会显示新的联合目录。

   **数据位置**列表会显示新注册的联合连接。  
![\[数据位置与联合连接一起列出。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/federated_data_lake_location.png)

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

**从外部数据来源创建联合目录并设置权限**

1.  以下示例显示了如何创建 AWS Glue 连接。

   ```
   aws glue create-connection 
     --connection-input \
         '{
            "Name": "DynamoDB connection",
            "ConnectionType": "DYNAMODB",
            "Description": "A connection created for DynamoDB",
            "ConnectionProperties": {},
            "AthenaProperties": "spill_prefix": "your_spill_prefix",
            "lambda_function_arn": "Lambda_function_arn",
            "spill_bucket": "Your_Bucket_name",
            "AuthenticationConfiguration": {}
         }'
   ```

1.  以下示例显示了如何向 Lake For AWS Glue mation 注册连接。

   ```
   aws lakeformation register-resource 
     --cli-input-json \
       {"ResourceArn":"arn:aws:glue:us-east-1:123456789012:connection/dynamo","RoleArn":"arn:aws:iam::123456789012:role/AdminTelemetry","WithFederation":true}
   ```

1.  以下示例演示了如何创建联合目录。

   ```
   aws glue create-catalog 
    --cli-input-json \
         '{
          "Name":"ddbcatalog",
          "CatalogInput":{"CatalogProperties":{"DataLakeAccessProperties":{"DataTransferRole":"arn:aws:iam::123456789012:role/role name"}},
          "CreateDatabaseDefaultPermissions":[],
          "CreateTableDefaultPermissions":[],
          "FederatedCatalog":{"ConnectionName":"dynamo","Identifier":"dynamo"}
            }
          }'
   ```

------

# 查看目录对象
<a name="view-fed-glue-connection-catalog"></a>

对于每个可用的数据源，在中 AWS Glue 创建相应的目录 AWS Glue Data Catalog。创建目录后，您可以使用 Lake Formation 控制台或 AWS CLI查看目录中的数据库和表。对于   

1. 打开 Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

1. 选择 Data Catalog 下的**目录**。目录页面显示您有权访问的目录。  
![\[查看目录。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/view-catalogs.png)

1. 从列表中选择一个目录以查看该目录中包含的数据库和表。该列表包含您账户中的数据库和资源链接，这些链接是指向外部账户中共享数据库和表的链接，用于跨账户访问数据湖中的数据。  
![\[查看目录/数据库。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/catalog-database-view.png)

1. 选择**查看**下的**表**选项以查看和管理数据库中的表。

****AWS CLI 查看目录和数据库的示例****  
以下示例说明如何使用查看目录 AWS CLI 

```
aws glue get-catalog \
--catalog-id 123456789012:dynamodbcatalog
```

以下示例说明如何请求账户中的所有目录。

```
aws glue get-catalogs \
 --recursive
```

以下示例请求说明如何获取目录中的数据库。

```
aws glue get-database \
--catalog-id 123456789012:dynamodbcatalog
--database-name database name
```

# 删除联合目录
<a name="delete-glue-fed-catalog"></a>

 您可以使用`glue:DeleteCatalog`操作或 AWS Lake Formation 控制台删除您在中 AWS Glue Data Catalog 创建的联合目录。

**删除联合目录（控制台）**

1. 打开 Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

1. 在导航窗格的 **Data Catalog** 下，选择**目录**。

1. 选择要从目录列表中删除的目录。

1. 从**操作**中选择**删除**。

1. 选择**放弃**进行确认，联合目录将从 Data Catalog 中删除。  
![\[删除目录确认。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/delete-fed-catalog.png)

**删除联合目录（CLI）**
+ 

  ```
  aws glue delete-catalog 
    --catalog-id 123456789012:catalog name
  ```

# 查询联合目录
<a name="query-glue-fed-catalog"></a>

在您向其他主体授予权限后，他们可以登录并开始使用 Athena 查询联合目录中的表。

要在联合数据库中创建和删除表，主体必须拥有 Lake Formation `Create table`、`Drop` 权限。

 有关授予 Data Catalog 权限的更多信息，请参阅[授予对数据目录资源的权限](granting-catalog-permissions.md)。

有关从中查询数据目录的更多信息 Amazon Athena，请参阅 Amazon Athena [用户指南 Amazon Athena中的 AWS Glue Data Catalog 从](https://docs.aws.amazon.com/athena/latest/ug/gdc-register.html)中查询。

# 其他资源
<a name="additional-resources-fed-connection"></a>

 在这篇博客文章中，我们将展示数据分析师现在如何通过单一的统一体验安全地访问和查询存储在 S3 数据湖之外的数据，包括 Amazon Redshift 数据仓库和 Amazon DynamoDB 数据库。管理员现在可以在不同的粒度级别上应用访问控制，在扩大数据访问范围的同时，确保敏感数据仍然受到保护。这使得组织能够加快数据计划的推进速度，同时保持安全性和合规性，从而更快地作出以数据为导向的决策。
+ [使用亚马逊 Lakehouse 对亚马逊 Athena 联合查询进行分类和管理 SageMaker ](https://aws.amazon.com/blogs/big-data/catalog-and-govern-amazon-athena-federated-queries-with-amazon-sagemaker-lakehouse/)