

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

# 将您的数据带入 AWS Glue Data Catalog
<a name="bring-your-data-overview"></a>

您可以在 AWS Glue Data Catalog （数据目录）中创建联合目录，并统一 Amazon S3 数据湖和 Amazon Redshift 数据仓库中的数据。您还可以整合来自操作数据库（例如）和第三方数据源（例如 PostgreSQL Amazon DynamoDB、Google BigQuery、MySQL 等）的数据。Data Catalog 提供了一个集中式元数据存储库，使管理和发现不同系统中的数据变得更加容易。

Data Catalog 通过联合连接器与 30 多个外部数据来源集成。通过这种集成，您可以查询来自这些外部来源的数据，而不必 AWS 先构建数据管道来提取数据。

对外部数据进行编目后，您可以使用 AWS Lake Formation 集中管理数据目录中的数据访问权限。数据湖管理员可以使用基于标签的访问控制（LF 标签）和命名资源方法，向同一账户内或跨账户的其他 IAM 主体（用户或角色）授予精细访问权限。

通过使用 LF-Tags，数据管理员可以根据域和敏感度级别等属性对资源进行逻辑组织，从而简化权限管理，同时确保分析和机器学习服务（包括 Athena、Amazon EMR 或 Redshift Spectrum）的一致访问控制。 AWS Glue 

Data Catalog 提供了以下方法来管理数据以及外部数据集和外部元存储的权限：
+ **将 Amazon S3 表存储桶与数据目录集成** — 您可以从 Lake Formation 控制台或使用 AWS Glue API 操作将 Amazon S3 表作为数据目录对象发布和编目，并将该目录注册为 Lake Formation 数据位置。
+ **将 Amazon Redshift 数据仓库中的数据引入 AWS Glue Data Catalog** — [向数据目录注册现有的 Amazon](https://docs.aws.amazon.com/redshift/index.html) Redshift 命名空间或集群，然后在数据目录中创建多级联合目录。

  您可以使用任何与 Apache Iceberg REST 目录 OpenAPI 规格兼容的查询引擎（例如，Amazon EMR Serverless 和 Amazon Athena）访问您的数据。
+ **将远程Iceberg REST目录联合到数据目录 — 将远程目录**联合到数据Iceberg REST目录，并使用分析引擎安全地访问存储在 Amazon S3 Iceberg 中的远程表。 AWS 
+ **从外部数据源联合到数据目录 — 使用 AWS Glue 连接将数据**目录连接到外部数据源，并创建联合目录以使用 Lake Formation 集中管理数据集的访问权限。无需将元数据迁移到 Data Catalog。
+ **创建目录来管理 Data Catalog 中的 Amazon Redshift 表**：您现在可能没有可用的 Amazon Redshift 创建器集群或 Amazon Redshift 数据共享，但想使用 Data Catalog 来创建和管理 Amazon Redshift 表。首先，您可以使用 `glue:CreateCatalog` API 操作创建 AWS Glue 托管目录，也可以将目录类型设置为 `Managed` 并将 `Catalog source` 设置为 **Redshift**，然后通过 AWS Lake Formation 控制台来创建托管目录。
+ **使用 Data Catalog 发布 Amazon Redshift 数据共享**：将 [Amazon Redshift](https://docs.aws.amazon.com/redshift/index.html) 数据共享发布到 Data Catalog，使用 Lake Formation 集中管理数据共享的数据访问并限制用户访问。

  您可以使用 Amazon Redshift Spectrum 查询数据。
+  **将 Data Catalog 连接到外部 Hive 元存储**：使用 Lake Formation 将 Data Catalog 连接到外部元存储以管理 Amazon S3 中数据集的访问权限。无需将元数据迁移到 Data Catalog。
+ **将 Lake Form AWS ation 与 Data Exchang** e 集成 — Lake Formation 支持通过许可访问您的数据 AWS Data Exchange。如果您想对 Lake Formation 数据授予许可，请参阅《AWS Data Exchange 用户指南》**中的[什么是 AWS Data Exchange？](https://docs.aws.amazon.com/data-exchange/latest/userguide/what-is.html)。

**Topics**
+ [与远程 Iceberg 目录的目录联合](catalog-federation.md)
+ [将亚马逊 Redshift 数据引入 AWS Glue Data Catalog](managing-namespaces-datacatalog.md)
+ [联合到外部数据源中 AWS Glue Data Catalog](federated-catalog-data-connection.md)
+ [Amazon S3 表格与 AWS Glue Data Catalog 和的集成 AWS Lake Formation](create-s3-tables-catalog.md)
+ [更改 S3 表格集成的访问控制](manage-s3tables-catalog-integration.md)
+ [在中创建亚马逊 Redshift 托管目录 AWS Glue Data Catalog](create-rms-catalog.md)
+ [管理对 Amazon Redshift 数据共享中数据的权限](data-sharing-redshift.md)
+ [管理对使用外部元存储的数据集的权限](data-sharing-hms.md)

# 与远程 Iceberg 目录的目录联合
<a name="catalog-federation"></a>

中的目录联合允许使用 AWS Glue AWS 分析引擎直接安全地访问存储在 Amazon S3 中并在远程目录中编目的 Iceberg 表。当您访问远程表时，目录联合会同步数据目录和远程目录之间的元数据。它由各种各样的分析引擎提供支持，包括亚马逊 Redshift、亚马逊 EMR、亚马逊 Athena、Apache Spark 等第三方引擎 AWS Glue等。

目录联合用于与远程目录系统通信 AWS Glue Data Catalog 以发现表，Lake Formation 用于授权访问 Amazon S3 中的表数据。当您查询联合表时，数据目录会在查询时发现远程目录中的最新表信息，获取该表的 Amazon S3 位置、当前架构和分区信息。然后，您的分析引擎（亚马逊 Athena、Amazon Redshift、Amazon EMR）使用这些信息直接从亚马逊 S3 访问 Iceberg 数据文件。Lake Formation 通过出售存储在 Amazon S3 中的表数据的限定范围的凭证来管理对表的访问，从而允许引擎对联合表应用细粒度的权限。

## 目录联合的特点
<a name="catalog-federation-features"></a>

**使用 Lake Formation 进行管理**  
数据目录中的联合冰山目录是 Lake Formation 注册的资源，允许您使用 Lake Formation 授权向联合冰山目录中的冰山表授予细粒度的行、列、单元级权限。Federated Iceberg 目录和关联对象可以安全地跨 AWS 账户共享。Federated Iceberg 目录还可以与基于 Lake Formation 标签的访问控制配合使用，允许您使用标签扩展治理。

**网络配置**  
目录联合支持使用标准 HTTPS 连接直接连接到远程目录源。当您想要保持网络隔离时，它还支持通过 Amazon VPC 进行连接；当您希望通过组织防火墙进行安全通信时，它还支持使用代理支持进行连接。

**Topics**
+ [目录联合的特点](#catalog-federation-features)
+ [Federate to Snowflake Iceberg 目录](catalog-federation-snowflake.md)
+ [联合到 Databricks Unity Catalog](catalog-federation-databricks.md)

# Federate to Snowflake Iceberg 目录
<a name="catalog-federation-snowflake"></a>

AWS Glue Data Catalog 联合Snowflake使用Snowflake服务主 OAuth2 体的凭证。您可以使用此联合来连接Snowflake Horizon和Snowflake Polaris目录。这种身份验证机制允许 Data Catalog 根据与服务主体关联的权限访问目录中各种对象（例如目录、数据库和表）的元数据。为确保访问正确的对象，必须向服务主体授予读取这些对象元数据的必要权限。Snowflake

## 先决条件
<a name="catalog-federation-snowflake-prerequisites"></a>

在数据目录中创建受 Lake Formation 管理的联合目录之前，请确保您拥有以下权限：

您的 IAM 委托人（用户或角色）必须具有以下权限：
+ **Lake Formation 权限** —`lakeformation:RegisterResource`，`lakeformation:DescribeResource`
+ **AWS Glue 权限** — `glue:CreateConnection`、`glue:CreateCatalog`、`glue:GetConnection`、`glue:PassConnection`
+ S@@ **ecrets Manager 权限** —`secretsmanager:CreateSecret`，`secretsmanager:GetSecretValue`
+ **IAM 权限** — `iam:CreateRole`、`iam:AttachRolePolicy`、`iam:PassRole`

您必须是 Lake Formation 数据湖管理员或拥有数据目录的`CREATE_CATALOG`权限

## 创建联合目录
<a name="catalog-federation-snowflake-create"></a>

### 使用控制台
<a name="catalog-federation-snowflake-console"></a>

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

1. 在右上角的页面部分中选择首选 AWS 区域。

1. 在左侧导航窗格中，选择目录。

1. 选择 “**创建目录”** 以打开 “**创建目录” 工作流程**。

1. 在 **“选择数据源**” 步骤中，Snowflake从可用选项中进行选择。

1. 在 **“设置目录详细信息”** 步骤中，您提供了三个信息：目录详细信息、连接详细信息和注册详细信息。

1. 在**目录详细信息**容器中，为您的 AWS Glue 联合目录提供一个唯一的名称，然后输入现有Snowflake目录的名称。

1. 在**连接详细信息**容器中，您可以从您有权访问的现有连接中进行选择，也可以提供配置来创建新的连接器。

1. 新的连接配置包括：
   + 连接名称- AWS Glue 连接对象的唯一名称。
   + 实例 URL-您现有Snowflake账户的终端节点 URL。
   + 身份验证-指定 AWS Glue 用于连接到远程目录服务器的身份验证配置。 AWS Glue 同时支持 OAuth2 和自定义身份验证。
   + 令牌 URL-指定远程目录的身份提供商的 URL。
   + OAuth2 客户端 ID-指定与您的远程目录关联的 OAuth2 凭据的客户端 ID。
   + 密钥-使用 AWS Secrets Manager 或在文本框中输入密码值来存储和使用 OAuth2 客户端密钥。当您在控制台中手动输入密钥时， AWS Glue 会代表您创建密钥。
   + 令牌 URL 范围-指定身份验证的 OAuth 范围。
   + 目录大小写筛选器-选择是将小写还是大写对象从远程目录带到数据目录。

1. 创建一个 IAM 角色，该角色 AWS Glue 和 Lake Formation 服务委托人可以使用该角色分别访问远程 Iceberg 表 AWS Secrets Manager 和 Amazon S3 位置的密钥。在注册下拉列表中选择 IAM 角色。有关 IAM 策略的详细信息，请参阅以下 CLI 部分中的步骤 2 和步骤 3。

1. 选择 “测试连接” 以测试您的连接属性和 IAM 角色访问权限配置是否正确。

1. 选择 “**下一步**” 以查看您的设置。

1. 在查看页面中选择 “**创建目录**”。

### 使用 CLI
<a name="snowflake-federation-cli"></a>

1. <a name="snowflake-step-1"></a>**创建密 AWS Secrets Manager 钥**

   该 AWS Glue 连接器支持两种身份验证类型-**OAuth2**和**自定义**。使用 opti OAuth2 on 时，使用 AWS Secrets Manager 来存储Snowflake服务主体的客户端密钥。稍后您将在创建 AWS Glue 连接时使用此密钥。对于自定义身份验证， AWS Secrets Manager 请使用存储和检索访问令牌。

   在以下示例中`your-snowflake-secret`，用您自己的信息替换`client_secret`、、`region`。

   ```
   aws secretsmanager create-secret \
   --name your-snowflake-secret \
   --description "Snowflake secret" \
   --secret-string '{
   "USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET": "client_secret"
   }' \
   --region region
   ```
**注意**  
`USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET`是一个保留关键字， AWS Glue 用于引用密钥中的客户机密值。在 Lake Formation 控制台中创建密钥时，也要使用相同的关键字。

1. <a name="snowflake-step-2"></a>**创建一个 IAM 角色以向 AWS Glue 连接对象提供对上一步中创建的密钥的访问权限**

   使用 AWS Glue AWS Secrets Manager 连接对象存储、检索和刷新 AWS Secrets Manager 密钥令牌时，需要访问 OAuth 密钥。当您使用 Amazon VPC 终端节点限制与Snowflake账户的 AWS Glue 连接时，连接对象还需要访问权限才能创建、描述和使用 Amazon VPC 网络接口。

   创建 IAM 策略并将其附加到 IAM 角色。将 AWS Glue 服务主体添加到信任策略中。

   在以下示例中`your-secrets-manager-ARN`，用您自己的信息替换`your-vpc-id`、和`your-subnet-id1`。  
**Example IAM 策略**  

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [{
               "Effect": "Allow",
               "Action": [
                   "secretsmanager:GetSecretValue",
                   "secretsmanager:DescribeSecret",
                   "secretsmanager:PutSecretValue"
               ],
               "Resource": [
                   "your-secrets-manager-ARN"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "ec2:CreateNetworkInterface",
                   "ec2:DeleteNetworkInterface",
                   "ec2:DescribeNetworkInterfaces"
               ],
               "Resource": "*",
               "Condition": {
                   "ArnEquals": {
                       "ec2:Vpc": "arn:aws:ec2:region:account-id:vpc/your-vpc-id",
                       "ec2:Subnet": ["arn:aws:ec2:region:account-id:subnet/your-subnet-id1"]
                   }
               }
           }
       ]
   }
   ```  
**Example 信任策略**  

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

1. <a name="snowflake-step-3"></a>**创建一个 IAM 策略，授予 Lake Formation 对目录的 Amazon S3 位置的读取权限**

   作为数据目录中联合目录的目录所有者，您可以使用 Lake Formation 向数据团队授予粗粒度表访问权限、列级、行级和单元级细粒度访问权限以及基于标签的访问权限。Lake Formation 使用 IAM 角色允许其访问远程 Iceberg 表的底层 Amazon S3 位置。此访问权限允许 Lake Formation 向查询远程表的分析引擎提供限定范围的访问凭证。

   创建 IAM 策略并附加到 IAM 角色。将 Lake Formation 服务主体添加到角色信任策略中。

   在以下示例中，将 `amzn-s3-demo-bucketN` 和 `your-kms-key` 替换为您自己的信息。  
**Example IAM 策略**  

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [{
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject"
               ],
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket1/*",
                   "arn:aws:s3:::amzn-s3-demo-bucket2/*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket"
               ],
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket1",
                   "arn:aws:s3:::amzn-s3-demo-bucket2"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "kms:Decrypt",
                   "kms:Encrypt"
               ],
               "Resource": [
                   "your-kms-key"
               ]
           }
       ]
   }
   ```  
**Example 信任策略**  

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [{
           "Sid": "",
           "Effect": "Allow",
           "Principal": {
               "Service": "lakeformation.amazonaws.com"
           },
           "Action": "sts:AssumeRole"
       }]
   }
   ```
**注意**  
当您使用 Lake Formation 控制台创建联合目录时，控制台使用一个 IAM 角色并附加两个策略来完成设置。

1. <a name="snowflake-step-4"></a>**创建 AWS Glue 连接对象**

   AWS Glue 连接器支持 OAuth2 和自定义身份验证方法。数据目录连接对象支持允许您将远程目录中的小写或大写对象带到数据目录的`CATALOG_CASING_FILTER`配置。

   以下示例使用 OAuth2 身份验证配置来创建 AWS Glue 连接。将 `highlighted sections` 替换为您的信息。

   ```
   aws glue create-connection \
       --connection-input '{
   "Name": "your-glue-connection-to-snowflake-account",
   "ConnectionType": "SNOWFLAKEICEBERGRESTCATALOG",
   "ConnectionProperties": {
       "INSTANCE_URL": "your-snowflake-account-URL",
       "ROLE_ARN": "your-IAM-role-for-secrets-and-VPC-access",
       "CATALOG_CASING_FILTER": "LOWERCASE_ONLY"
   },
   "AuthenticationConfiguration": {
       "AuthenticationType": "OAUTH2",
       "OAuth2Properties": {
           "OAuth2GrantType": "CLIENT_CREDENTIALS",
           "TokenUrl": "your-internal-or-external-token-server-url",
           "OAuth2ClientApplication": {
               "UserManagedClientApplicationClientId": "our-client-id"
           },
           "TokenUrlParametersMap": {
               "scope": "all-apis"
           }
       },
       "SecretArn": "arn:aws:secretsmanager:your-aws-region:your-aws-account-id:secret:snowflake-secret"
   }
   }'
   ```

1. <a name="snowflake-step-5"></a>**将 AWS Glue 连接注册为 Lake Formation 资源**

   使用 AWS Glue 连接对象（在步骤 4 中创建）和 IAM 角色（在步骤 3 中创建），您现在可以将 AWS Glue 连接对象注册为 Lake Formation 托管资源。

   将 `your-glue-connector-arn` 和 `your-IAM-role-ARN-having-LF-access` 替换为您的信息。

   ```
   aws lakeformation register-resource \
       --resource-arn your-glue-connector-arn \
       --role-arn your-IAM-role-ARN-having-LF-access \
       --with-federation \
       --with-privileged-access
   ```

1. <a name="snowflake-step-6"></a>**在数据目录中创建联合目录**

   创建 AWS Glue 连接对象并将其注册到 Lake Formation 后，您可以在数据目录中创建联合目录：

   在为联合目录提供一个唯一的名称`your-federated-catalog-name`，在中引用目录`catalog-name-in-Snowflake`，然后输入之前Snowflake在中创建的连接名称`your-glue-connection-name`。

   ```
   aws glue create-catalog \
       --name your-federated-catalog-name \
       --catalog-input '{
       "FederatedCatalog": {
           "Identifier": catalog-name-in-Snowflake",
           "ConnectionName": your-glue-connection-name"
       },
       "CreateTableDefaultPermissions": [],
       "CreateDatabaseDefaultPermissions": []
   }'
   ```

## 与集成时的注意事项 Snowflake
<a name="snowflake-considerations"></a>
+ 当您将资源（如数据库和表）放入时Snowflake，Lake Formation 不会自动撤消授予该联合资源的权限。要移除访问权限，您需要使用 Lake Formation 显式撤消先前授予的对联合资源的权限。
+ 使用`CATALOG_CASING_FILTER='UPPERCASE_ONLY'`配置装载远程目录时，具有大写标识符的数据库和表会联合，但具有小写标识符的对象不是。
+ 您可以重复使用相同的 AWS Glue 连接来创建多个联合目录。删除目录不会删除关联的连接。要删除连接，请使用 AWS CLI `aws glue delete-connection` 命令并确保先删除所有关联的目录。
+ 不支持Polaris目录中的嵌套命名空间。也就是说，目录联合可以访问遵循 3 部分表示法`catalog.database.table`的远程Iceberg表。

# 联合到 Databricks Unity Catalog
<a name="catalog-federation-databricks"></a>

AWS Glue Data Catalog 联合Databricks使用Databricks服务主 OAuth2 体的凭证。这种身份验证机制 AWS Glue Data Catalog 允许根据与服务主体关联的权限访问中各种对象（例如目录Databricks Unity Catalog、数据库和表）的元数据。为确保访问正确的对象，必须向服务主体授予读Databricks取这些对象元数据的必要权限。

接下来，目录联合允许发现和查询 Databricks Unity 目录中的Iceberg表。要读取增量表，请使用确保这些表的Iceberg元数据可用Uniform。按照Databricks教程和文档在Databricks工作区中创建服务主体和相关权限。

## 先决条件
<a name="catalog-federation-databricks-prerequisites"></a>

在数据目录中创建受 Lake Formation 管理的联合目录之前，请确保您拥有以下权限：

您的 IAM 委托人（用户或角色）必须具有以下权限：
+ **Lake Formation 权限** —`lakeformation:RegisterResource`，`lakeformation:DescribeResource`
+ **AWS Glue 权限** — `glue:CreateConnection`、`glue:CreateCatalog`、`glue:GetConnection`、`glue:PassConnection`
+ S@@ **ecrets Manager 权限** —`secretsmanager:CreateSecret`，`secretsmanager:GetSecretValue`
+ **IAM 权限** — `iam:CreateRole`、`iam:AttachRolePolicy`、`iam:PassRole`

您必须是 Lake Formation 数据湖管理员或拥有数据目录的`CREATE_CATALOG`权限

## 创建联合目录
<a name="catalog-federation-databricks-create"></a>

### 使用控制台
<a name="catalog-federation-databricks-console"></a>

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

1. 在右上角的页面部分中选择首选 AWS 区域。

1. 在左侧导航窗格中，选择目录。

1. 选择**创建目录**以打开**创建目录工作流程**。

1. 在**选择数据源**步骤中，Databricks从可用选项中进行选择。

1. 在 **“设置目录详细信息”** 步骤中，您提供了三个信息：目录详细信息、连接详细信息和注册详细信息。

1. 在**目录详细信息**容器中，为您的 AWS Glue 联合目录提供一个唯一的名称，然后输入现有Databricks目录的名称。

1. 在**连接详细信息**容器中，您可以从您有权访问的现有连接中进行选择，也可以提供配置来创建新的连接器。

1. 新的连接配置包括：
   + 连接名称- AWS Glue 连接对象的唯一名称。
   + 工作空间 URL-现有Databricks工作空间的终端节点 URL。
   + 身份验证-指定 AWS Glue 用于连接到远程目录服务器的身份验证配置。 AWS Glue 同时支持 OAuth2 和自定义身份验证。
   + 令牌 URL-指定远程目录的身份提供商的 URL。
   + OAuth2 客户端 ID-指定与您的远程目录关联的 OAuth2 凭据的客户端 ID。
   + 密钥-使用 AWS Secrets Manager 或在文本框中输入密码值来存储和使用 OAuth2 客户端密钥。当您在控制台中手动输入密钥时， AWS Glue 会代表您创建密钥。
   + 令牌 URL 范围-指定身份验证的 OAuth 范围。

1. 创建一个 IAM 角色，该角色 AWS Glue 和 Lake Formation 服务委托人可以使用该角色分别访问远程Iceberg表和 Amazon S3 位置中的密钥。在注册下拉列表中选择 IAM 角色。有关 IAM 策略的详细信息，请参阅以下 CLI 部分中的步骤 2 和步骤 3。

1. 选择 “测试连接” 以测试您的连接属性和 IAM 角色访问权限配置是否正确。Databricks使用 Amazon VPC 进行连接时，测试连接功能不可用。

1. 选择 “**下一步**” 以查看您的设置。

1. 在查看页面中选择**创建目录**。

### 使用 CLI
<a name="catalog-federation-databricks-cli"></a>

1. <a name="databricks-step-1"></a>**创建密 AWS Secrets Manager 钥**

   该 AWS Glue 连接器支持两种身份验证类型-**OAuth2**和**自定义**。使用 opti OAuth2 on 时，使用 AWS Secrets Manager 来存储Databricks服务主体的客户端密钥。稍后您将在创建 AWS Glue 连接时使用此密钥。对于自定义身份验证， AWS Secrets Manager 请使用存储和检索访问令牌。

   在以下示例中`<databricks-secret>`，用您自己的信息替换`<client_secret>`、、`<region>`。

   ```
   aws secretsmanager create-secret \
   --name <databricks-secret> \
   --description "Databricks secret" \
   --secret-string '{
   "USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET": "<client_secret>"
   }' \
   --region <region>
   ```
**注意**  
`USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET`是一个保留关键字， AWS Glue 用于引用密钥中的客户机密值。在 Lake Formation 控制台中创建密钥时，也要使用相同的关键字。

1. <a name="databricks-step-2"></a>**创建一个 IAM 角色以向 AWS Glue 连接对象提供对上一步中创建的密钥的访问权限**

   使用 AWS Glue AWS Secrets Manager 连接对象存储、检索和刷新 AWS Secrets Manager 密钥令牌时，需要访问 OAuth 密钥。当您使用 Amazon VPC 终端节点限制与Databricks工作空间的 AWS Glue 连接时，连接对象还需要访问权限才能创建、描述和使用 Amazon VPC 网络接口。

   创建 IAM 策略并将其附加到 IAM 角色。将 AWS Glue 服务主体添加到信任策略中。

   在以下示例中`<your-secrets-manager-ARN>`，用您自己的信息替换`<your-vpc-id>`、和`<your-subnet-id1>`。  
**Example IAM 策略**  

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [{
               "Effect": "Allow",
               "Action": [
                   "secretsmanager:GetSecretValue",
                   "secretsmanager:DescribeSecret",
                   "secretsmanager:PutSecretValue"
               ],
               "Resource": [
                   "<your-secrets-manager-ARN>"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "ec2:CreateNetworkInterface",
                   "ec2:DeleteNetworkInterface",
                   "ec2:DescribeNetworkInterfaces"
               ],
               "Resource": "*",
               "Condition": {
                   "ArnEquals": {
                       "ec2:Vpc": "arn:aws:ec2:region:account-id:vpc/<your-vpc-id>",
                       "ec2:Subnet": ["arn:aws:ec2:region:account-id:subnet/<your-subnet-id1>"]
                   }
               }
           }
       ]
   }
   ```  
**Example 信任策略**  

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

1. <a name="databricks-step-3"></a>**创建一个 IAM 策略，授予 Lake Formation 对目录的 Amazon S3 位置的读取权限**

   作为数据目录中联合目录的目录所有者，您可以使用 Lake Formation 向数据团队授予粗粒度表访问权限、列级、行级和单元级细粒度访问权限以及基于标签的访问权限。Lake Formation 使用 IAM 角色允许其访问远程 Iceberg 表的底层 Amazon S3 位置。此访问权限允许 Lake Formation 向查询远程表的分析引擎提供限定范围的访问凭证。

   创建 IAM 策略并附加到 IAM 角色。将 Lake Formation 服务委托人添加到 IAM 角色信任策略中。

   在以下示例中，将 `<your-s3-bucket-N>` 和 `<your-kms-key>` 替换为您自己的信息。  
**Example IAM 策略**  

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [{
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject"
               ],
               "Resource": [
                   "arn:aws:s3:::<your-s3-bucket-1>/*",
                   "arn:aws:s3:::<your-s3-bucket-2>/*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket"
               ],
               "Resource": [
                   "arn:aws:s3:::<your-s3-bucket-1>",
                   "arn:aws:s3:::<your-s3-bucket-2>"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "kms:Decrypt",
                   "kms:Encrypt"
               ],
               "Resource": [
                   "<your-kms-key>"
               ]
           }
       ]
   }
   ```  
**Example 信任策略**  

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [{
           "Sid": "",
           "Effect": "Allow",
           "Principal": {
               "Service": "lakeformation.amazonaws.com"
           },
           "Action": "sts:AssumeRole"
       }]
   }
   ```
**注意**  
当您使用 Lake Formation 控制台创建联合目录时，控制台使用一个 IAM 角色并附加两个策略来完成设置。

1. <a name="databricks-step-4"></a>**创建 AWS Glue 连接对象**

   数据目录支持连接类型`DATABRICKSICEBERGRESTCATALOG`：用于将数据目录连接到。Databricks此 AWS Glue 连接器支持 OAuth2 和自定义身份验证方法。

   以下示例使用 OAuth2 身份验证配置来创建 AWS Glue 连接。将 `highlighed sections` 替换为您的信息。

   ```
   aws glue create-connection \
       --connection-input '{
   "Name": "<your-glue-connection-to-databricks-unity-account>",
   "ConnectionType": "DATABRICKSICEBERGRESTCATALOG",
   "ConnectionProperties": {
       "INSTANCE_URL": "<your-databricks-workspace-catalog-URL>",
       "ROLE_ARN": "<your-IAM-role-for-secrets-and-VPC-access>"
   },
   "AuthenticationConfiguration": {
       "AuthenticationType": "OAUTH2",
       "OAuth2Properties": {
           "OAuth2GrantType": "CLIENT_CREDENTIALS",
           "TokenUrl": "<your-internal-or-external-token-server-url>",
           "OAuth2ClientApplication": {
               "UserManagedClientApplicationClientId": "<your-client-id>"
           },
           "TokenUrlParametersMap": {
               "scope": "all-apis"
           }
       },
       "SecretArn": "arn:aws:secretsmanager:<aws-region>:<your-aws-account-id>:secret:<databricks-secret>"
   }
   }'
   ```

1. <a name="databricks-step-5"></a>**将 AWS Glue 连接注册为 Lake Formation 资源**

   使用 AWS Glue 连接对象（在步骤 4 中创建）和 IAM 角色（在步骤 3 中创建），您现在可以将 AWS Glue 连接对象注册为 Lake Formation 托管资源。

   将 `<your-glue-connector-arn>` 和 `<your-IAM-role-ARN-having-LF-access>` 替换为您的信息。

   ```
   aws lakeformation register-resource \
       --resource-arn <your-glue-connector-arn> \
       --role-arn <your-IAM-role-ARN-having-LF-access> \
       --with-federation \
       --with-privileged-access
   ```

1. <a name="databricks-step-6"></a>**在数据目录中创建联合目录**

   创建 AWS Glue 连接对象并将其注册到 Lake Formation 后，您可以在数据目录中创建联合目录：

   在为联合目录提供一个唯一的名称`<your-federated-catalog-name>`，在中引用目录`"<catalog-name-in-Databricks>`，然后输入之前Databricks在中创建的连接名称`"<your-glue-connection-name>`。

   ```
   aws glue create-catalog \
       --name <your-federated-catalog-name> \
       --catalog-input '{
       "FederatedCatalog": {
           "Identifier": "<catalog-name-in-Databricks>",
           "ConnectionName": "<your-glue-connection-name>"
       },
       "CreateTableDefaultPermissions": [],
       "CreateDatabaseDefaultPermissions": []
   }'
   ```

## 与集成时的注意事项 Databricks
<a name="databricks-considerations"></a>
+ 当您在中删除资源（如数据库和表）时Databricks，Lake Formation 不会自动撤消授予该联合资源的权限。要移除访问权限，您需要使用 Lake Formation 显式撤消先前授予的对联合资源的权限。
+ 您可以使用此集成查询存储在 Amazon S3 中的 Iceberg 表。使用任何其他表格式或对象存储时，您可以将远程目录中的元数据与其数据库和表联合起来并列出这些数据库 AWS Glue 和表，但是查询操作在查询期间`SELECT ColumnFoo from TableBar`会失败，并显示错误 “读取表失败”。Apache Iceberg不支持对象存储位置。'
+ 您可以重复使用相同的 AWS Glue 连接来创建多个联合目录。删除目录不会删除关联的连接对象。要删除连接对象，请使用 AWS CLI `aws glue delete-connection` 命令并确保先删除所有关联的目录。

# 将亚马逊 Redshift 数据引入 AWS Glue Data Catalog
<a name="managing-namespaces-datacatalog"></a>

您可以在（数据目录）中管理 Amazon Redshift 数据仓库中的 AWS Glue Data Catalog 分析数据，并统一亚马逊 S3 数据湖和亚马逊 Redshift 数据仓库。Amazon Redshift 是一项完全托管的 PB 级云端数据仓库服务。 AWS Amazon Redshift 数据仓库是一个由称作*节点*的各种计算资源构成的集合，这些节点已整理到名为*集群*的组中。每个集群运行一个 Amazon Redshift 引擎并包含一个或多个数据库。

在 Amazon Redshift 中，您可以创建 Amazon Redshift 预置集群和无服务器命名空间，然后将其注册到 Data Catalog。通过这样做，您可以统一 Amazon Redshift 托管存储（RMS）和 Amazon S3 存储桶中的数据，并访问来自兼容 Apache Iceberg 的分析引擎的数据。

通过注册命名空间和集群，您可提供对数据的访问权限，而无需复制或移动数据。有关在 Amazon Redshift 中注册集群和命名空间的更多信息，请参阅[将 Amazon Redshift 集群和命名空间注册到 AWS Glue Data Catalog](https://docs.aws.amazon.com/redshift/latest/dg/iceberg-integration-register.html)。

 在 Amazon Redshift 中，您可以通过数据共享或向 Data Catalog 注册命名空间和集群来执行数据共享。对于在单个数据库对象级别运行的数据共享，您必须为每个表或视图启用共享。相比之下，命名空间发布功能在集群或命名空间级别运行。在 Data Catalog 中注册集群或命名空间时，其中的所有数据库和表都会自动共享，而无需为单个对象配置共享。

在 Data Catalog 中，您可以为每个命名空间或集群创建联合目录。当目录指向 Data Catalog 外部的实体时，该目录称为*联合目录*。Amazon Redshift 命名空间中的表和视图在 Data Catalog 中作为单个表列出。您可以通过 Lake Formation 与同一个账户或另一个账户中的选定 IAM 主体和 SAML 用户共享联合目录中的数据库和表。您还可以添加行和列筛选表达式，以限制对某些数据的访问。有关更多信息，请参阅 [Lake Formation 中的数据筛选和单元格级别安全性](data-filtering.md)。

Data Catalog 支持三级元数据层次结构，包括目录、数据库和表（和视图）。当您在 Data Catalog 中注册命名空间时，Amazon Redshift 数据层次结构会映射到 Data Catalog 的 3 级层次结构，如下所示：
+ Amazon Redshift 命名空间成为 Data Catalog 中的多级目录。
+ 关联的 Amazon Redshift 数据库在 Data Catalog 中注册为目录。
+ Amazon Redshift 架构成为 Data Catalog 中的数据库。
+ Amazon Redshift 表成为 Data Catalog 中的表。

![\[显示 Amazon Redshift 命名空间和 Data Catalog 之间的目录级映射。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/rs-catalog-mapping.png)


有了这个三级元数据层次结构，您可以在 Data Catalog 中使用三段式命名法“catalog1/catalog2.database.table”来访问 Amazon Redshift 表。此外，数据团队可以在 Data Catalog 账户中保持与 Amazon Redshift 相同的表组织结构。

在 Lake Formation 中，您可以通过 Data Catalog 资源的精细访问控制，安全地管理来自 Amazon Redshift 的数据。通过这种集成，您可以使用通用访问控制机制来管理、保护和查询来自单个目录的分析数据。

有关限制，请参阅[将 Amazon Redshift 数据仓库数据引入的限制 AWS Glue Data Catalog](notes-ns-catalog.md)。

**Topics**
+ [主要优势](#namespace-publish-benefits)
+ [角色和责任](#namespace-roles-responsibilities)
+ [在中管理 Amazon Redshift 命名空间的先决条件 AWS Glue Data Catalog](redshift-ns-prereqs.md)
+ [创建 Amazon Redshift 联合目录](create-ns-catalog.md)
+ [查看目录对象](view-ns-catalog-resources.md)
+ [更新联合目录](update-fed-catalog-steps.md)
+ [访问共享的联合目录](catalog-resource-link.md)
+ [删除联合目录](delete-rs-fed-catalog.md)
+ [查询联合目录](query-redshift-fed-catalog.md)
+ [其他资源](additional-resources-byod.md)

## 主要优势
<a name="namespace-publish-benefits"></a>

 将 Amazon Redshift 集群和命名空间注册到 AWS Glue Data Catalog 并统一亚马逊 S3 数据湖和 Amazon Redshift 数据仓库中的数据，可以带来以下好处：
+ **统一的查询体验**：使用任何与 Apache Iceberg 兼容的查询引擎（例如 Amazon EMR Serverless 和 Amazon Athena）查询您的 Amazon Redshift 托管数据和 Amazon S3 存储桶中的数据，无需移动或复制数据。
+ **跨服务一致的数据访问**-在访问来自不同 AWS 分析服务的相同联合数据源时，无需更新数据管道中的数据库和表名称，因为数据源已注册在数据目录中。
+ **精细访问控制**：您可以应用 Lake Formation 权限，使用精细访问控制权限来管理对联合数据来源的访问权限。

## 角色和责任
<a name="namespace-roles-responsibilities"></a>


|  |  | 
| --- |--- |
|  角色 | 责任 | 
|  Amazon Redshift 创建器集群管理员  |  在 Data Catalog 中注册集群或命名空间。  | 
| Lake Formation 数据湖管理员  |  接受集群或命名空间邀请，创建联合目录，以及向其他主体授予对联合目录的访问权限。  | 
| Lake Formation 只读管理员 | 发现联合目录，查询联合目录中的 Amazon Redshift 表。 | 
| 数据传输角色  |  Amazon Redshift 会代表您与 Amazon S3 存储桶进行数据传输。  | 

以下是向用户提供 Amazon Redshift 命名空间访问权限的简要步骤：

1.  在 Amazon Redshift 中，创建器集群管理员在 Data Catalog 中注册集群或命名空间。

1. 数据湖管理员接受 Amazon Redshift 创建器集群管理员的命名空间邀请，并在 Data Catalog 中创建联合目录。

   完成此步骤后，您可以在 Data Catalog 中管理 Amazon Redshift 命名空间目录。

1. 向用户授予对目录、数据库和表的权限。您可以与同一个账户或另一个账户的用户共享整个命名空间目录或表的子集。

# 在中管理 Amazon Redshift 命名空间的先决条件 AWS Glue Data Catalog
<a name="redshift-ns-prereqs"></a>

1. 创建数据湖管理员-创建有权接受命名空间邀请的 IAM 角色，创建 AWS Glue Data Catalog 对象（目录、数据库、表/视图），并向其他用户授予 Lake Formation 权限。

   有关创建数据湖管理员的 step-by-step说明，请参阅[创建数据湖管理员](initial-lf-config.md#create-data-lake-admin)。

1. 更新数据湖管理员权限。

    除了数据湖管理员权限外，数据湖管理员还需要以下权限才能在 Lake Formation 中接受 Amazon Redshift 命名空间邀请、创建或更新 Data Catalog 资源以及启用数据湖访问权限：

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

****  

   ```
       {
       "Version":"2012-10-17",		 	 	 
       "Id": "glue-enable-datalake-access",
       "Statement": [{
               "Effect": "Allow",
               "Action": [
                   "redshift:AssociateDataShareConsumer",
                   "redshift:DescribeDataSharesForConsumer",
                   "redshift:DescribeDataShares",
                   "redshift-serverless:CreateNamespace",
                   "redshift-serverless:CreateWorkgroup",
                   "redshift-serverless:DeleteNamespace",
                   "redshift-serverless:DeleteWorkgroup",
                   "ec2:DescribeAccountAttributes",
                   "ec2:DescribeSubnets",
                   "ec2:DescribeSecurityGroups",
                   "ec2:DescribeAvailabilityZones",
                   "s3:createBucket",
                   "s3:deleteBucket",
                   "s3:putBucketPolicy",
                   "s3:putEncryptionConfiguration",
                   "s3:putLifecycleConfiguration",
                   "s3:putBucketVersioning",
                   "iam:CreateRole"
               ],
               "Resource": "*"
           },
           {
               "Action": [
                   "iam:PassRole"
               ],
               "Effect": "Allow",
               "Resource": "arn:aws:iam::*:role/data transfer role name",
               "Condition": {
                   "StringLike": {
                       "iam:PassedToService": [
                           "glue.amazonaws.com"
                       ]
                   }
               }
           }
       ]
   }
   ```

------

1. 如果用于创建联合目录的 IAM 角色不是数据湖管理员，则需要向该角色授予 `Create catalog` 权限。

**创建目录创建者**

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

   1. 在**管理**下面，选择**管理角色和任务**。

   1. 选择**授权**。

   1. 在**授予权限**屏幕上，选择 IAM 用户或角色。

   1. 选择**创建目录**权限。

   1. 或者，您也可以授予可授予的**创建目录**权限。可授予的权限让目录创建者可以将 `Create catalog` 权限授予其他主体。

   1. 选择**授权**。

   AWS CLI 授予创建联合目录权限的示例。

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

1. 创建只读管理员角色，通过 Amazon Redshift 查询编辑器 v2 在 Data Catalog 中发现 Amazon Redshift 联合目录。

   要从 Amazon Redshift 查询编辑器 v2 查询联合目录中的 Amazon Redshift 表，请确保只读管理员角色策略包含 Amazon Redshift 服务相关角色 `AWSServiceRoleForRedshift` 的 ARN。

   ```
    aws lakeformation put-data-lake-settings 
           --region us-east-1 \
           --data-lake-settings \
    '{
      "DataLakeAdmins": [{"DataLakePrincipalIdentifier":"arn:aws:iam::123456789012:role/Admin"}],
      "ReadOnlyAdmins":[{"DataLakePrincipalIdentifier":"arn:aws:iam::123456789012:role/aws-service-role/redshift.amazonaws.com/AWSServiceRoleForRedshift"}],
      "CreateDatabaseDefaultPermissions":[],
      "CreateTableDefaultPermissions":[],
      "Parameters":{"CROSS_ACCOUNT_VERSION":"4","SET_CONTEXT":"TRUE"}
     }'
   ```

1.  创建一个数据传输角色，让 Amazon Redshift 可以代表您与 Amazon S3 存储桶进行数据传输。

   当您为兼容 Apache Iceberg 的查询引擎（例如 Athena、Amazon EC2 上的 Amazon EMR）启用数据湖访问权限以访问 Data Catalog 中的 Amazon Redshift 资源时，您需要创建一个 IAM 角色，该角色具有所需的权限，可以执行与 Amazon S3 存储桶之间的数据传输。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Id": "glue-enable-datalake-access",
       "Statement": [{
         "Sid": "DataTransferRolePolicy",
           "Effect": "Allow",
           "Action": [ "glue:GetCatalog",
                       "glue:GetDatabase",
                       "kms:GenerateDataKey",
                       "kms:Decrypt"],
           "Resource": "*"
       }
       ]
   }
   ```

------

1.  将以下信任策略添加到 AWS Glue 和 Amazon Redshift 服务的数据传输角色中，以代入和传出 Amazon S3 存储桶的数据的角色。

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

****  

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

------

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

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

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Id": "auto-redshift-3",
       "Statement": [{
               "Sid": "RedshiftAllowAccessPolicy",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "*"
               },
               "Action": [
                   "kms:Encrypt",
                   "kms:Decrypt",
                   "kms:ReEncrypt*",
                   "kms:GenerateDataKey*",
                   "kms:CreateGrant",
                   "kms:DescribeKey"
               ],
               "Resource": "*",
               "Condition": {
                   "StringEquals": {
                       "kms:CallerAccount": "111122223333",
                       "kms:ViaService": "redshift.us-east-1.amazonaws.com"
                   }
               }
           },
           {
               "Sid": "RedshiftServerlessAllowAccessPolicy",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "*"
               },
               "Action": [
                   "kms:Encrypt",
                   "kms:Decrypt",
                   "kms:ReEncrypt*",
                   "kms:GenerateDataKey*",
                   "kms:CreateGrant",
                   "kms:DescribeKey"
               ],
               "Resource": "*",
               "Condition": {
                   "StringEquals": {
                       "kms:CallerAccount": "111122223333",
                       "kms:ViaService": "redshift-serverless.us-east-1.amazonaws.com"
                   }
               }
           },
           {
               "Sid": "DirectMetadataAccess",
               "Effect": "Allow",
               "Principal": {
               "AWS": "arn:aws:iam::111122223333:root"
               },
               "Action": [
                   "kms:Describe*",
                   "kms:Get*",
                   "kms:List*",
                   "kms:RevokeGrant"
               ],
               "Resource": "*"
           },
           {
               "Sid": "GenerateDataKeyDecryptDataTransferRole",
               "Effect": "Allow",
               "Principal": {
               "AWS": "arn:aws:iam::111122223333:role/data-transfer-role-name"
               },
               "Action": [
                   "kms:GenerateDataKey",
                   "kms:Decrypt"
               ],
               "Resource": "*",
               "Condition": {
                   "StringEquals": {
                   "kms:ViaService": "s3.us-east-1.amazonaws.com"
                   }
               }
           }
       ]
   }
   ```

------

# 创建 Amazon Redshift 联合目录
<a name="create-ns-catalog"></a>

本主题介绍接受集群或命名空间邀请、创建联合多级目录以及向其他主体授予权限所需遵循的步骤。你可以使用 Lake Formation 控制台、 AWS Command Line Interface (AWS CLI) 或 APIs /来完成这些任务SDKs。本主题中的示例显示了同一个账户中的创建器集群/命名空间、Data Catalog 和数据使用者。

要了解有关 Lake Formation 跨账户功能的更多信息，请参阅[Lake Formation 中的跨账户数据共享](cross-account-permissions.md)。

**在 Data Catalog 中管理 Amazon Redshift 命名空间**

1. 查看命名空间邀请并接受邀请。

------
#### [ Console ]

   1. 以数据湖管理员的身份登录 Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。导航到**数据目录**下的**目录**页面。

   1. 查看您已获授权可以访问的命名空间邀请。**状态**列表示您当前参与命名空间的状态。**未接受**状态表示您已添加到命名空间，但尚未接受或已拒绝邀请。  
![\[带有待处理邀请的目录页面。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/catalog-details.png)

   1. 要响应命名空间或集群邀请，请选择邀请名称，然后选择**查看邀请**。在**接受或拒绝邀请**中，查看邀请详细信息。选择**接受**接受邀请，或选择**拒绝**拒绝邀请。如果您拒绝邀请，就无法访问该命名空间。

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

   以下示例显示如何查看、接受和注册邀请。将 AWS 账户 身份证替换为有效的 AWS 账户 身份证。将 `data-share-arn` 替换为引用命名空间的实际 Amazon 资源名称（ARN）。

   1. 查看待处理的邀请。

      ```
      aws redshift describe-data-shares \
       --data-share-arn 'arn:aws:redshift:us-east-1:123456789012:datashare:abcd1234-1234-ab12-cd34-1a2b3c4d5e6f/ds_internal_namespace' \
      ```

   1. 接受邀请。

      ```
       aws redshift associate-data-share-consumer \
       --data-share-arn 'arn:aws:redshift:us-east-1:123456789012:datashare:abcd1234-1234-ab12-cd34-1a2b3c4d5e6f/ds_internal_namespace' \
       --consumer-arn 'arn:aws:glue:us-east-1:123456789012:catalog'
      ```

   1. 在 Lake Formation 账户中注册集群或命名空间。使用 [RegisterResource](https://docs.aws.amazon.com/lake-formation/latest/APIReference/API_RegisterResource.html)API 操作在 Lake Formation 中注册数据共享。 `DataShareArn`是的输入参数`ResourceArn`。
**注意**  
此步骤为必需步骤。

      ```
      aws lakeformation register-resource \
       --resource-arn 'arn:aws:redshift:us-east-1:123456789012:datashare:abcd1234-1234-ab12-cd34-1a2b3c4d5e6f/ds_internal_namespace'
      ```

------

1. 创建联合目录。

    接受邀请后，您需要在 Data Catalog 中创建一个联合目录，以便将 Amazon Redshift 命名空间中的对象映射到 Data Catalog。您必须是数据湖管理员或具有创建目录所需权限的用户或角色。

------
#### [ Console ]

   1. 接受命名空间**邀请**后，将显示**设置目录详细信息**页面。

   1. 在**设置目录详细信息**页面上，输入目录的唯一名称。目录名称使用小写。目录名称长度必须小于或等于 255 个字符。可以使用此标识符在元数据层次结构（catalogid.dbName.schema.table）内部映射命名空间。

   1.  输入目录的描述。描述的长度必须小于或等于 2048 个字符。

   1. 接下来，选择**从 Iceberg 兼容的引擎访问此目录**复选框，来启用在 Amazon EMR 上使用与 Apache Iceberg 兼容的分析引擎（例如 Athena 和 Apache Spark）访问 Amazon Redshift 资源。

      您无需启用数据湖访问权限，即可使用 Amazon Redshift 访问联合目录。  
![\[带有访问启用选项的创建目录页面。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/catalog-access.png)

   1. 要使这些查询引擎能够读取和写入 Amazon Redshift 命名空间，请 AWS Glue 创建一个托管的 Amazon Redshift 集群，该集群具有在不影响 Amazon Redshift 数据仓库工作负载的情况下执行读取和写入操作所需的计算和存储资源。

      您还需要为 IAM 角色提供与 Amazon S3 存储桶进行数据传输所需的权限。

   1. 默认情况下，Amazon Redshift 集群中的数据使用 AWS 托管密钥进行加密。Lake Formation 提供了创建自定义 KMS 密钥进行加密的选项。如果您使用客户管理型密钥，您必须向密钥添加特定的密钥策略。

       如果您使用客户管理型密钥对 Amazon Redshift 集群/命名空间中的数据进行加密，请选择**自定义加密设置**。要使用自定义密钥，必须向 KMS 密钥添加额外的自定义托管式密钥策略。有关更多信息，请参阅 [在中管理 Amazon Redshift 命名空间的先决条件 AWS Glue Data Catalog](redshift-ns-prereqs.md)。

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

    使用以下示例代码创建一个目录，其中包含使用 AWS CLI发布到 Data Catalog 的 Amazon Redshift 数据。

   ```
   aws glue create-catalog 
   --cli-input-json \
   '{
       "Name": "nscatalog", 
       "CatalogInput": {
           "Description": "Redshift federated catalog",
           "CreateDatabaseDefaultPermissions" : [],
           "CreateTableDefaultPermissions": [],
           "FederatedCatalog": {
               "Identifier": "arn:aws:redshift:us-east-1:123456789012:datashare:11524d7f-f56d-45fe-83f7-d7bb0a4d6d71/ds_internal_namespace",
               "ConnectionName": "aws:redshift"
           },
           "CatalogProperties": {
             "DataLakeAccessProperties" : {
               "DataLakeAccess" : true,
               "DataTransferRole" : "arn:aws:iam::123456789012:role/DataTransferRole"
            } 
          }
       }
   }'
   ```

------

1. 向您的账户或外部账户中的用户授予权限。

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

   1. 选择**下一步**，向其他用户授予对共享目录、数据库和表的权限。

   1.  在**添加权限**屏幕上，选择主体和要授予的权限类型。  
![\[包含主体类型和授予选项的目录权限页面。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/catalog-permissions.png)

      1.  在**主体**部分中，选择主体类型，然后指定要授予权限的主体。
         + **IAM 用户和角色**：从 IAM 用户和角色列表中选择一个或多个用户或角色。
         + **SAML 用户和群组** — 对于 SAML 以及 Amazon Quick 用户和群组，请为通过 SAML 联合的用户或群组或 Amazon Quick 用户或群组输入一个或多个 ARNs 亚马逊资源名称 (ARNs)。在每个 ARN 后按 **Enter**。

           有关如何构造的信息 ARNs，请参阅 AWS CLI 授予和撤消 AWS CLI 命令。
         + **外部账户** — 对于 AWS、 AWS 组织或 IAM 委托人为 IAM 用户或角色输入一个或多个有效的 AWS 账户 IDs IDs IDs、组织、组织单位或 ARN。在每个 ID 后按 Enter。组织 ID 由“o-”后跟 10 到 32 个小写字母或数字组成。单位 ID 以“ou-”开头，后跟 4 到 32 个小写字母或数字（包含 OU 的根的 ID）。该字符串后跟第二个“-”短横线和 8 到 32 个额外的小写字母或数字。

      1.  在**权限**部分中，选择权限和可授予的权限。

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

         选择**超级用户**可向用户授予对目录中资源（数据库、表、视图）的不受限权限。

   1. 选择**添加**。

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

   在 AWS CLI中使用以下示例通过以下方式授予目录、数据库和表权限：
   + 以下示例说明如何对联合目录授予权限。

     ```
     aws lakeformation grant-permissions
      --cli-input-cli-json \
        '{
              "Principal": {
                   "DataLakePrincipalIdentifier": "arn:aws:iam::123456789012:role/non-admin"
               },
               "Resource": {
                    "Catalog": {
                          "Id": "123456789012:nscatalog"
                     }
                 },
                 "Permissions": [
                        "DESCRIBE","CREATE_CATALOG"
                  ],
                 "PermissionsWithGrantOption": [
                  ]
         }'
     ```
   + 使用以下示例对数据库授予权限。

     ```
     aws lakeformation grant-permissions \
       --cli-input-json \
               '{
                   "Principal": {
                       "DataLakePrincipalIdentifier": "arn:aws:iam::123456789012:role/non-admin"
                   },
                   "Resource": {
                       "Database": {
                           "CatalogId": "123456789012:nscatalog/dev",
                           "Name": "public"
                       }
                   },
                   "Permissions": [
                       "ALL"
                   ]
               }'
     ```
   +  以下示例说明如何对 Amazon Redshift 数据库中的表授予权限。

     ```
     aws lakeformation grant-permissions \
       --cli-input-json \
             '{
                 "Principal": {
                     "DataLakePrincipalIdentifier": "arn:aws:iam::123456789012:role/non-admin"
                 },
                 "Resource": {
                     "Table": {
                         "CatalogId": "123456789012:nscatalog2/dev",
                         "DatabaseName": "public",
                         "TableWildcard" : {}
                     }
                 },
                 "Permissions": [
                     "ALL"
                 ]
             }'
     ```

------

1. 选择**下一步**来查看目录详细信息和创建联合目录。新创建的联合目录和目录对象会显示在**目录**页面中。

   通过 `catalogID = 123456789012:Redshift-federated catalog id` 方式来引用 Amazon Redshift 联合目录。

# 查看目录对象
<a name="view-ns-catalog-resources"></a>

 创建联合目录后，您可以使用 Lake Formation 控制台或 AWS CLI查看目录中的对象。

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

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

1. 选择 Data Catalog 下的**目录**。

1. 从**目录**页面的列表中选择联合目录。

1.  目录摘要页面显示您有权访问的目录对象（数据库和表）。**权限**选项卡显示已获授这些对象的访问权限的 IAM 主体。

------
#### [ AWS CLI ]
+ 以下 AWS CLI 示例说明如何请求顶级目录。

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

  *响应*

  ```
  {
      "Catalog": {
          "CatalogId": "123456789012:nscatalog",
          "Name": "nscatalog",
          "ResourceArn": "arn:aws:glue:us-east-1:123456789012:catalog/nscatalog",
          "Description": "Redshift published Catalog",
          "CreateTime": "2024-09-05T14:49:16-07:00",
          "FederatedCatalog": {
              "Identifier": "arn:aws:redshift:us-east-1:123456789012:datashare:b1234589-e823-4a14-ad8e-077085540a50/ds_internal_namespace",
              "ConnectionName": "aws:redshift"
          },
          "CatalogProperties": {
              "DataLakeAccessProperties": {
                  "DataLakeAccess": true,
                  "DataTransferRole": "arn:aws:iam::123456789012:role/DataTransferRole",
                  "KmsKey": "AWS_OWNED_KMS_KEY",
                  "ManagedWorkgroupName": "123456789012:nscatalog",
                  "ManagedWorkgroupStatus": "AVAILABLE",
                  "RedshiftDatabaseName": "dev"
              }
          },
          "CatalogIdentifier": "e2309c2c2fb048f1a3069dfdc1c7883e",
          "CreateTableDefaultPermissions": [],
          "CreateDatabaseDefaultPermissions": []
      }
  }
  ```
+ 以下示例说明如何请求账户中的所有目录。

  ```
  aws glue get-catalogs \
    --recursive
  ```
+ 以下示例请求说明如何获取 Amazon Redshift 数据库级目录。

  ```
  aws glue get-catlog \
   --catalog-id 123456789012:namespace catalog name/redshift database name
  ```
+ 以下示例请求说明如何获取 Amazon Redshift 数据库级目录中的数据库。

  ```
  aws glue get-databases \
  --catalog-id 123456789012:namespace catalog name/redshift database name
  ```
+  以下示例请求说明如何获取目录中的 Amazon Redshift 表。

  ```
  aws glue get-table \
    --catalog-id 123456789012:parent catalog name/redshift database \
    --database-name redshift schema name \
    --name table name
  ```
+  以下示例说明如何从 Amazon Redshift 数据库获取所有表。

  ```
  aws glue get-tables \
   --catalog-id 123456789012:namespace catalog name/redshift database name \
   --database-name RS schema name
  ```

------

# 更新联合目录
<a name="update-fed-catalog-steps"></a>

您可以使用 Lake Formation 控制台、 AWS CLI 或 [UpdateCatalog](https://docs.aws.amazon.com/glue/latest/webapi/API_UpdateCatalog.html)API 操作更新数据目录中的 Amazon Redshift 联合目录。

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

按照以下步骤，使用 Lake Formation 控制台更新您的联合目录。

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

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

1. 在**目录**页面上，选择要更新的 Amazon Redshift 联合目录。

1. 在**操作**下，选择**编辑**。

1. 在**设置目录详细信息**屏幕上的**从引擎访问**部分，选择**从兼容 Iceberg 的引擎访问此目录**。选中此选项将为兼容 Apache Iceberg 的查询引擎启用数据湖访问。

1. 接下来，创建一个新的 IAM 角色或选择一个现有 IAM 角色，该角色的策略授予了与 Amazon S3 存储桶进行数据传输的权限。

   有关权限的更多信息，请参阅 [在中管理 Amazon Redshift 命名空间的先决条件 AWS Glue Data Catalog](redshift-ns-prereqs.md)。

1. 默认情况下，Amazon Redshift 集群中的数据使用 AWS 托管式密钥进行加密。如果您选择使用客户管理型密钥加密数据，请创建 KMS 密钥或选择具有 [在中管理 Amazon Redshift 命名空间的先决条件 AWS Glue Data Catalog](redshift-ns-prereqs.md) 部分所定义权限的现有密钥。

1. 选择**保存**。

   成功完成后，**目录详细信息**页面将显示状态为“成功”的托管工作组名称。

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

以下是 `update-catalog` CLI 输入的示例，该示例通过将 `DataLakeAacess` 参数值设置为 `false` 来禁用数据湖访问。

```
aws glue update-catalog  --cli-input-json \
'{
    "Name": "nscatalog", 
    "CatalogInput": {
        "Description": "Redshift published catalog",
        "CreateDatabaseDefaultPermissions" : [],
        "CreateTableDefaultPermissions": [],
        "FederatedCatalog": {
            "Identifier": "arn:aws:redshift:us-east-1:123456789012:datashare:11524d7f-f56d-45fe-83f7-d7bb0a4d6d71/ds_internal_namespace",
            "ConnectionName": "aws:redshift"
        },
        "CatalogProperties": {
          "DataLakeAccessProperties" : {
            "DataLakeAccess" : false
        } 
       }
    }
}'
```

------

# 访问共享的联合目录
<a name="catalog-resource-link"></a>

 AWS Lake Formation 跨账户功能允许用户在多个 AWS 账户 AWS 组织之间安全地共享分布式数据湖，或者直接与其他账户中的 IAM 委托人共享分布式数据湖，从而提供对元数据和底层数据的精细访问权限。

Lake Formation 使用 AWS Resource Access Manager (AWS RAM) 服务来促进资源共享。当您与其他账户共享目录资源时， AWS RAM 会向被授权者账户发送接受或拒绝资源授予的邀请。

Amazon Athena 和 Redshift Spectrum 等集成分析服务需要资源链接才能在查询中包含共享资源。委托人需要在自己的资源中创建指 AWS Glue Data Catalog 向其他 AWS 账户共享资源的资源链接。有关资源链接的更多信息，请参阅 [Lake Formation 中资源链接的工作原理](https://docs.aws.amazon.com/lake-formation/latest/dg/resource-links-about.html)。

*目录链接容器*是一个数据目录对象，它引用来自其他账户的本地或跨账户联合数据库级目录。 AWS 您还可以在目录链接容器中创建数据库链接和表链接。创建数据库链接或表链接时，必须指定位于同一个目标 Amazon Redshift 数据库级目录（Amazon Redshift 数据库）下的目标资源。

要创建目录链接容器，您需要 Lake Formation `CREATE_CATALOG` 或 `glue:CreateCatalog` 权限。

 您必须具有**跨账户版本设置**版本 4 或更高版本，才能跨 AWS 账户越多个共享联合目录中的数据库或表。

## 创建指向跨账户联合目录的目录链接容器
<a name="create-resource-link-catalog"></a>

您可以使用 AWS Lake Formation 控制台、 AWS Glue `CreateCatalog` API 或 () 创建指向任何 AWS 地区的 Redshift 数据库级联合目录的目录链接容器。 AWS Command Line Interface AWS CLI

**创建指向共享目录的目录链接容器（控制台）**

1. 打开 AWS Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。以拥有 Lake Formation `CREATE_CATALOG` 权限的主体身份登录。

1. 在导航窗格中，选择**目录**，然后选择**创建目录**。

1. 在**设置目录详细信息**页面上，提供以下信息：  
**Name**  
输入一个与目录名称遵循相同规则的名称。该名称可以与目标共享目录的名称相同。  
**Type**  
选择**目录链接容器**作为目录类型。  
**来源**  
选择 `Redshift`。  
**目标 Redshift 目录**  
选择 Redshift 数据库级联合目录或从列表中选择本地（自有）目录。  
列表中列出了与您的账户共享的所有目录。记下与每个目录一起列出的目录所有者账户 ID。如果您未看到您知道已与您的账户共享的目录，请检查以下内容：  
   + 如果您不是数据湖管理员，请检查数据湖管理员是否向您授予了对该目录的 Lake Formation 权限。
   + 如果您是数据湖管理员，并且您的账户与授予账户不在同一个 AWS Organizations 中，请确保您已接受关于该目录的 AWS Resource Access Manager （AWS RAM）资源共享邀请。有关更多信息，请参阅 [接受来自的资源共享邀请 AWS RAM](accepting-ram-invite.md)。
通过控制台创建目录链接容器时，如果尝试选择跨账户 Redshift 目录，**目标 Redshift 目录**下拉列表可能会显示 `No matches`。尽管显示了此内容，但您仍可以在输入字段中手动输入 Amazon Redshift 数据库级联合目录（Amazon Redshift 数据库）的目标 ARN，并且该表单仍然可以正常工作。例如：`arn:aws:glue:us-east-1:123456789012:catalog/federated-catalog-redshift/dev`。  
之所以出现这种情况，是因为控制台只能在当前登录的账户中搜索可能的候选项。下拉列表旨在作为自动完成功能，但您仍然可以手动输入 ARNs 以进行跨账户访问。

1. 要使 Apache Iceberg 查询引擎能够读取和写入亚马逊 Redshift 命名空间，请 AWS Glue 创建一个托管的 Amazon Redshift 集群，该集群具有在不影响 Amazon Redshift 数据仓库工作负载的情况下执行读写操作所需的计算和存储资源。您需要为 IAM 角色提供向 Amazon S3 存储桶或从中传输数据所需的权限。

1. 选择**下一步**。

1. （可选）选择**添加权限**以向其他主体授予权限。

   但是，授予对目录链接容器的权限不会授予对目标（已链接）目录的权限。您必须单独授予对目标目录的权限，才能在 Athena 中显示目录链接。

1. 接下来，查看目录链接容器详细信息，并选择**创建目录**。

   然后，您可以在**目录**页面中查看链接容器名称。

   现在，您可以在目录链接容器中创建数据库链接和表链接，以允许通过查询引擎进行访问。

**创建目录链接容器 CLI 示例**
+ 在以下示例中，`TargetRedshiftCatalog` 对象指定了 Amazon Redshift 数据库级联合目录（Amazon Redshift 数据库）的 ARN。创建目录链接容器时必须启用 `DataLakeAccess`。

  ```
  aws glue create-catalog \
    --cli-input-json 
      '{
          "Name": "linkcontainer", 
          "CatalogInput": {
              "TargetRedshiftCatalog": {
                 "CatalogArn": "arn:aws:us-east-1:123456789012:catalog/nscatalog/dev"
               },
              "CatalogProperties": {
                "DataLakeAccessProperties" : {
                  "DataLakeAccess" : true,
                  "DataTransferRole" : "arn:aws:iam::111122223333:role/DataTransferRole"
               } 
             }
          }
      }'
  ```

## 在目录链接容器中创建资源链接
<a name="create-db-table-link"></a>

 您还可以在目录链接容器中创建数据库资源链接和表资源链接。创建数据库资源链接或表资源链接时，必须指定位于同一个目标 Amazon Redshift 数据库级目录（Amazon Redshift 数据库）下面，链接容器所指向的目标资源。

您可以使用 AWS Lake Formation 控制台、API 或 AWS Command Line Interface ()AWS CLI创建指向共享的 Amazon Redshift 数据库或表的资源链接。
+ 有关详细说明，请参阅[创建指向共享数据目录数据库的资源链接](create-resource-link-database.md)。

  以下是在目录链接容器下创建数据库资源链接的 AWS CLI 示例。

  ```
  aws glue create-database \
    --cli-input-json \
      '{
          "CatalogId": "111122223333:linkcontainer",
          "DatabaseInput": {
              "Name": "dblink",
               "TargetDatabase": {
                 "CatalogId": "123456789012:nscatalog/dev",
                  "DatabaseName": "schema1"
               }
          }
      }'
  ```
+ 要在目录链接容器下创建表资源链接，需要先在本地 AWS Glue Data Catalog 创建一个包含表资源链接 AWS Glue 的数据库。

  有关创建共享表的资源链接的更多信息，请参阅[创建指向共享数据目录表的资源链接](create-resource-link-table.md)。
  +  创建数据库来包含表资源链接的示例

    ```
    aws glue create-database \
      --cli-input-json \
          '{
              "CatalogId": "111122223333:linkcontainer",
              "DatabaseInput": {
                  "Name": "db1",
                  "Description": "creating parent database for table link"
              }
          }'
    ```
  +  创建表资源链接示例

    ```
    aws glue create-table \
      --cli-input-json \
        '{
            "CatalogId": "111122223333:linkcontainer",
             "DatabaseName": "db1",
            "TableInput": {
                "Name": "tablelink",
                "TargetTable": {
                    "CatalogId": "123456789012:nscatalog/dev",
                   "DatabaseName": "schema1", 
                    "Name": "table1"
                 }
            }
        }'
    ```

# 删除联合目录
<a name="delete-rs-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-redshift-fed-catalog"></a>

在您向其他委托人授予权限后，他们可以登录并开始查询联合目录中的表，方法是使用 Amazon Redshift、Amazon Amazon Athena EMR 和 ETL 登录 SQL 工具。 AWS Glue 

 有关 AWS Glue Data Catalog 使用 Apache Iceberg Rest 扩展端点或独立 Spark 应用程序连接的更多信息，请参阅[访问](https://docs.aws.amazon.com/glue/latest/dg/access_catalog.html) AWS Glue 开发者指南中的 AWS Glue Data Catalog部分。

您可以使用数据定义语言（DDL）查询，通过 Amazon EMR 上的 Apache Spark 来创建和管理数据库中的表。要在 Amazon Redshift 数据库中创建和删除表，主体必须拥有 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-byod"></a>

您可以使用 [Amazon SageMaker Lakehouse](https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/lakehouse.html) 实现对数据仓库和数据湖中数据的统一访问。通过 SageMaker Lakehouse，您可以通过开放的 Apache Iceberg REST API 使用首选分析、机器学习和商业智能引擎，通过一致、精细的访问控制来帮助确保安全访问数据。
+ [亚马逊 SageMaker 研讨会](https://catalog.us-east-1.prod.workshops.aws/workshops/107188af-3663-4bbf-bb35-93d514d406da/en-US/03lakehouse)
+ [使用 Amazon La SageMaker kehouse 简化企业的数据访问](https://aws.amazon.com/blogs/big-data/simplify-data-access-for-your-enterprise-using-amazon-sagemaker-lakehouse/)

# 联合到外部数据源中 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/)

# Amazon S3 表格与 AWS Glue Data Catalog 和的集成 AWS Lake Formation
<a name="create-s3-tables-catalog"></a>

[Amazon S3 表类数据存储服务](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables.html)提供专门针对分析工作负载进行优化的 S3 存储，可提高查询性能，同时降低成本。S3 表类数据存储服务中的数据存储在新的存储桶类型中：*表存储桶*，它将表存储为子资源。S3 表内置支持 Apache Iceberg 标准，让您可以使用 Apache Spark 等常用查询引擎轻松查询 Amazon S3 表类数据存储服务存储桶中的表格数据。

您可以 AWS Glue Data Catalog 使用 IAM 访问控制或 IAM 和 Lake Formation 拨款将 Amazon S3 表格与以下各项集成：
+ **IAM 访问控制**：使用 IAM 策略来控制对 S3 表和数据目录的访问。在这种访问控制方法中，您需要具有 S3 表资源和数据目录对象的 IAM 权限才能访问资源。
+ **Lake Formation 访问控制**：除了 AWS Glue IAM 权限外，还使用 AWS Lake Formation 授权，通过数据目录控制对 S3 表的访问。在此模式下，委托人需要 IAM 权限才能与数据目录交互，而 Lake Formation 授权决定委托人可以访问哪些目录资源（数据库、表、列、行）。此模式支持粗粒度访问控制（数据库级和表级授权）和精细访问控制（列级和行级安全）。配置注册角色并启用凭证自动售出后，委托人不需要 S3 Tables IAM 权限，因为 Lake Formation 使用注册角色代表委托人出售证书。Lake Formation 访问控制还支持第三方分析引擎的凭证自动售出。

本节提供了在以下场景中配置集成的指导： AWS Lake Formation 
+ **方案 A**：您使用 IAM 访问控制集成了 S3 表和数据目录，现在计划使用 AWS Lake Formation。请参阅 [更改 S3 表格集成的访问控制](manage-s3tables-catalog-integration.md)，了解更多信息。
+ **方案 B**：您计划使用 AWS Lake Formation 集成 S3 表和数据目录，但目前尚未将其集成到您的账户和区域中。从[将 Amazon S3 表类数据存储服务目录与 Data Catalog 和 Lake Formation 集成的先决条件](s3tables-catalog-prerequisites.md)本节开始，然后按照[启用 Amazon S3 表类数据存储服务集成](enable-s3-tables-catalog-integration.md)。
+ **方案 C**：您使用集成了 S3 表和数据目录 AWS Lake Formation ，现在计划使用 IAM。请参阅 [更改 S3 表格集成的访问控制](manage-s3tables-catalog-integration.md)，了解更多信息。

确保按照[将 S3 表与 AWS 分析服务集成的](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-integrating-aws.html)步骤进行操作，以便您拥有访问 AWS Glue Data Catalog 和您的表资源以及使用 AWS 分析服务的相应权限。

**Topics**
+ [Data Catalog 和 Lake Formation 集成的工作原理](#w2aac13c27c19)
+ [将 Amazon S3 表类数据存储服务目录与 Data Catalog 和 Lake Formation 集成的先决条件](s3tables-catalog-prerequisites.md)
+ [启用 Amazon S3 表类数据存储服务集成](enable-s3-tables-catalog-integration.md)
+ [在 S3 表目录中创建数据库和表](create-databases-tables-s3-catalog.md)
+ [在另一个 AWS 账户中注册 Amazon S3 表存储桶](register-cross-account-s3-table-bucket.md)
+ [授予权限](s3-tables-grant-permissions.md)

## Data Catalog 和 Lake Formation 集成的工作原理
<a name="w2aac13c27c19"></a>

当您将 S3 表目录与 Data Catalog 和 Lake Formation 集成时， AWS Glue 服务会在您的账户中特定于您的 AWS 区域的默认数据目录中创建一个名为 `s3tablescatalog` 的联合目录。该集成按以下方式映射您的账户和联合目录 AWS 区域 下的所有 Amazon S3 表存储桶资源：
+ Amazon S3 表类数据存储服务存储桶成为 Data Catalog 中的多级目录。
+ 关联的 Amazon S3 命名空间在 Data Catalog 中注册为数据库。
+ 表存储桶中的 Amazon S3 表类数据存储服务成为 Data Catalog 中的表。

![\[S3 表和之间对象的映射 AWS Glue Data Catalog。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/S3Tables-glue-catalog.png)


 与 Lake Formation 集成后，您可以在表存储桶目录中创建 Apache Iceberg 表，并通过 Amazon Athena Amazon EMR 等集成 AWS 分析引擎以及第三方分析引擎访问这些表。

当你同时启用带集成功能的 Lake Formation 时，它会通过实现细粒度的访问控制。 AWS Lake Formation这种安全方法意味着，除了 AWS Identity and Access Management (IAM) 权限外，您还必须向 IAM 委托人授予对您的表的 Lake Formation 权限，然后才能使用这些表。

 AWS Lake Formation中有两种主要类型的权限：
+ 元数据访问权限控制着在数据目录中创建、读取、更新和删除元数据数据库和表的能力。
+ 基础数据访问权限控制着对数据目录资源指向的基础 Amazon S3 位置读取和写入数据的能力。

Lake Formation 结合使用自己的权限模型和 IAM 权限模型，来控制对数据目录资源和基础数据的访问权限：
+ 为了使访问数据目录资源或基础数据的请求取得成功，请求必须通过由 IAM 和 Lake Formation 进行的权限检查。
+ IAM 权限控制对 Lake Formation AWS Glue APIs 和资源的访问，而 Lake Formation 权限控制对数据目录资源、Amazon S3 位置和底层数据的访问。

Lake Formation 权限仅适用于授予这些权限的区域，并且主体必须由数据湖管理员或其它具有必要权限的主体授权，才能获得 Lake Formation 权限。

# 将 Amazon S3 表类数据存储服务目录与 Data Catalog 和 Lake Formation 集成的先决条件
<a name="s3tables-catalog-prerequisites"></a>

以下是启用 Amazon S3 表与 AWS Glue Data Catalog 和集成的先决条件 AWS Lake Formation。

1.  当您启用 Amazon S3 表类数据存储服务集成时，Lake Formation 会自动注册 S3 表的位置。要向 Lake Formation 注册表存储桶位置，您需要一个 role/user 具有`lakeformation:RegisterResource``lakeformation:RegisterResourceWithPrivilegedAccess`、和`lakeformation:CreateCatalog`权限的 IAM。当具有这些权限的非管理员用户注册目录位置时，Lake Formation 会自动向他们授予该位置的 `DATA_LOCATION_ACCESS` 权限，从而允许调用主体对注册的数据位置执行所有支持的 Lake Formation 操作。

1. <a name="step3-permissions"></a> 启用 S3 表集成时，您需要为 Lake Formation 选择一个 IAM 角色来提供凭证，以便允许数据访问。为 Lake Formation 创建一个 IAM 角色，用于访问存储在 S3 表存储桶中的数据。向 Lake Formation 注册表存储桶时使用的 IAM 角色需要以下权限：

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "LakeFormationPermissionsForS3ListTableBucket",
               "Effect": "Allow",
               "Action": [
                   "s3tables:ListTableBuckets"
               ],
               "Resource": [
                   "*"
               ]
           },
           {
               "Sid": "LakeFormationDataAccessPermissionsForS3TableBucket",
               "Effect": "Allow",
               "Action": [
                   "s3tables:CreateTableBucket",
                   "s3tables:GetTableBucket",
                   "s3tables:CreateNamespace",
                   "s3tables:GetNamespace",
                   "s3tables:ListNamespaces",
                   "s3tables:DeleteNamespace",
                   "s3tables:DeleteTableBucket",
                   "s3tables:CreateTable",
                   "s3tables:DeleteTable",
                   "s3tables:GetTable",
                   "s3tables:ListTables",
                   "s3tables:RenameTable",
                   "s3tables:UpdateTableMetadataLocation",
                   "s3tables:GetTableMetadataLocation",
                   "s3tables:GetTableData",
                   "s3tables:PutTableData"
               ],
               "Resource": [
                   "arn:aws:s3tables:us-east-1:123456789012:bucket/*"
               ]
           }
       ]
   }
   ```

------

   有关更多信息，请参阅 [用于注册位置的角色的要求](registration-role.md)。

1.  将以下信任策略添加到 IAM 角色，以便 Lake Formation 服务代入该角色并将临时凭证提供给集成的分析引擎。

   ```
   {
     "Effect": "Allow",
     "Principal": {
       "Service": "lakeformation.amazonaws.com"
     },
     "Action": [
       "sts:AssumeRole",
       "sts:SetSourceIdentity",
       "sts:SetContext"  # add action to trust relationship when using IAM Identity center principals with Lake Formation
     ]
   }
   ```

**注意**  
 AWS 分析服务集成流程已更新。如果您已使用预览版设置了集成，则可以继续使用当前的集成。但是，更新的集成流程实现了性能改进。要更新集成，请执行以下操作：  
首先，在 Lake Formation 中删除现有的 S3 表目录。要删除目录，请从目录列表中选择 `s3tablescatalog` 目录，然后从**操作**中选择**删除**。
接下来，取消注册 `s3tablescatalog` 的数据位置。  
在 Lake Formation 控制台的**管理**部分，选择**数据位置**。
选择一个位置，然后从**操作**菜单中选择**删除**。
当系统提示进行确认时，选择**删除**。  
有关取消注册数据位置的详细说明，请参阅一[取消注册 Amazon S3 位置](unregister-location.md)节。
然后，按照本[启用 Amazon S3 表类数据存储服务集成](enable-s3-tables-catalog-integration.md)节中更新的集成步骤进行操作。

# 启用 Amazon S3 表类数据存储服务集成
<a name="enable-s3-tables-catalog-integration"></a>

您可以使用 Amazon S3 控制台创建 Amazon S3 表类数据存储服务存储桶，并将其与 AWS 分析服务集成。有关更多信息，请参阅[将 Amazon S3 表类数据存储服务与 AWS 分析服务配合使用](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-integrating-aws.html)。

 在中 AWS Lake Formation，您可以启用 Amazon S3 表格与 AWS Glue Data Catalog Lake Formation 控制台的集成，也可以 AWS Lake Formation 使用 Lake Formation 控制台或使用 AWS CLI。

## 将 Amazon S3 表类数据存储服务与 Data Catalog 和 Lake Formation 集成（控制台）
<a name="w2aac13c27c23b7b1"></a>

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

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

1. 在**目录**页面上选择**启用 S3 表集成**。  
![\[目录页面上的启用 S3 表集成选项。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/enable-s3-table-integration.png)

1.  选择一个具有所需权限的 IAM 角色，供 Lake Formation 代入，以便向分析查询引擎提供凭证。有关该角色访问数据所需的权限，请参阅先决条件部分的[step3-permissions](s3tables-catalog-prerequisites.md#step3-permissions)。  
![\[使用 IAM 角色启用 S3 集成屏幕。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/enable-s3-table-catalog.png)

1.  选择**支持外部引擎以完全表访问权限访问 Amazon S3 位置的数据**选项。当您为第三方引擎启用完全表访问权限时，Lake Formation 将直接向第三方引擎返回凭证，而无需执行 IAM 会话标签验证。这意味着您无法对要访问的表应用 Lake Formation 精细访问控制。

1. 请选择**启用**。S3 表的新目录已添加到目录列表中。启用 S3 表目录集成后，该服务会向 Lake Formation 注册 S3 表存储桶的数据位置。

1. 选择目录以查看目录对象并向其他主体授予权限。  
![\[S3 表目录\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/s3-table-catalog.png)

   要创建多级目录，请参阅《Amazon Simple Storage Service 用户指南》中的[创建表存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets-create.html)部分。

## 将 Amazon S3 表类数据存储服务与 Data Catalog 和 Lake Formation 集成（CLI）
<a name="w2aac13c27c23b7b3"></a>

在先决条件部分之后，创建一个允许 Lake Formation 访问您的表资源的 IAM 服务角色。

1. 创建一个名为 `Role-Trust-Policy.json` 的文件，其中包含以下信任策略：

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
         {
           "Sid": "LakeFormationDataAccessPolicy",
           "Effect": "Allow",
           "Principal": {
             "Service": "lakeformation.amazonaws.com"
           },
           "Action": [
               "sts:AssumeRole",
               "sts:SetContext",
               "sts:SetSourceIdentity"
           ],
           "Condition": {
             "StringEquals": {
               "aws:SourceAccount": "111122223333"
             }
           }
         }
       ]
   }
   ```

1. 使用以下命令创建 IAM 服务角色：

   ```
   aws iam create-role \
     --role-name S3TablesRoleForLakeFormation \
     --assume-role-policy-document file://Role-Trust-Policy.json
   ```

1. 创建一个名为 `LF-GluePolicy.json` 的文件，其中包含以下策略：

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "LakeFormationPermissionsForS3ListTableBucket",
               "Effect": "Allow",
               "Action": [
                   "s3tables:ListTableBuckets"
               ],
               "Resource": [
                   "*"
               ]
           },
           {
               "Sid": "LakeFormationDataAccessPermissionsForS3TableBucket",
               "Effect": "Allow",
               "Action": [
                   "s3tables:CreateTableBucket",
                   "s3tables:GetTableBucket",
                   "s3tables:CreateNamespace",
                   "s3tables:GetNamespace",
                   "s3tables:ListNamespaces",
                   "s3tables:DeleteNamespace",
                   "s3tables:DeleteTableBucket",
                   "s3tables:CreateTable",
                   "s3tables:DeleteTable",
                   "s3tables:GetTable",
                   "s3tables:ListTables",
                   "s3tables:RenameTable",
                   "s3tables:UpdateTableMetadataLocation",
                   "s3tables:GetTableMetadataLocation",
                   "s3tables:GetTableData",
                   "s3tables:PutTableData"
               ],
               "Resource": [
                   "arn:aws:s3tables:us-east-1:111122223333:bucket/*"
               ]
           }
       ]
   }
   ```

1. 使用以下命令将策略附加到角色：

   ```
   aws iam put-role-policy \
     --role-name S3TablesRoleForLakeFormation \
     --policy-name LakeFormationDataAccessPermissionsForS3TableBucket \
     --policy-document file://LF-GluePolicy.json
   ```

1. 创建一个名为 `input.json` 的文件，其中包含以下内容：

   ```
   {
       "ResourceArn": "arn:aws:s3tables:us-east-1:111122223333:bucket/*",
       "WithFederation": true,
       "RoleArn": "arn:aws:iam::111122223333:role/S3TablesRoleForLakeFormation"
   }
   ```

1. 使用以下命令在 Lake Formation 中注册表存储桶：

   ```
   aws lakeformation register-resource \
     --region us-east-1 \
     --with-privileged-access \
     --cli-input-json file://input.json
   ```

1. 创建一个名为 `catalog.json` 的文件，其中包含以下目录：

   ```
   {
      "Name": "s3tablescatalog",
      "CatalogInput": {
         "FederatedCatalog": {
             "Identifier": "arn:aws:s3tables:us-east-1:111122223333:bucket/*",
             "ConnectionName": "aws:s3tables"
          },
          "CreateDatabaseDefaultPermissions": [],
          "CreateTableDefaultPermissions": [],
          "AllowFullTableExternalDataAccess": "True"
      }
   }
   ```

1. 使用以下命令创建 `s3tablescatalog` 目录。创建此目录时，会 AWS Glue Data Catalog 使用与表存储桶、命名空间和表对应的对象填充。

   ```
   aws glue create-catalog \
     --region us-east-1 \
     --cli-input-json file://catalog.json
   ```

1. 使用以下命令验证是否已添加`s3tablescatalog`目录： AWS Glue 

   ```
   aws glue get-catalog --catalog-id s3tablescatalog
   ```

# 在 S3 表目录中创建数据库和表
<a name="create-databases-tables-s3-catalog"></a>

 您可以创建数据库来组织 Apache Iceberg 表，也可以创建表来定义数据在 S3 表目录中的架构和位置。

## 创建数据库（控制台）
<a name="w2aac13c27c25b5b1"></a>

1.  在上打开 Lake Formation 控制台 [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)，然后以数据湖管理员或数据库创建者的身份登录。

1. 在导航窗格的 **Data Catalog** 下，选择**数据库**。

1. 选择**创建数据库**。

1.  在**创建数据库**页面上，选择**数据库**选项，然后输入以下详细信息：
   + **名称**：输入数据库的唯一名称。
   + **数据目录**：选择 S3 表目录。数据库将位于此目录中。
   + **描述**：（可选）添加描述和位置。
   + **新表的 IAM 访问控制**：可以选择“仅对此数据库中的新表使用 IAM 访问控制”。有关此选项的信息，请参阅[更改数据湖的默认设置](https://docs.aws.amazon.com/lake-formation/latest/dg/change-settings.html)部分。
   + 选择**创建数据库**。您可以看到创建的数据库在 S3 表目录下面。

## 使用创建数据库 AWS CLI
<a name="w2aac13c27c25b5b3"></a>

以下 CLI 命令显示如何在 S3 表目录中创建数据库。

```
aws glue create-database 
--region us-east-1 \
--catalog-id "123456789012:s3tablescatalog/test" \
--database-input \
 '{ "Name": "testglueclidbcreation" }'
```

## 创建表（AWS 管理控制台）
<a name="w2aac13c27c25b5b5"></a>

 你可以使用 Lake Formation 控制台或 API 在 S3 表目录中创建 Apache Iceberg 元数据表。 AWS Glue `CreateTable`

1. 在上打开 Lake Formation 控制台 [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)，然后以数据湖管理员或具有`CreateTable`权限的用户身份登录。

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

1. 选择“创建表”。

1. 在**创建表**页面上，输入表的详细信息：  
![\[S3 表目录\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/s3-catalog-create-table.png)
   + **表名称**：输入表的唯一名称。
   + **目录**：选择 S3 表目录作为目录。
   + **数据库**：选择 S3 表目录下的数据库。
   +  **描述**：输入表的描述。
   + **架构**：选择“添加列”以添加列和列的数据类型。您可以选择创建一个空表，然后稍后更新架构。Iceberg 允许您在创建表后演变架构和分区。您可以使用 Athena 查询更新表架构，使用 Spark 查询更新分区。

1. 选择**提交**。

## 创建表（AWS CLI）
<a name="w2aac13c27c25b5b7"></a>

```
aws glue create-table \ 
--database-name "testglueclidbcreation" \ 
--catalog-id "123456789012:s3tablescatalog/test" \ 
--region us-east-1 \ 
--table-input \ 
'{ "Name": "testtablegluecli", "Parameters": { "format": "ICEBERG" }, "StorageDescriptor": { "Columns": [ {"Name": "x", "Type": "int", "Parameters": {"required": "true"}} ] } }'
```

# 在另一个 AWS 账户中注册 Amazon S3 表存储桶
<a name="register-cross-account-s3-table-bucket"></a>

您可以将一个账户中的个人 Amazon S3 表存储桶（ARN 格式`arn:aws:s3tables:us-east-1:account-id:bucket/bucket-name`:）注册到 AWS 另一个账户中的 Lake Formation。例如，您可以在账户 B 的 Lake Formation 中注册账户 A 中的表存储桶。

## 先决条件
<a name="w2aac13c27c27b5"></a>

开始跨账户存储桶注册之前：
+ 在账户 A 中创建表存储桶。
+ 在账户 B 中创建具有相应存储桶注册权限的 IAM 角色。

  有关向 Lake Formation 注册表存储桶所需权限的更多信息，请参阅 [将 Amazon S3 表类数据存储服务目录与 Data Catalog 和 Lake Formation 集成的先决条件](s3tables-catalog-prerequisites.md)。
+ 在要创建 S3 表目录的账户中注册表存储桶。
+  对于跨账户访问，注册表存储桶时指定的角色必须是具有相应权限的账户内角色，这样才能访问跨账户存储桶。该角色需要执行必要的 S3 表 IAM 操作才能访问存储桶资源。

## 跨账户表存储桶注册
<a name="w2aac13c27c27b7"></a>

在以下程序中，账户 A 是资源所属账户，账户 B 是注册表存储桶以管理访问权限的账户。

1. 登录到 AWS 管理控制台 账号 A

   打开 Amazon S3 控制台，网址为 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1.  创建表存储桶。有关更多信息，请参阅《Amazon S3 用户指南》中的[创建表存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets-create.html)。

1. 在账户 B 中注册表存储桶。

   使用将账户 A 中的表存储桶注册 AWS CLI 到账户 B 中的 Lake Formation

   ```
   aws lakeformation register-resource \
   --resource-arn 'arn:aws:s3tables:us-east-1:account-A-id:bucket/single-bucket-name' \
   --role-arn arn:aws:iam::account-B-id:role/role-name \
   --region us-east-1
   ```

   将 account-A-id、 single-bucket-name account-B-id、和角色名称替换为您的特定值。

1. 接下来，为账户 B 中的表存储桶创建目录。

   使用 AWS CLI创建目录。

   ```
   aws glue create-catalog --region us-east-1 \
   --cli-input-json \
   '{
      "Name": "catalog-name",
      "CatalogInput" : {
         "FederatedCatalog": {
            "Identifier": "arn:aws:s3tables:us-east-1:account A:bucket/single-bucket-name",
            "ConnectionName": "aws:s3tables"
         },
         "CreateDatabaseDefaultPermissions": [],
         "CreateTableDefaultPermissions": []      
      }
   }'
   ```

   将目录名称 account-A-id、和存储桶名称替换为您的特定值。

    以下 CLI 示例说明如何查看目录的详细信息。

   ```
    aws glue get-catalog \
     --catalog-id account-id:catalog-name \
     --region us-east-1
   ```

1. 接下来，在账户 B 的新创建目录中创建数据库和表。

   创建数据库。

   ```
   aws glue create-database \
     --region us-east-1 \
     --catalog-id "account-B-id:catalog-name" \
     --database-input \
   '{
     "Name": "database-name"
   }'
   ```

   创建表。

   ```
   aws glue create-table \
     --database-name database-name \
     --catalog-id account-B-id:catalog-name\
     --region us-east-1 \
     --table-input \
     '{
           "Name": "table-name",
           "Parameters": {
               "format": "ICEBERG"
           },
           "StorageDescriptor": {
              "Columns": [
           {"Name": "x", "Type": "int", "Parameters": {"required": "true"}}
             ]
           }
   }'
   ```

   将数据库名称、 account-B-id、目录名称和表名替换为您的特定值。

1. 以下示例说明如何查看目录中的对象。

   查看数据库详细信息。

   ```
   aws glue get-database \
     --name database-name \
     --catalog-id account-B-id:catalog-name \
     --region us-east-1
   ```

   查看表详细信息。

   ```
   aws glue get-table \
     --name table-name \
     --database-name database-name \
     --catalog-id account-B-id:catalog-name \
     --region us-east-1
   ```

   将数据库名称、 account-B-id、目录名称和表名替换为您的特定值。

# 授予权限
<a name="s3-tables-grant-permissions"></a>

 将 S3 表与集成后 AWS Lake Formation，您可以向账户中的其他 IAM 角色和用户授予对 S3 表目录和目录对象（表存储桶、数据库、表）的权限。借助 Lake Formation 权限，您可为 Amazon Redshift Spectrum 和 Athena 等集成分析引擎的用户定义表级、列级和行级粒度的访问控制。

 您可以使用命名资源方法或 Lake Formation 基于标签的访问控制 (LF-TBAC) 方法来授予权限。在使用 LF 标签和 LF 标签表达式授予权限之前，必须进行定义并将其分配给 Data Catalog 对象。

有关更多信息，请参阅 [管理 LF 标签以实现元数据访问控制](managing-tags.md)。

通过向外部 AWS 账户授予 Lake Formation 权限，您可以与外部账户共享数据库和表。然后，用户可以运行跨多个账户联接和查询表的查询和作业。当您与其他账户共享目录资源时，该账户中的主体可以对该资源进行操作，就像该资源位于其数据目录中一样。

当您与外部账户共享数据库和表时，**超级用户**权限不可用。

 有关授予权限的详细说明，请参阅[管理 Lake Formation 权限](managing-permissions.md)部分。

## AWS CLI 在 Amazon S3 表上授予权限的示例
<a name="w2aac13c27c29c15"></a>

```
aws lakeformation grant-permissions \
--cli-input-json \
'{
    "Principal": {
        "DataLakePrincipalIdentifier":"arn:aws:iam::111122223333:role/DataAnalystRole"
    },
    "Resource": {
        "Table": {
            "CatalogId":"111122223333:s3tablescatalog/amzn-s3-demo-bucket1",
            "DatabaseName":"S3 table bucket namespace <example_namespace>",
            "Name":"S3 table bucket table name <example_table>"
        }
    },
    "Permissions": [
        "SELECT"
    ]
}'
```

 命名中要包括以下参数：
+ DataLakePrincipalIdentifier — 用于授予权限的 IAM 用户、角色或群组 ARN
+ CatalogId — 拥有数据目录的 12 位数 AWS 账户 ID
+ DatabaseName — Amazon S3 表存储桶命名空间的名称
+ 名称：Amazon S3 表类数据存储服务存储桶表名称
+ 权限：要授予的权限。选项包括：SELECT、INSERT、DELETE、DESCRIBE、ALTER、DROP、ALLL 和 SUPER

# 访问共享的 Amazon S3 表类数据存储服务
<a name="s3-tables-cross-account-sharing"></a>

 对 S3 表目录中数据库或表授予跨账户权限后，要访问这些资源，您需要创建指向共享数据库和表的资源链接。

1.  在目标账户（接收共享资源的账户）中，创建数据库资源链接。有关详细说明，请参阅[创建指向共享数据目录数据库的资源链接](create-resource-link-database.md)。

   创建数据库资源链接的 CLI 示例

   ```
   aws glue create-database 
   --region us-east-1 
   --catalog-id "111122223333" 
   --database-input \
   '{
     "Name": "s3table_resourcelink",
     "TargetDatabase": {
       "CatalogId": "011426214932:s3tablescatalog/chmni-s3-table-bucket-011426214932",
       "DatabaseName": "s3_table_ns"
     },
     "CreateTableDefaultPermissions": []
   }'
   ```

1.  对表授予跨账户权限。

   跨账户权限授予的 CLI 示例

   ```
   aws lakeformation grant-permissions \
   --region us-east-1 \
   --cli-input-json \
   '{
       "Principal": {
           "DataLakePrincipalIdentifier": "arn:aws:iam::111122223333:role/S3TablesTestExecRole"
       },
       "Resource": {
           "Table": {
               "CatalogId": "011426214932:s3tablescatalog/chmni-s3-table-bucket-011426214932",
               "DatabaseName": "s3_table_ns",
               "Name": "test_s3_iceberg_table"
           }
       },
       "Permissions": [
           "ALL"
       ]
   }'
   ```

1.  对资源链接授予 Lake Formation `DESCRIBE` 权限。

    对资源链接授予描述权限的 CLI 示例。

   ```
   aws lakeformation grant-permissions \
       --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:role/S3TablesTestExecRole
       --resource Database='{CatalogId=111122223333;, Name=s3table_resourcelink}' \
       --permissions DESCRIBE
   ```

# 更改 S3 表格集成的访问控制
<a name="manage-s3tables-catalog-integration"></a>

将 Amazon S3 表与集成后 AWS Glue Data Catalog，您可以更改对目录资源的访问控制方式。本节如何根据您当前和所需的访问控制模型更改访问控制。启用 Lake Formation 允许您通过 Lake Formation 授权使用细粒度权限，例如列级和行级安全，并允许 Lake Formation 通过注册角色代表委托人出售临时证书。将访问控制从更改 AWS Lake Formation 为 IAM 会将访问控制返回到标准 IAM 策略，如果您的工作负载不需要精细的访问权限，并且您更愿意完全通过 IAM 管理权限，那么这可能是合适的。这两种迁移路径都涉及更新数据目录默认值、在 Lake Formation 中调整资源注册以及协调权限授予以避免过渡期间访问中断。

**Topics**
+ [启用 Lake Formation with S3 表格与数据目录集成](change-access-iam-to-lf.md)
+ [将访问控制从更改 AWS Lake Formation 为 IAM](change-access-lf-to-iam.md)

# 启用 Lake Formation with S3 表格与数据目录集成
<a name="change-access-iam-to-lf"></a>

本节介绍使用与集成的 Amazon S3 表的 AWS Lake Formation 授权，将访问控制从 IAM 权限迁移到 IAM 的工作流程 AWS Glue Data Catalog。

**重要**  
启用 AWS Lake Formation 访问控制将撤消对您的 S3 Tables 资源的所有现有基于 IAM 的访问权限。完成步骤 1 后，之前通过 IAM 权限访问数据的用户和角色将立即失去访问权限。用户必须先在步骤 2 中授予 Lake Formation 权限，然后用户才能再次查询数据。在维护时段内规划此次迁移，并与您的数据团队进行协调。

## 先决条件
<a name="w2aac13c29b7b7"></a>

要 read/write 访问 S3 表，除了 Lake Formation 权限外，委托人还需要 `lakeformation:GetDataAccess` IAM 权限。获得此权限后，Lake Formation 将授权访问数据的临时凭证请求。

## 使用 AWS CLI
<a name="w2aac13c29b7b9"></a>

1. **第 1 步：使用 IAM 角色向 Lake Formation 注册存储桶**

   在 Lake Formation 中注册 S3 表格资源。
**注意**  
如果您已有角色，请确保混合访问权限为 false。

   ```
   aws lakeformation register-resource \
     --resource-arn "arn:aws:s3tables:us-east-1:AWSAccountID:bucket/*" \
     --role-arn "arn:aws:iam::AWSAccountID:role/service-role/LFAccessRole" \
     --with-federation
   ```

1. **第 2 步：更新 AWS Glue 目录以启用 Lake Formation 访问控制**

   使用空`CreateDatabaseDefaultPermissions`和`CreateTableDefaultPermissions`（设置为`[]`）更新目录，然后设置`OverwriteChildResourcePermissionsWithDefault`为`Accept`。这将从所有现有子资源中移除基于 IAM 的访问权限，并允许使用 Lake Formation 授权管理目录及其对象。

   ```
   aws glue update-catalog \
     --catalog-id "s3tablescatalog" \
     --catalog-input '{
       "FederatedCatalog": {
           "Identifier": "arn:aws:s3tables:us-east-1:AWSAccountID:bucket/*",
           "ConnectionName": "aws:s3tables"
       },
       "CreateDatabaseDefaultPermissions": [],
       "CreateTableDefaultPermissions": [],
       "OverwriteChildResourcePermissionsWithDefault": "Accept",
       "AllowFullTableExternalDataAccess": "True"
     }'
   ```

1. **第 3 步：向你的数据团队授予 Lake Formation 权限**

   向需要访问的委托人（角色、用户或群组）授予 Lake Formation 权限。例如，要向角色授予全表读取权限，请执行以下操作：

   ```
   aws lakeformation grant-permissions \
     --principal DataLakePrincipalIdentifier=arn:aws:iam::AWSAccountID:role/DataTeamRole \
     --resource '{
       "Table": {
           "CatalogId": "AWSAccountID",
           "DatabaseName": "s3tablescatalog/table-bucket-name/namespace",
           "TableWildcard": {}
       }
     }' \
     --permissions "SELECT" "DESCRIBE"
   ```

   根据需要对每个委托人和资源组合重复此操作。

# 将访问控制从更改 AWS Lake Formation 为 IAM
<a name="change-access-lf-to-iam"></a>

本节介绍将与集成的 Amazon S3 表的访问控制从 AWS Lake Formation 授权更改为 IAM 权限的工作流程 AWS Glue Data Catalog。

**重要**  
将访问控制从 AWS Lake Formation 授权更改为 IAM 将撤销对您的 S3 Tables 资源的所有现有基于 Lake Formation 的访问权限。完成第 2 步后，之前通过 Lake Formation 授权访问数据的用户和角色将立即失去访问权限。在更新目录之前，您必须在步骤 1 中授予 IAM 访问权限。在维护时段内规划此次迁移，并与您的数据团队进行协调。

**重要**  
仅在使用数据目录对象时，可以使用精细的访问控制，例如列级访问权限和数据单元格筛选器。 AWS Lake Formation 在继续将访问控制从 IAM 迁移 AWS Lake Formation 到 IAM 之前，请使用审核您现有的 Lake Formation 授权，`aws lakeformation list-permissions`并确定等效的 IAM 策略能否为您的用户提供所需的访问权限。任何依赖精细的 Lake Formation 拨款的委托人在迁移访问控制后都需要完整的表级 IAM 访问权限。

## 先决条件
<a name="w2aac13c29b9b9"></a>

在开始之前，请确保满足以下条件：
+ 您已经确定了当前对正在迁移的资源生效的所有 Lake Formation 补助。跑`aws lakeformation list-permissions --resource-type TABLE`去查看它们。
+ 您已准备好为所有受影响的委托人提供同等访问权限的 IAM 策略。
+ 在 Lake Formation 注册的 IAM 角色仍然存在`lakeformation:GetDataAccess`（在混合过渡期间需要）。

## 使用 AWS CLI
<a name="w2aac13c29b9c11"></a>

1. **步骤 1：向委托人授予 IAM 权限**

   将 IAM 策略附加到需要访问权限的用户或角色。该策略必须包括 AWS Glue 元数据权限和 S3 表数据权限。
**注意**  
以下示例策略仅提供读取权限。

   ```
   aws iam put-user-policy \
     --user-name GlueIAMAccessUser \
     --policy-name S3TablesIAMAccessPolicy \
     --policy-document '{
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "GlueMetadataAccess",
               "Effect": "Allow",
               "Action": [
                   "glue:GetCatalog",
                   "glue:GetDatabase",
                   "glue:GetTable"
               ],
               "Resource": [
                   "arn:aws:glue:us-east-1:AWSAccountID:catalog/s3tablescatalog",
                   "arn:aws:glue:us-east-1:AWSAccountID:database/s3tablescatalog/table-bucket-name/namespace",
                   "arn:aws:glue:us-east-1:AWSAccountID:table/s3tablescatalog/table-bucket-name/namespace/*"
               ]
           },
           {
               "Sid": "S3TablesDataAccess",
               "Effect": "Allow",
               "Action": [
                   "s3tables:GetTableBucket",
                   "s3tables:GetTable",
                   "s3tables:GetTableMetadataLocation",
                   "s3tables:GetTableData"
               ],
               "Resource": [
                   "arn:aws:s3tables:us-east-1:AWSAccountID:bucket/table-bucket-name",
                   "arn:aws:s3tables:us-east-1:AWSAccountID:bucket/table-bucket-name/table/*"
               ]
           }
       ]
     }'
   ```

   在继续操作之前，请确认所有受影响的用户和角色都可以使用其 IAM 证书访问预期的表。

1. **步骤 2：更新目录以恢复 IAM 默认权限**

   更新目录这样`CreateDatabaseDefaultPermissions`并`CreateTableDefaultPermissions``ALL`授予`IAM_ALLOWED_PRINCIPALS`。设置为`OverwriteChildResourcePermissionsWithDefault`，`Accept`这样更改就会传播到所有现有的子资源，而不仅仅是新创建的子资源。

   ```
   aws glue update-catalog \
     --catalog-id "s3tablescatalog" \
     --catalog-input '{
       "FederatedCatalog": {
           "Identifier": "arn:aws:s3tables:us-east-1:AWSAccountID:bucket/*",
           "ConnectionName": "aws:s3tables"
       },
       "CreateDatabaseDefaultPermissions": [{
           "Principal": {"DataLakePrincipalIdentifier": "IAM_ALLOWED_PRINCIPALS"},
           "Permissions": ["ALL"]
       }],
       "CreateTableDefaultPermissions": [{
           "Principal": {"DataLakePrincipalIdentifier": "IAM_ALLOWED_PRINCIPALS"},
           "Permissions": ["ALL"]
       }],
       "OverwriteChildResourcePermissionsWithDefault": "Accept"
     }'
   ```

1. **第 3 步：从 Lake Formation 注销资源**

   确认所有访问权限均通过 IAM 策略运行，并且所有委托人均不依赖于 Lake Formation 的授权，即可从 Lake Formation 注销资源以完成迁移。

   ```
   aws lakeformation deregister-resource \
     --resource-arn "arn:aws:s3tables:us-east-1:AWSAccountID:bucket/*"
   ```
**注意**  
注销资源后，`lakeformation:GetDataAccess`从不再需要该资源的 IAM 委托人中移除。

无需任何`revoke-permissions`步骤。

# 在中创建亚马逊 Redshift 托管目录 AWS Glue Data Catalog
<a name="create-rms-catalog"></a>

 您现在可能没有可用的 Amazon Redshift 创建器集群或 Amazon Redshift 数据共享，但想使用 AWS Glue Data Catalog来创建和管理 Amazon Redshift 表。首先，您可以使用 `glue:CreateCatalog` API 创建 AWS Glue 托管目录，也可以将目录类型设置为 Red AWS Lake Formation shift，也可以通过将目录类型设置`Catalog source`为 `Managed` **Red** shift 来创建托管目录。该步骤执行以下操作：
+ 在 Data Catalog 中创建一个目录
+ 将目录注册为 Lake Formation 数据位置
+ 创建 Amazon Redshift 托管无服务器工作组
+ 使用数据共享对象链接 Amazon Redshift Serverless 工作组和 Data Catalog

**创建托管目录并设置权限（控制台）**

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

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

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

1. 在**设置目录**详细信息页面上，输入以下信息：
   + **名称**：您的托管目录的唯一名称。名称不能更改，且必须为小写。名称最多可包含 255 个字符，并且在账户内必须是唯一的。
   + **类型**：为目录类型选择 `Managed catalog`。
   + **存储**：为存储选择 `Redshift`。
   + **描述**：输入从数据来源创建的目录的描述。

1. 您可以使用在 Amazon EC2 上的 Amazon EMR 上运行的 Apache Spark 应用程序来访问 AWS Glue Data Catalog中的 Amazon Redshift 数据库。

   为了使 Apache Spark 能够读取和写入 Amazon Redshift 托管存储， AWS Glue 创建一个托管式 Amazon Redshift 集群，该集群具有在不影响 Amazon Redshift 数据仓库工作负载的情况下执行读写操作所需的计算和存储资源。您还需要为 IAM 角色提供与 Amazon S3 存储桶进行数据传输所需的权限。有关数据传输角色所需的权限，请参阅 [在中管理 Amazon Redshift 命名空间的先决条件 AWS Glue Data Catalog](redshift-ns-prereqs.md) 小节中的步骤 5。

1. 默认情况下，Amazon Redshift 集群中的数据使用 AWS 托管密钥进行加密。Lake Formation 提供了创建自定义 KMS 密钥进行加密的选项。如果您使用客户管理型密钥，您必须向密钥添加特定的密钥策略。

1.  如果您使用客户管理型密钥对 Amazon Redshift 托管存储中的数据进行加密，请选择自定义加密设置。要使用自定义密钥，必须向 KMS 密钥添加额外的自定义托管式密钥策略。有关更多信息，请参阅 [在中管理 Amazon Redshift 命名空间的先决条件 AWS Glue Data Catalog](redshift-ns-prereqs.md)。

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**。

       有关如何构造的信息 ARNs，请参阅 AWS CLI 授予和撤消 AWS CLI 命令。
   +  在**权限**部分中，选择权限和可授予的权限。

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

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

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

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

**创建联合目录（CLI）**
+  以下示例演示了如何创建联合目录。

  ```
  aws glue create-catalog --cli-input-json file://input.json
  
  {
      "Name": "CatalogName", 
      "CatalogInput": {
        "Description": "Redshift published Catalog",
        "CreateDatabaseDefaultPermissions" : [],
        "CreateTableDefaultPermissions": [],
        "CatalogProperties": {
          "DataLakeAccessProperties" : {
            "DataLakeAccess" : "true",
            "DataTransferRole" : "DTR arn",
            "KMSKey": "kms key arn",  // Optional
            "CatalogType": "aws:redshift"
          }  
        }
      }
  }
  ```

  Glue get-catalog 响应 

  ```
  aws glue get-catalog \
    --catalog-id account-id:catalog-name \
    --region us-east-1
  
  Response:
  {
      "Catalog": {
          "Name": "CatalogName", 
          "Description": "Glue Catalog for Redshift z-etl use case",
          "CreateDatabaseDefaultPermissions" : [],
          "CreateTableDefaultPermissions": [],
           "CatalogProperties": {
            "DataLakeAccessProperties" : {
              "DataLakeAccess": "true",
              "DataTransferRole": "DTR arn",
              "KMSKey": "kms key arn",
              "ManagedWorkgroupName": "MWG name",
              "ManagedWorkgroupStatus": "MWG status",
              "RedshiftDatabaseName": "RS db name",
              "NamespaceArn": "namespace key arn",
              "CatalogType": "aws:redshift"
           }
         }
      }
  ```

# 管理对 Amazon Redshift 数据共享中数据的权限
<a name="data-sharing-redshift"></a>

使用 AWS Lake Formation，您可以安全地管理 Amazon Redshift 数据共享中的数据。Amazon Redshift 是 AWS Cloud 中的一种完全托管的 PB 级数据仓库服务。使用数据共享功能，Amazon Redshift 可帮助您跨 AWS 账户共享数据。有关 Amazon Redshift 数据共享的更多信息，请参阅 [Amazon Redshift 中的数据共享概述](https://docs.aws.amazon.com/redshift/latest/dg/data_sharing_intro.html)。

在 Amazon Redshift 中，生产者集群管理员会创建一个数据共享，并将其共享给数据湖管理员。有关创建数据湖管理员的逐步说明，请参阅[创建数据湖管理员](initial-lf-config.md#create-data-lake-admin)。

在您（数据湖管理员）接受数据共享后，必须为特定数据共享创建 AWS Glue Data Catalog 数据库。这样您就可以使用 Lake Formation 权限来控制对它的访问。Lake Formation 将每个数据共享映射到相应的数据目录数据库。它们在数据目录中显示为联合数据库。

当数据库指向数据目录外部的实体时，该数据库称为*联合数据库*。Amazon Redshift 数据共享中的表和视图在数据目录中作为单个表列出。您可以通过 Lake Formation 与同一个账户或其他账户中的选定 IAM 主体和 SAML 用户共享联合数据库。您还可以添加行和列筛选表达式，以限制对某些数据的访问。有关更多信息，请参阅 [Lake Formation 中的数据筛选和单元格级别安全性](data-filtering.md)。

 要向用户提供对 Amazon Redshift 数据共享的访问权限，您必须执行以下操作：

1. 更新**数据目录设置**以启用 Lake Formation 权限。

1. 接受 Amazon Redshift 制作者集群管理员发出的数据共享邀请，然后在 Lake Formation 中注册数据共享。

   完成此步骤后，您可以在 Lake Formation 数据目录中管理数据共享。

1. 创建联合数据库并定义对该数据库的权限。

1. 向用户授予对数据库和表的权限。您可以与同一账户或其他账户的用户共享整个数据库或表的子集。

有关限制，请参阅[Amazon Redshift 数据共享限制](notes-rs-datashare.md)。

**Topics**
+ [在 Amazon Redshift 数据共享上设置权限的先决条件](redshift-ds-prereqs.md)
+ [设置 Amazon Redshift 数据共享权限](setup-ds-perms.md)
+ [查询联合数据库](qerying-fed-db.md)

# 在 Amazon Redshift 数据共享上设置权限的先决条件
<a name="redshift-ds-prereqs"></a>

**更新默认数据目录设置**  
要为数据目录资源启用 Lake Formation 权限，我们建议您禁用 Lake Formation 中的默认**数据目录设置**。有关更多信息，请参阅 [更改默认权限模式或使用混合访问模式](initial-lf-config.md#setup-change-cat-settings)。

**更新权限**  
 除了数据湖管理员权限（`AWSLakeFormationDataAdmin`）外，在 Lake Formation 中接受 Amazon Redshift 数据共享还需要以下权限：
+ `glue:PassConnection on aws:redshift`
+ `redshift:AssociateDataShareConsumer`
+ `redshift:DescribeDataSharesForConsumer`
+ `redshift:DescribeDataShares`

数据湖管理员 IAM 用户隐式拥有以下权限。
+ data\$1location\$1access
+ create\$1database 
+ lakefomation:registerResource

# 设置 Amazon Redshift 数据共享权限
<a name="setup-ds-perms"></a>

 本主题介绍接受数据共享邀请、创建联合数据库和授予权限所需执行的步骤。您可以使用 Lake Formation 控制台或 AWS Command Line Interface (AWS CLI)。本主题中的示例显示了同一个账户中的制作者集群、数据目录和数据使用者。

要了解有关 Lake Formation 跨账户功能的更多信息，请参阅[Lake Formation 中的跨账户数据共享](cross-account-permissions.md)。

**设置数据共享权限**

1. 查看数据共享邀请并接受。

------
#### [ Console ]

   1.  通过 [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) 以数据湖管理员的身份登录 Lake Formation 控制台。导航到**数据共享**页面。

   1. 查看已授权您访问的数据共享。**状态**列表示您当前参与数据共享的状态。**待处理**状态表示您已被添加到数据共享，但尚未接受或已拒绝邀请。

   1.  要响应数据共享邀请，请选择数据共享名称，然后选择**查看邀请**。在**接受或拒绝数据共享**中，查看邀请详细信息。选择**接受**接受邀请，或选择**拒绝**拒绝邀请。如果您拒绝邀请，就无法访问数据共享。

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

   以下示例显示如何查看、接受和注册邀请。将 AWS 账户 ID 替换为有效的 AWS 账户 ID。将 `data-share-arn` 替换为引用数据共享的实际 Amazon 资源名称 (ARN)。

   1. 查看待处理的邀请。

      ```
      aws redshift describe-data-shares \
       --data-share-arn 'arn:aws:redshift:us-east-1:111122223333:datashare:abcd1234-1234-ab12-cd34-1a2b3c4d5e6f/federatedds' \
      ```

   1. 接受数据共享。

      ```
       aws redshift associate-data-share-consumer \
       --data-share-arn 'arn:aws:redshift:us-east-1:111122223333:datashare:abcd1234-1234-ab12-cd34-1a2b3c4d5e6f/federatedds' \
       --consumer-arn 'arn:aws:glue:us-east-1:111122223333:catalog
      ```

   1. 在 Lake Formation 账户中注册数据共享。使用 [RegisterResource](https://docs.aws.amazon.com/lake-formation/latest/APIReference/API_RegisterResource.html) API 操作在 Lake Formation 中注册数据共享。`DataShareArn` 是 `ResourceArn` 的输入参数。
**注意**  
此步骤为必需步骤。

      ```
      aws lakeformation register-resource \
       --resource-arn 'arn:aws:redshift:us-east-1:111122223333:datashare:abcd1234-1234-ab12-cd34-1a2b3c4d5e6f/federatedds'
      ```

------

1. 创建数据库。

    接受数据共享邀请后，您需要创建一个指向与数据共享关联的 Amazon Redshift 数据库的数据库。您必须是数据湖管理员才能创建数据库。

------
#### [ Console ]

   1.  从**邀请**窗格中选择数据共享，然后选择**设置数据库详细信息**。

   1.  在**设置数据库详细信息**中，输入数据共享的唯一名称和标识符。使用此标识符可在元数据层次结构（dbName.schema.table）中对数据共享进行内部映射。

   1.  选择**下一步**，向其他用户授予对共享数据库和表的权限。

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

    在 AWS CLI 中使用以下示例代码创建指向与 Lake Formation 共享的 Amazon Redshift 数据库的数据库。

   ```
   aws glue create-database --cli-input-json \
   
   '{
    "CatalogId": "111122223333",
    "DatabaseInput": {
     "Name": "tahoedb",
     "FederatedDatabase": {
          "Identifier": "arn:aws:redshift:us-east-1:111122223333:datashare:abcd1234-1234-ab12-cd34-1a2b3c4d5e6f/federatedds",
          "ConnectionName": "aws:redshift"
      }
    }
    }'
   ```

------

1. 授予权限

    创建数据库后，可以向账户中的用户或外部 AWS 账户和组织授予权限。您将无法针对映射到 Amazon Redshift 数据共享的联合数据库授予写入数据权限（插入、删除）和元数据权限（更改、删除、创建）。有关授予权限的更多信息，请参阅[管理 Lake Formation 权限](managing-permissions.md)。
**注意**  
作为数据湖管理员，您只能查看联合数据库中的表。要执行任何其它操作，您都需要授予自己对这些表的更多权限。

------
#### [ Console ]

   1. 在**授予权限**屏幕上，选择要向其授予权限的用户。

   1. 选择**授权**。

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

   在 AWS CLI 中使用以下示例通过以下方式授予数据库和表权限：

   ```
   aws lakeformation grant-permissions --input-cli-json file://input.json
   
   {
      "Principal": {
              "DataLakePrincipalIdentifier": "arn:aws:iam::111122223333:user/non-admin"
      },
      "Resource": {
             "Database": {
                   "CatalogId": "111122223333",
                    "Name": "tahoedb"
              }
       },
       "Permissions": [
                "DESCRIBE"
        ],
       "PermissionsWithGrantOption": [
                            
        ]
    }
   ```

   ```
   aws lakeformation grant-permissions --input-cli-json file://input.json
   
   {
                      "Principal": {
                             "DataLakePrincipalIdentifier": "arn:aws:iam::111122223333:user/non-admin"
                      },
                     "Resource": {
                            "Table": {
                                 "CatalogId": "111122223333",
                                 "DatabaseName": "tahoedb",
                                 "Name": "public.customer"
                          }
                     },
                    "Permissions": [
                           "SELECT"
                     ],
                    "PermissionsWithGrantOption": [
                            "SELECT"
                      ]
    }
   ```

------

# 查询联合数据库
<a name="qerying-fed-db"></a>

 在您授予权限后，用户可以登录并开始使用 Amazon Redshift 查询联合数据库。用户现在可以在 SQL 查询中使用本地数据库名称引用 Amazon Redshift 数据共享。在 Amazon Redshift 中，通过数据共享来共享的公共架构中的客户表将在数据目录中创建相应的表，即 `public.customer`。

1. 在使用 Amazon Redshift 查询联合数据库之前，集群管理员使用以下命令通过数据目录数据库创建一个数据库：

   ```
   CREATE DATABASE sharedcustomerdb FROM ARN 'arn:aws:glue:<region>:111122223333:database/tahoedb' WITH DATA CATALOG SCHEMA tahoedb
   ```

1.  集群管理员授予对数据库的使用权限。

   ```
   GRANT USAGE ON DATABASE sharedcustomerdb TO IAM:user;
   ```

1.  您（联合用户）现在可以登录 SQL 工具来查询表。

   ```
   Select * from sharedcustomerdb.public.customer limit 10;
   ```

 有关更多信息，请参阅《Amazon Redshift 管理指南》中的[查询 AWS Glue Data Catalog](https://docs.aws.amazon.com/redshift/latest/mgmt/query-editor-v2-glue.html)。

# 管理对使用外部元存储的数据集的权限
<a name="data-sharing-hms"></a>

借助 AWS Glue Data Catalog 元数据联合（数据目录联合），您可以将数据目录连接到存储您的 Amazon S3 数据元数据的外部元数据存储，并使用 AWS Lake Formation安全地管理数据访问权限。您不必将元数据从外部元存储迁移到数据目录中。

数据目录提供了一个集中式元数据存储库，使管理和发现不同系统中的数据变得更加容易。当您的组织管理数据目录中的数据时，您可以使用 AWS Lake Formation 控制对 Amazon S3 中数据集的访问权限。

**注意**  
目前，我们仅支持 Apache Hive（版本 3 及更高版本）元存储联合身份验证。

为了设置数据目录联合，我们在HiveMetastore中提供了一个名为 [GlueDataCatalogFederation-](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 作为开源项目在 Federation [-Hive Meta](https://github.com/awslabs/aws-glue-data-catalog-federation) store 上提供。AWS Glue Data Catalog 

该 AWS SAM 应用程序创建并部署将数据目录连接到 Hive 元数据仓所需的以下资源：
+ ** AWS Lambda 函数** — 托管联合身份验证服务的实现，该服务在数据目录和 Hive 元数据仓之间进行通信。 AWS Glue 调用此 Lambda 函数从 Hive 元数据存储中检索元数据对象。
+ **Amazon API Gateway** – Hive 元存储的连接端点，该存储充当将所有调用路由到 Lambda 函数的代理。
+ **IAM 角色** – 具有在数据目录和 Hive 元存储之间创建连接所需权限的角色。
+ **AWS Glue connec** tion — Amazon API Gateway 一种存储 Amazon API Gateway 终端节点和用于调用它的 IAM 角色的 AWS Glue 连接类型。

当您查询表时，该 AWS Glue 服务会对 Hive 元数据仓进行运行时调用并获取元数据。Lambda 函数充当 Hive 元存储和数据目录之间的转换器。

建立连接后，为了将 Hive 元存储中的元数据与数据目录同步，您需要使用 Hive 元存储连接详细信息在数据目录中创建*联合数据库*，并将该数据库映射到 Hive 数据库。当数据库指向数据目录外的实体时，该数据库被称为“联合数据库”。

您可以使用基于标签的访问控制和联合数据库上的命名资源方法来应用 Lake Formation 权限，并在多个 AWS 账户 AWS Organizations、和组织单位之间共享该权限（OUs）。您也可以直接与其他账户的 IAM 主体共享联合数据库。

 您可以使用 Lake Formation 数据筛选条件在外部 Hive 表上定义列级、行级和单元格级的细粒度权限。您可以使用 Amazon Athena、Amazon Redshift 或 Amazon EMR 来查询 Lake Formation 托管的外部 Hive 表。

有关跨账户数据共享和数据筛选的更多信息，请参阅：
+ [Lake Formation 中的跨账户数据共享](cross-account-permissions.md)
+ [Lake Formation 中的数据筛选和单元格级别安全性](data-filtering.md)

**数据目录元数据联合身份验证主要步骤**

1. 您可以创建具有部署 AWS SAM 应用程序和创建联合数据库所需的相应权限的 IAM 用户和角色。

1. 通过为使用外部 Hive 元存储的数据集的选择 `Enable Data Catalog federation` 选项，您可以在 Lake Formation 中注册 Amazon S3 数据位置。

1. 您可以配置 AWS SAM 应用程序设置（AWS Glue 连接名称、Hive 元数据仓的 URL 和 Lambda 函数参数）并部署应用程序。 AWS SAM 

1.  AWS SAM 应用程序部署将外部 Hive 元数据仓与数据目录连接所需的资源。

1. 要对 Hive 数据库和表应用 Lake Formation 权限，您需要使用 Hive 元存储连接详细信息在数据目录中创建数据库，并将该数据库映射到 Hive 数据库。

1. 向您的账户或其他账户中的主体授予对联合数据库的权限。

**注意**  
无需应用 Lake Formation 权限，即可将数据目录连接到外部 Hive 元存储、创建联合数据库以及在 Hive 数据库和表上运行查询和 ETL 脚本。对于未在 Lake Formation 中注册的 Amazon S3 中的源数据，访问权限由亚马逊 S3 的 IAM 权限策略和 AWS Glue 操作决定。

有关限制，请参阅[Hive 元数据存储数据共享注意事项和限制](notes-hms.md)。

**Topics**
+ [工作流](#hms-workflow)
+ [将数据目录连接到 Hive 元存储的先决条件](hms-prerequisites.md)
+ [将数据目录连接到外部 Hive 元存储](hms-setup.md)
+ [其他资源](additional-resources-hms.md)

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

下图显示了连接到外部 Hive 元数据仓的工作流程。 AWS Glue Data Catalog 

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


1. 主体使用 Athena 或 Redshift Spectrum 等集成服务提交查询。

1. 集成服务调用数据目录获取元数据，然后数据目录会调用后面可用的 Hive 元数据仓端点 Amazon API Gateway，并接收对元数据请求的响应。

1. 集成服务向 Lake Formation 发送请求，以验证表信息和用于访问表的凭证。

1.  Lake Formation 对请求进行授权，并将临时凭证售卖给集成应用程序以允许其访问数据。

1. 该集成服务使用从 Lake Formation 收到的临时凭证从 Amazon S3 读取数据并将结果共享给主体。

# 将数据目录连接到 Hive 元存储的先决条件
<a name="hms-prerequisites"></a>

要将 AWS Glue Data Catalog 连接到外部 Apache Hive 元数据仓并设置数据访问权限，您需要完成以下要求：
**注意**  
我们建议 Lake Formation 管理员部署 AWS SAM 应用程序，并且只有特权用户才能使用 Hive 元数据仓连接来创建相应的联合数据库。

1. 

**创建 IAM 角色。**

**部署 AWS SAM 应用程序**
   + 创建具有部署资源（Lambda 函数 Amazon API Gateway、IAM 角色和 AWS Glue 连接）所需的必要权限的角色，以创建与 Hive 元数据仓的连接。

**创建联合数据库**

   需要以下资源权限：
   + `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可以向Athena、Redshift Spectrum和Amazon EMR等 AWS 分析服务机构出售证书。

   有关注册 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_cn/lake-formation/latest/dg/images/hms-register-s3.png)

   有关在 Lake Formation 中注册数据位置的更多信息，请参阅[为您的数据湖配置 Amazon S3 位置](initial-lf-config.md#register-s3-location)。

1. 

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

   要将 Amazon EMR 与联合 Hive 元存储数据库配合使用，您需要拥有 Hive 3.x 版或更高版本以及 Amazon EMR 6.x 版或更高版本。

# 将数据目录连接到外部 Hive 元存储
<a name="hms-setup"></a>

[要连接 AWS Glue Data Catalog 到 Hive 元数据仓，您需要部署一个名为 GlueDataCatalogFederation-的 AWS SAM 应用程序。HiveMetastore](https://console.aws.amazon.com/lambda/home#/create/app?applicationId=arn:aws:serverlessrepo:us-east-1:766175011753:applications/GlueDataCatalogFederation-HiveMetastore)它创建将外部 Hive 元存储与数据目录连接起来所需的资源。您可以在中访问该 AWS SAM 应用程序 AWS Serverless Application Repository。

该 AWS SAM 应用程序使用 Lambda 函数为 Amazon API Gateway 后面的 Hive 元数据仓创建连接。 AWS SAM 应用程序使用统一资源标识符 (URI) 作为用户的输入，并将外部 Hive 元数据仓连接到数据目录。当用户对 Hive 表运行查询时，数据目录会调用 API Gateway 端点。该端点调用 Lambda 函数来检索 Hive 表的元数据。

**将数据目录连接到 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 开始的 Lambda 内存量（以 MB 为单位）。默认值为 1024。
      + **LambdaTimeout**-Lambda 调用的最大运行时间（以秒为单位）。默认值为 30。
      + **VPCSecurityGroupIds**和 I **VPCSubnetds**-存在 Hive 元数据仓的 VPC 的信息。

   1. 选中 **I acknowledge that this app creates custom IAM roles and resource policies**（我确认此应用程序创建自定义 IAM 角色和资源策略）。有关更多信息，请选择 **Info (信息)** 链接。

   1. 在 **Application settings**（应用程序设置）部分的右下角，选择 **Deploy**（部署）。部署完成后，Lambda 函数将显示在 Lambda 控制台中的 **Resource**（资源）部分。

    该应用程序已部署到 Lambda，其名称带有前缀 **sserverlessrepo-**，表示该应用程序是从 AWS Serverless Application Repository中部署的。选择该应用程序会将您带到**资源**页面，该页面中列出了已部署的应用程序的每个资源。这些资源包括允许在数据目录和 Hive 元数据仓之间进行通信的 Lambda 函数、 AWS Glue 连接以及数据库联合所需的其他资源。

1. 

**在数据目录中创建数据库。**

   创建与 Hive 元存储的连接后，可以在数据目录中创建指向外部 Hive 元存储数据库的联合数据库。您需要在数据目录中为要连接到数据目录的每个 Hive 元存储数据库创建相应的数据库。

------
#### [ 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 控制台或 AWS CLI查看 Hive 元存储中表的列表。

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

   1. 从**共享数据库**选项卡中选择数据库名称。

   1. 在**数据库**页面上，选择**查看表**。

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

   以下示例说明如何检索连接定义、数据库名称以及数据库中的部分或全部表。将数据目录的 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 查询它们的详细说明。我们还介绍了一个跨账户共享使用案例，其中生产者账户 A 中的 Lake Formation 主体使用 LF 标签与使用者账户 B 共享联合 Hive 数据库和表。
+ [使用权限查询你的 Apache Hive 元数据仓库 AWS Lake Formation](https://aws.amazon.com/blogs/big-data/query-your-apache-hive-metastore-with-aws-lake-formation-permissions/)