

# 使用 AWS Glue Iceberg REST 端点访问 Amazon S3 表
<a name="s3-tables-integrating-glue-endpoint"></a>

将 S3 表存储桶与 AWS Glue Data Catalog 集成后，可以使用 AWS Glue Iceberg REST 端点从 Apache Iceberg 兼容的客户端（例如 PyIceberg 或 Spark）连接到您的 S3 表。AWS Glue Iceberg REST 端点实现了 [Iceberg REST Catalog Open API specification](https://github.com/apache/iceberg/blob/main/open-api/rest-catalog-open-api.yaml)，该规范提供了用于与 Iceberg 表进行交互的标准化接口。要使用端点访问 S3 表，您需要通过 IAM 策略和 AWS Lake Formation 授权的组合来配置权限。以下各节介绍如何设置访问权限，包括创建必要的 IAM 角色、定义所需的策略以及为数据库和表级访问建立 Lake Formation 权限。

有关使用 PyIceberg 的端到端演练，请参阅 [Access data in Amazon S3 Tables using PyIceberg through the AWS Glue Iceberg REST endpoint](https://aws.amazon.com/blogs/storage/access-data-in-amazon-s3-tables-using-pyiceberg-through-the-aws-glue-iceberg-rest-endpoint/)。

**先决条件**
+ [将表存储桶与 AWS 分析服务集成](s3-tables-integrating-aws.md)
+ [创建表命名空间](s3-tables-namespace-create.md)
+ [可以访问数据湖管理员账户](https://docs.aws.amazon.com//lake-formation/latest/dg/initial-lf-config.html#create-data-lake-admin)

## 为客户端创建 IAM 角色
<a name="glue-endpoint-create-iam-role"></a>

要通过 AWS Glue 端点访问表，您需要创建一个 IAM 角色，该角色拥有执行 AWS Glue 和 Lake Formation 操作的权限。此过程介绍如何创建此角色并配置其权限。

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

1. 在左侧导航窗格中，选择 **Policies（策略）**。

1. 选择**创建策略**，并在策略编辑器中选择 **JSON**。

1. 添加以下内联策略，该策略授予访问 AWS Glue 和 Lake Formation 操作的权限：

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "VisualEditor0",
               "Effect": "Allow",
               "Action": [
                   "glue:GetCatalog",
                   "glue:GetDatabase",
                   "glue:GetDatabases",
                   "glue:GetTable",
                   "glue:GetTables",
                   "glue:CreateTable",
                   "glue:UpdateTable"
               ],
               "Resource": [
                   "arn:aws:glue:us-east-1:111122223333:catalog",
                   "arn:aws:glue:us-east-1:111122223333:catalog/s3tablescatalog",
                   "arn:aws:glue:us-east-1:111122223333:catalog/s3tablescatalog/amzn-s3-demo-table-bucket",
                   "arn:aws:glue:us-east-1:111122223333:table/s3tablescatalog/amzn-s3-demo-table-bucket/<namespace>/*",
                   "arn:aws:glue:us-east-1:111122223333:database/s3tablescatalog/amzn-s3-demo-table-bucket/<namespace>"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "lakeformation:GetDataAccess"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

1. 创建策略后，创建一个 IAM 角色，然后选择**自定义信任策略**作为**可信实体类型**。

1. 为**自定义信任策略**输入以下内容。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::111122223333:role/Admin_role"
               },
               "Action": "sts:AssumeRole",
               "Condition": {}
           }
       ]
   }
   ```

------

## 在 Lake Formation 中定义访问权限
<a name="define-access-lakeformation"></a>

Lake Formation 为数据湖表提供精细的访问控制。当您将 S3 存储桶与 AWS Glue Data Catalog 集成时，表会自动在 Lake Formation 中注册为资源。要访问这些表，除了 IAM 策略权限外，您还必须向您的 IAM 身份授予特定的 Lake Formation 权限。

以下步骤说明了如何应用 Lake Formation 访问控制，来支持 Iceberg 客户端连接到表。您必须以数据湖管理员身份登录，才能应用这些权限。

### 支持外部引擎访问表数据
<a name="allow-external-engines"></a>

在 Lake Formation 中，必须为外部引擎启用完全表访问权限，才能访问数据。这样，第三方应用程序在使用对所请求的表具有完全权限的 IAM 角色时，就可以从 Lake Formation 获取临时凭证。

通过 [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) 打开 Lake Formation 控制台。

1. 通过 [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) 打开 Lake Formation 控制台，并以数据湖管理员身份登录。

1. 在导航窗格中的**管理**下，选择**应用程序集成设置**。

1. 选择**支持外部引擎以完全表访问权限访问 Amazon S3 位置的数据**。然后选择**保存**。

### 授予 Lake Formation 对表资源的权限
<a name="grant-lakeformation-permissions"></a>

接下来，向您为 Iceberg 兼容的客户端创建的 IAM 角色授予 Lake Formation 权限。这些权限将支持该角色在您的命名空间中创建和管理表。您需要同时提供数据库级和表级权限。有关更多信息，请参阅 [授予对表或数据库的 Lake Formation 权限](grant-permissions-tables.md#grant-lf-table)。

## 设置环境以使用端点
<a name="setup-client-glue-irc"></a>

设置 IAM 角色（该角色具有访问表所需的权限）后，可以使用以下命令，通过您的角色配置 AWS CLI，使用该角色从本地计算机运行 Iceberg 客户端：

```
aws sts assume-role --role-arn "arn:aws:iam::<accountid>:role/<glue-irc-role>" --role-session-name <glue-irc-role>
```

要通过 AWS Glue REST 端点访问表，您需要在 Iceberg 兼容的客户端中初始化目录。此初始化要求指定自定义属性，包括 sigv4 属性、端点 URI 和仓库位置。按如下方式指定这些属性：
+ Sigv4 属性：必须启用 Sigv4，签名名称为 `glue`
+ 仓库位置：这是表存储桶，按以下格式指定：`<accountid>:s3tablescatalog/<table-bucket-name>`
+ 端点 URI：有关区域特定的端点，请参阅 AWS Glue 服务端点参考指南。

下面的示例说明如何初始化 pyIceberg 目录。

```
rest_catalog = load_catalog(
        s3tablescatalog,
**{
"type": "rest",
"warehouse": "<accountid>:s3tablescatalog/<table-bucket-name>",
"uri": "https://glue.<region>.amazonaws.com/iceberg",
"rest.sigv4-enabled": "true",
"rest.signing-name": "glue",
"rest.signing-region": region
        }
)
```

有关 AWS Glue Iceberg REST 端点实现的更多信息，请参阅《AWS Glue 用户指南》**中的[使用 AWS GlueIceberg REST 端点连接到数据目录](https://docs.aws.amazon.com/glue/latest/dg/connect-glu-iceberg-rest.html)。