View a markdown version of this page

访问亚马逊 S3 地点 - AWS Lake Formation

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

访问亚马逊 S3 地点

AWS Lake Formation 允许您读取和写入在(数据目录)中注册的表的亚马逊简单存储服务 (Amazon S3) AWS Glue Data Catalog 中的基础数据文件。这为你提供了一组权限,既可以进行 SQL 查询,也可以使用现有的 Lake Formation 表授予直接访问文件。Lake Formation 将其凭证自动售货功能扩展到在数据目录中注册的亚马逊 S3 地点。当您的应用程序请求访问数据目录表底层的 Amazon S3 文件时,Lake Formation 会评估调用者的现有表级权限,如果获得授权,则会返回该表注册位置的短期、限定范围的 Amazon S3 凭证。

允许直接访问 Amazon S3 地点

要启用此功能,必须完成以下步骤。

先决条件

在启用功能标志之前,请完成以下先决条件:

  • 注册 Amazon S3 地点 — 在数据目录中对您的亚马逊 S3 位置的表进行编目,然后通过提供亚马逊 S3 存储桶所有者账户将这些表注册到 Lake Formation。当您注册某个位置时,将注册 Amazon S3 路径以及该路径下的所有文件夹。有关更多信息,请参阅 注册 Amazon S3 位置

  • 授予 Lake Formation 权限 — 使用 Lake Formation 控制台或 API 向数据科学家和应用程序授予 Lake FormationSELECT(或SUPER)表权限。如果您已经使用 Lake Formation 通过 Athena 或 Amazon EMR 等服务访问表格,则此配置已经完成。

  • 启用具有全表访问权限的应用程序集成-启用具有完整表访问权限的应用程序集成,以允许凭据自动售卖到注册的表格位置。有关更多信息,请参阅 集成应用程序以获取完整表访问权限

启用功能标志

在支持的引擎上启用该fs.s3a.lakeformation.access.grants.enabled标志:

fs.s3a.lakeformation.access.grants.enabled = true
  • 亚马逊 EC2 上的亚马逊 EMR — EMR 7.13 或更高版本

  • EKS 上的 Amazon EMR — EM R 7.13 或更高版本

  • 亚马逊 EMR Serverless — EMR 7.13 或更高版本

配置完成后,您可以使用标准 API 立即从 EMR 读取或写入数据文件。

有关亚马逊 EMR 集成的更多信息,请参阅亚马逊 EMR 管理指南中的基于 Lake For m ation 路径的凭证自动售卖。

工作原理

Formation-based Amazon S3 湖的位置访问遵循以下流程:

  1. 委托人或角色通过诸如 Amazon EMR Spark 任务或数据处理管道之类的服务请求访问 Amazon S3 数据文件。

  2. 与 EMR 集成的 AWS 软件开发工具包插件会拦截亚马逊 S3 请求并调用 Lake Formation API。GetTemporaryDataLocationCredentials

  3. Lake Formation 会检查 Amazon S3 路径是否与注册位置和已编目表相对应,并评估调用者对关联AWS Glue表的权限。

  4. 如果调用者拥有SELECTSUPER权限访问相应表,则Lake Formation将提供限定在该 Amazon S3 位置的临时证书。 SELECT授予读取凭证;SUPER授予读写凭证。

  5. 该插件使用这些凭证来完成 Amazon S3 请求,而 Amazon S3 将数据提供给应用程序。

  6. 所有凭证自动售卖操作都会记录到 CloudTrail,从而为数据访问提供审计跟踪。

此过程对您来说是透明的,您只需将现有的 Lake Formation 权限与基于文件的 API 一起使用即可。

# Read raw data (Lake Formation-based S3 Location access) raw_df = spark.read.json("s3://finance-datalake/raw/transactions/dt=2024-03-21/") # Read governed data (Lake Formation-based S3 Location access) transactions_df = spark.read.parquet("s3://data-lake/transactions/year=2026/") # Write processed data (Lake Formation-based S3 Location access) processed_df.write \ .mode("append") \ .partitionBy("transaction_date") \ .parquet("s3://finance-datalake/processed/transactions/") print("ETL complete. Records written:", processed_df.count())
权限要求

目前,该功能仅在调用者拥有完整表访问权限时才会出售凭据,这意味着SELECT在没有行或列筛选器的所有列上。如果表应用了行级或列级筛选条件,则来电者必须继续使用可信引擎,例如可以强制执行这些筛选条件的 Athena、Amazon EMR 或 Amazon Redshift。AWS Glue这样可以确保安全边界保持一致。

Cross-account 访问

Lake Formation 通过跨账户共享功能简化了对亚马逊 S3 营业地点的访问。当您通过 Lake Formation 与其他 AWS 账户共享表时,收件人可以使用其 Lake Formation 权限访问底层 Amazon S3 数据文件,但须遵守相同的完整表访问要求。

该功能支持 Lake Formation 的资源链接机制,用于跨账户访问。当消费者账户拥有共享表的权限时,Lake Formation 会出售仅限于注册账户的 Amazon S3 位置的证书,从而无需单独的 Amazon S3 存储桶策略或跨账户 IAM 角色即可实现跨账户数据的无缝访问。

嵌套亚马逊 S3 地点

当多个表指向同一个存储桶中的嵌套位置时,Lake Formation 会应用以下行为:

  • 访问时s3://bucket,您将获得与在存储桶级别注册的表相对应的权限。

  • 访问时s3://bucket/folder1,您将获得与在该特定路径上注册的表相对应的权限。

  • 要访问没有注册表的文件夹(例如,s3://bucket/folder2),您将从最近的父注册位置获得权限。

  • 如果在同一位置注册了多个表,Lake Formation 会因为权限冲突而返回错误。

审计与合规性

所有凭证自动售卖操作都会记录到 CloudTrail,从而为数据访问提供审计跟踪。当 Lake Formation 通过 GetTemporaryDataLocationCredentials API 出售凭证时,会 CloudTrail 记录:

  • 委托人(用户或角色)

  • Timestamp

  • Amazon S3 位置

  • 关联AWS Glue表

随后使用这些凭证进行的 Amazon S3 API 调用也将记录 CloudTrail 为 Amazon S3 数据事件,上下文将它们与 Lake Formation 权限授予相关联。这使审计员可以完全了解谁访问了哪些数据、何时访问了哪些数据,以及通过哪个权限路径访问了这些数据,所有这些都可以在一个 CloudTrail 日志流中完成。

支持 AWS 务

Lake Formation 简化了对亚马逊 S3 地点的访问,适用于:

  • 亚马逊 EC2 上的亚马逊 EMR(7.13 或更高版本)

  • EKS 上的亚马逊 EMR(EMR 7.13 或更高版本)

  • 亚马逊 EMR Serverless(EMR 7.13 或更高版本)

第三方服务的开源插件

您也可以使用 API Apache Spark 或通过提供的开源插件来集成您的或Trino应用程序 AWS。有关更多信息,请参阅上的 aws-lakeformation-accessgrants-plugin-java-v2。 GitHub

注意事项

在 Amazon S3 地点使用凭证自动售卖功能时,请注意以下注意事项:

  • 不支持跨区域出售 Amazon S3 地点的凭证。

  • 作为表格主要位置的 Amazon S3 位置支持凭证自动售卖。