

# 与 Amazon S3 表类数据存储服务集成
<a name="glue-federation-s3tables"></a>

利用 AWS Glue Data Catalog 与 Amazon S3 表类数据存储服务的集成，您可以使用单个目录发现、查询 Amazon S3 数据湖中的数据以及将 S3 表类数据存储服务与这些数据联接。当您将 S3 表类数据存储服务与 Data Catalog 集成时，该服务会创建一个联合目录结构来将 S3 表类数据存储服务资源映射到 AWS Glue 目录对象：
+ S3 表类数据存储服务存储桶成为 Data Catalog 中的目录
+ S3 命名空间变为 AWS Glue 数据库
+ S3 表变为 AWS Glue 表

## 访问控制
<a name="s3-tables-access-controls"></a>

Data Catalog 对 S3 表类数据存储服务集成支持两种访问控制模式：
+ **IAM 访问控制**：使用 IAM 策略控制对 S3 表类数据存储服务和 Data Catalog 的访问。在这种方法中，您需要对 S3 表类数据存储服务资源和 Data Catalog 对象拥有 IAM 权限才能访问资源。
+ **AWS Lake Formation 访问控制**：除了 AWS Glue IAM 权限外，还使用 AWS Lake Formation 授权通过 Data Catalog 控制对 S3 表类数据存储服务的访问。在此模式下，主体需要 IAM 权限才能与 Data Catalog 交互，AWS Lake Formation 授权确定主体可以访问哪些目录资源（数据库、表、列、行）。此模式支持粗粒度访问控制（数据库级和表级授权）和精细访问控制（列级和行级安全）。配置了注册角色并启用凭证售卖后，主体不需要 S3 表类数据存储服务 IAM 权限，因为 AWS Lake Formation 使用注册角色代表主体售卖凭证。AWS Lake Formation 访问控制还支持第三方分析引擎的凭证售卖。有关更多信息，请参阅《AWS Lake Formation 开发人员指南》**中的 [Creating an S3 Tables catalog](https://docs.aws.amazon.com/lake-formation/latest/dg/create-s3-tables-catalog.html)。

您可以根据要求变化在不同的访问控制模式之间进行迁移。

## 自动挂载的目录层次结构
<a name="s3-tables-catalog-hierarchy"></a>

当您使用 Amazon S3 管理控制台将 S3 表类数据存储服务与 Data Catalog 集成时，控制台会在该 AWS 区域您的账户中的 Data Catalog 中创建名为 `s3tablescatalog` 的联合目录。此联合目录充当该账户和区域中所有现有和未来 S3 表存储桶的父目录。该集成按以下层次结构映射 Amazon S3 表存储桶资源：
+ **联合目录**：`s3tablescatalog`（自动创建）
+ **子目录**：每个 S3 表存储桶变为 `s3tablescatalog` 下的子目录
+ **数据库**：表存储桶中的每个 S3 命名空间变为数据库
+ **表**：命名空间中的每个 S3 表变为一个表

例如，如果您有名为“analytics-bucket”的 S3 表存储桶，其命名空间为“sales”，其中包含表“transactions”，则 Data Catalog 中的完整路径将是：`s3tablescatalog/analytics-bucket/sales/transactions`

此由四部分组成的分层结构适用于 S3 表类数据存储服务和 Data Catalog 位于同一 AWS 账户中的同一账户方案。对于跨账户方案，您可以在 Data Catalog 中手动挂载单个 S3 表存储桶，这将创建一个由三部分组成的层次结构。

## 支持的区域：
<a name="s3-tables-supported-regions"></a>

以下 AWS 区域提供 S3 表类数据存储服务与 Data Catalog 的集成：


| 区域代码 |  区域名称 | 
| --- | --- | 
| us-east-1 | 美国东部（弗吉尼亚州北部） | 
| us-east-2 | 美国东部（俄亥俄州） | 
| us-west-1 | 美国西部（北加利福尼亚） | 
| us-west-2 | 美国西部（俄勒冈州） | 
| af-south-1 | 非洲（开普敦） | 
| ap-east-1 | 亚太地区（香港） | 
| ap-east-2 | 亚太地区（台北） | 
| ap-northeast-1 | 亚太地区（东京） | 
| ap-northeast-2 | 亚太地区（首尔） | 
| ap-northeast-3 | 亚太地区（大阪） | 
| ap-south-1 | 亚太地区（孟买） | 
| ap-south-2 | 亚太地区（海得拉巴） | 
| ap-southeast-1 | 亚太地区（新加坡） | 
| ap-southeast-2 | 亚太地区（悉尼） | 
| ap-southeast-3 | 亚太地区（雅加达） | 
| ap-southeast-4 | 亚太地区（墨尔本） | 
| ap-southeast-5 | 亚太地区（马来西亚） | 
| ap-southeast-6 | 亚太地区（新西兰） | 
| ap-southeast-7 | 亚太地区（泰国） | 
| ca-central-1 | 加拿大（中部） | 
| ca-west-1 | 加拿大西部（卡尔加里） | 
| eu-central-1 | 欧洲地区（法兰克福） | 
| eu-central-2 | 欧洲（苏黎世） | 
| eu-north-1 | 欧洲地区（斯德哥尔摩） | 
| eu-south-1 | 欧洲地区（米兰） | 
| eu-south-2 | 欧洲（西班牙） | 
| eu-west-1 | 欧洲地区（爱尔兰） | 
| eu-west-2 | 欧洲地区（伦敦） | 
| eu-west-3 | 欧洲地区（巴黎） | 
| il-central-1 | 以色列（特拉维夫） | 
| mx-central-1 | 墨西哥（中部） | 
| sa-east-1 | 南美洲（圣保罗） | 

**Topics**
+ [访问控制](#s3-tables-access-controls)
+ [自动挂载的目录层次结构](#s3-tables-catalog-hierarchy)
+ [支持的区域：](#s3-tables-supported-regions)
+ [先决条件](s3tables-catalog-prerequisites.md)
+ [启用 S3 表类数据存储服务与 Data Catalog 的集成](enable-s3-tables-catalog-integration.md)
+ [向 S3 表类数据存储服务目录添加数据库和表](create-databases-tables-s3-catalog.md)
+ [共享 S3 表类数据存储服务目录对象](share-s3-tables-catalog.md)
+ [管理 S3 表类数据存储服务集成](manage-s3-tables-catalog-integration.md)

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

在为 AWS Glue Data Catalog 中的 S3 表类数据存储服务创建联合目录之前，请确保您的 IAM 主体（用户或角色）具有所需的权限。

## 所需的 IAM 权限
<a name="s3tables-required-iam-permissions"></a>

IAM 主体需要以下权限才能启用 S3 表类数据存储服务集成：

**AWS Glue 权限**：
+ `glue:CreateCatalog`：创建 `s3tablescatalog` 联合目录所必需的
+ `glue:GetCatalog`：查看目录详细信息所必需的
+ `glue:GetDatabase`：以数据库形式查看 S3 命名空间所必需的
+ `glue:GetTable`：查看 S3 表类数据存储服务所必需的
+ `glue:passConnection`：授予调用主体将 `aws:s3tables` 连接委托给 AWS Glue 服务的权限

**S3 表类数据存储服务权限**（用于 IAM 访问控制）：
+ `s3tables:CreateTableBucket`
+ `s3tables:GetTableBucket`
+ `s3tables:CreateNamespace`
+ `s3tables:GetNamespace`
+ `s3tables:ListNamespaces`
+ `s3tables:CreateTable`
+ `s3tables:GetTable`
+ `s3tables:ListTables`
+ `s3tables:UpdateTableMetadataLocation`
+ `s3tables:GetTableMetadataLocation`
+ `s3tables:GetTableData`
+ `s3tables:PutTableData`

## IAM 策略示例
<a name="s3tables-iam-policy-example"></a>

以下 IAM 策略提供了在 IAM 模式下启用 S3 表类数据存储服务与 Data Catalog 的集成所需的最低权限：

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "GlueDataCatalogPermissions",
      "Effect": "Allow",
      "Action": [
        "glue:CreateCatalog",
        "glue:GetCatalog",
        "glue:GetDatabase",
        "glue:GetTable"
      ],
      "Resource": [
        "arn:aws:glue:region:account-id:catalog/s3tablescatalog",
        "arn:aws:glue:region:account-id:database/s3tablescatalog/*/*",
        "arn:aws:glue:region:account-id:table/s3tablescatalog/*/*/*"
      ]
    },
    {
      "Sid": "S3TablesDataAccessPermissions",
      "Effect": "Allow",
      "Action": [
        "s3tables:GetTableBucket",
        "s3tables:GetNamespace",
        "s3tables:GetTable",
        "s3tables:GetTableMetadataLocation",
        "s3tables:GetTableData"
      ],
      "Resource": [
        "arn:aws:s3tables:region:account-id:bucket/*",
        "arn:aws:s3tables:region:account-id:bucket/*/table/*"
      ]
    }
  ]
}
```

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

您可以使用 Amazon S3 管理控制台或 AWS CLI 启用 S3 表类数据存储服务与 AWS Glue Data Catalog 的集成。使用控制台启用集成时，AWS 会创建名为 `s3tablescatalog` 的联合目录，其会自动发现并挂载您的 AWS 账户和区域中的所有 S3 表存储桶。

## 使用 Amazon S3 管理控制台启用 S3 表类数据存储服务集成
<a name="enable-s3-tables-console"></a>

1. 通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 在左侧导航窗格中，选择**表存储桶**。

1. 选择**创建表存储桶**。

1. 输入**表存储桶名称**，并确保选中**启用集成**复选框。

1. 选择**创建表存储桶**。

Amazon S3 会自动在该区域中集成您的表存储桶。首次在任何区域中集成表存储桶时，Amazon S3 都会在该区域的 Data Catalog 中创建 `s3tablescatalog`。

创建目录后，您的账户和区域中的所有 S3 表存储桶都会自动作为子目录挂载。您可以通过导航到 Data Catalog 中的目录来查看数据库（命名空间）和表。

## 使用 AWS CLI 启用 S3 表类数据存储服务集成
<a name="enable-s3-tables-cli"></a>

使用 `s3tablescatalog` 命令创建 `glue create-catalog` 目录。

```
aws glue create-catalog \
  --name "s3tablescatalog" \
  --catalog-input '{
    "Description": "Federated catalog for S3 Tables",
    "FederatedCatalog": {
      "Identifier": "arn:aws:s3tables:region:account-id:bucket/*",
      "ConnectionName": "aws:s3tables"
    },
    "CreateDatabaseDefaultPermissions": [{
      "Principal": {
        "DataLakePrincipalIdentifier": "IAM_ALLOWED_PRINCIPALS"
      },
      "Permissions": ["ALL"]
    }],
    "CreateTableDefaultPermissions": [{
      "Principal": {
        "DataLakePrincipalIdentifier": "IAM_ALLOWED_PRINCIPALS"
      },
      "Permissions": ["ALL"]
    }]
  }'
```

将 *region* 替换为您的 AWS 区域，并将 *account-id* 替换为您的 AWS 账户 ID。

## 验证集成
<a name="verify-s3-tables-integration"></a>

创建目录后，您可以通过列出子目录来验证是否已挂载 S3 表存储桶：

```
aws glue get-catalogs \
  --parent-catalog-id s3tablescatalog
```

# 向 S3 表类数据存储服务目录添加数据库和表
<a name="create-databases-tables-s3-catalog"></a>

确保您拥有在您所在区域的 Data Catalog 中列出和创建目录、数据库和表所需的权限。确保在您的 AWS 账户和区域中启用 S3 表类数据存储服务集成。

## 向 S3 表类数据存储服务目录添加数据库
<a name="add-database-s3-tables-catalog"></a>

### 添加数据库（控制台）
<a name="add-database-s3-tables-console"></a>

1. 打开 AWS Glue 控制台，地址：[https://console.aws.amazon.com/glue/home](https://console.aws.amazon.com/glue/home)。

1. 在左侧导航窗格中，选择**数据库**。

1. 选择 **添加数据库**。

1. 选择 **S3 表类数据存储服务联合目录中的 Glue 数据库**。

1. 输入数据库的唯一名称。

1. 选择与 S3 表类数据存储服务中的表存储桶对应的目标目录。

1. 选择 **Create Database**（创建数据库）。

### 添加数据库 (AWS CLI)
<a name="add-database-s3-tables-cli"></a>

```
aws glue create-database \
  --region region \
  --catalog-id "account-id:s3tablescatalog/my-catalog" \
  --database-input '{"Name": "my-database"}'
```

## 向 S3 表类数据存储服务目录添加表
<a name="add-table-s3-tables-catalog"></a>

### 添加表（控制台）
<a name="add-table-s3-tables-console"></a>

1. 打开 AWS Glue 控制台，地址：[https://console.aws.amazon.com/glue/home](https://console.aws.amazon.com/glue/home)。

1. 在左侧导航窗格中，选择 **表**。

1. 在目录下拉列表中选择相应的 S3 表类数据存储服务目录。

1. 选择**添加表**。

1. 输入表的唯一名称。

1. 确认在目录下拉列表中选择了正确的 S3 表类数据存储服务目录。

1. 在数据库下拉列表中选择数据库。

1. 通过输入 JSON 或单独添加每列来输入表架构。

1. 选择**创建表**。

### 添加表 (AWS CLI)
<a name="add-table-s3-tables-cli"></a>

```
aws glue create-table \
  --region region \
  --catalog-id "account-id:s3tablescatalog/my-catalog" \
  --database-name "my-database" \
  --table-input '{
    "Name": "my-table",
    "Parameters": {
      "classification": "",
      "format": "ICEBERG"
    },
    "StorageDescriptor": {
      "Columns": [
        {"Name": "id", "Type": "int", "Parameters": {}},
        {"Name": "val", "Type": "string", "Parameters": {}}
      ]
    }
  }'
```

# 共享 S3 表类数据存储服务目录对象
<a name="share-s3-tables-catalog"></a>

使用 IAM 访问控制时，您可以使用用于同一账户共享的 AWS Glue 资源链接与其他用户共享 S3 表类数据存储服务目录对象。对于跨账户共享，您可以与其他 AWS 账户共享 S3 表存储桶，收件人账户中的 IAM 角色或用户可以使用共享的表存储桶创建 AWS Glue 目录对象。

## 使用资源链接在同一账户内共享
<a name="share-s3-tables-resource-links"></a>

利用资源链接可以创建对 AWS Glue 默认目录中出现的 `s3tablescatalog` 中 AWS Glue 数据库和表的引用。这对于组织数据访问或创建表的逻辑分组很有用。

### 创建资源链接（控制台）
<a name="share-s3-tables-resource-link-console"></a>

1. 通过 [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) 打开 AWS Glue 控制台。

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

1. 在**目录**列表中，选择 **s3tablescatalog**。

1. 从 `s3tablescatalog` 中选择要共享的表。

1. 选择**操作**，然后选择**创建资源链接**。

1. 对于**资源链接名称**，输入资源链接的名称。

1. 对于**目标数据库**，选择要创建资源链接的数据库。

1. （可选）对于**描述**，输入描述。

1. 选择**创建**。

资源链接出现在目标数据库中，并指向 `s3tablescatalog` 中的原始表。

### 创建资源链接 (AWS CLI)
<a name="share-s3-tables-resource-link-cli"></a>

创建数据库资源链接：

```
aws glue create-database \
  --database-name "my-database-resource-link" \
  --database-input '{
    "Name": "sales_data_link",
    "TargetDatabase": {
      "CatalogId": "account-id:s3tablescatalog/analytics-bucket",
      "DatabaseName": "sales"
    }
  }'
```

创建表资源链接：

```
aws glue create-table \
  --table-name "my-table-resource-link" \
  --table-input '{
    "Name": "sales_data_link",
    "TargetTable": {
      "CatalogId": "account-id:s3tablescatalog/analytics-bucket",
      "DatabaseName": "sales",
      "Name": "transactions"
    }
  }'
```

# 管理 S3 表类数据存储服务集成
<a name="manage-s3-tables-catalog-integration"></a>

## 启用了 AWS Lake Formation
<a name="manage-s3-tables-enable-lf"></a>

当您想要扩展数据治理要求时，可以为 S3 表类数据存储服务目录启用 AWS Lake Formation。AWS Lake Formation 提供数据库式授权来管理精细访问权限，使用基于标签的访问扩展权限，以及根据用户属性（例如与 S3 表类数据存储服务中表的组关联）授予权限。

转到 AWS Lake Formation 管理控制台，在 AWS Glue 中为 S3 表类数据存储服务目录启用 AWS Lake Formation。有关更多信息，请参阅《AWS Lake Formation 开发人员指南》**中的 [Creating an S3 Tables catalog](https://docs.aws.amazon.com/lake-formation/latest/dg/create-s3-tables-catalog.html)。

## 删除 S3 表类数据存储服务集成
<a name="manage-s3-tables-delete-integration"></a>

您可以通过删除 Data Catalog 中的目录集成来删除 S3 表类数据存储服务集成。此操作仅删除 Data Catalog 中的元数据，而不删除 S3 表类数据存储服务中的资源。

确保您具备列出、编辑和删除 AWS Glue 中的目录对象所需的权限。

### 删除集成（控制台）
<a name="delete-s3-tables-console"></a>

1. 打开 AWS Glue 控制台，地址：[https://console.aws.amazon.com/glue/home](https://console.aws.amazon.com/glue/home)。

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

1. 在**目录**列表中，选择 **s3tablescatalog**。

1. 选择**删除**。

1. 确认删除目录也会删除 Data Catalog 中所有关联的目录对象。

1. 选择**删除**。

### 删除集成 (AWS CLI)
<a name="delete-s3-tables-cli"></a>

```
aws glue delete-catalog \
  --region region \
  --catalog-id "s3tablescatalog"
```