使用 AWS GlueIceberg REST 端点访问 Amazon S3 表 - Amazon Simple Storage Service

使用 AWS GlueIceberg REST 端点访问 Amazon S3 表

将 S3 表存储桶与 AWS Glue Data Catalog 集成后,可以使用 AWS Glue Iceberg REST 端点从 Apache Iceberg 兼容的客户端(例如 PyIceberg 或 Spark)连接到您的 S3 表。AWS Glue Iceberg REST 端点实现了 Iceberg REST Catalog Open API specification,该规范提供了用于与 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

为客户端创建 IAM 角色

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

  1. 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

  2. 在左侧导航窗格中,选择 Policies(策略)

  3. 选择创建策略,并在策略编辑器中选择 JSON

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

    { "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:<region>:<account-id>:catalog", "arn:aws:glue:<region>:<account-id>:catalog/s3tablescatalog", "arn:aws:glue:<region>:<account-id>:catalog/s3tablescatalog/<s3_table_bucket_name>", "arn:aws:glue:<region>:<account-id>:table/s3tablescatalog/<s3_table_bucket_name>/<namespace>/*", "arn:aws:glue:<region>:<account-id>:database/s3tablescatalog/<s3_table_bucket_name>/<namespace>" ] }, { "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess" ], "Resource": "*" } ] }
  5. 创建策略后,创建一个 IAM 角色,然后选择自定义信任策略作为可信实体类型

  6. 自定义信任策略输入以下内容。

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

在 Lake Formation 中定义访问权限

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

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

支持外部引擎访问表数据

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

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

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

  2. 在导航窗格中的管理下,选择应用程序集成设置

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

授予 Lake Formation 对表资源的权限

接下来,向您为 Iceberg 兼容的客户端创建的 IAM 角色授予 Lake Formation 权限。这些权限将支持该角色在您的命名空间中创建和管理表。您需要同时提供数据库级和表级权限:

授予数据库权限

  1. 通过 https://console.aws.amazon.com/lakeformation/ 打开 AWS Lake Formation 控制台,然后以数据湖管理员身份登录。

  2. 在导航窗格中,选择数据权限,然后选择授予

  3. 授予权限页面的主体下,选择 IAM 用户和角色,然后选择您为访问 AWS Glue Iceberg REST endpoint创建的 IAM 角色。

  4. LF 标签或目录资源下,选择命名 Data Catalog 资源

  5. 对于目录,选择为表存储桶创建的 AWS Glue 数据目录。例如 <accoundID>:s3tablescatalog/<table-bucket-name>

  6. 对于数据库,选择 mynamespace

  7. 对于表权限,选择创建表描述

  8. 选择授权

授予表权限

  1. 通过 https://console.aws.amazon.com/lakeformation/ 打开 AWS Lake Formation 控制台,然后以数据湖管理员身份登录。

  2. 在导航窗格中,选择数据权限,然后选择授予

  3. 授予权限页面的主体下,选择 IAM 用户和角色,然后选择您为访问 AWS Glue Iceberg REST endpoint创建的 IAM 角色。

  4. LF 标签或目录资源下,选择命名 Data Catalog 资源

  5. 对于目录,选择为表存储桶创建的 AWS Glue 数据目录。例如 <accoundID>:s3tablescatalog/<table-bucket-name>

  6. 对于数据库,选择您创建的 S3 表存储桶命名空间。

  7. 对于,请选择 ALL_TABLES

  8. 对于表权限,选择超级

  9. 选择授权

设置环境以使用端点

设置 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 端点连接到数据目录