本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Lake Formation for Amazon EMR Spark 进行基于 S3
在 Amazon EMR 版本 7.13.0 及更高版本中,您可以使用 Amazon Lake Formation 访问授权插件为在 Lake Formation 注册的 S3 路径获取临时证书。除了全表访问权限 (FTA) 提供的基于表名的现有 Formation-vended 凭证销售外,这使得直接引用 S3 路径的 Spark 查询能够使用 Lake 证书。有关更多详细信息,请参阅访问 Amazon S3 位置。
Lake Formation Access Grants 插件与 Spark 中的 S3A 文件系统集成在一起。启用后,S3A 使用该插件调用 Lake Form GetTemporaryDataLocationCredentials ation API 来获取属于湖表的 S3 路径的临时证书。 Formation-registered
当您的 Spark 任务通过直接引用 S3 路径(例如spark.read.parquet("s3a://my-bucket/my-table/"))而不是使用表名来读取或写入数据时,此插件很有用。该插件还支持在 Lake Formation 访问被拒绝时选择回退 S3 访问授权或 IAM 角色证书。
与全表访问权限 (FTA) 的关系
现有的 “全表访问” 功能使用 GetTemporaryGlueTableCredentials API,该API根据表名提供证书。Lake Formation 访问授权插件使用 GetTemporaryDataLocationCredentials API,该API根据 S3 路径提供证书。
您可以同时使用这两个功能。当两者都启用时,FTA 凭据优先处理表名查询,而插件则处理直接 S3 路径查询。
先决条件
在使用 Lake Formation Access Grants 插件之前,请完成以下步骤:
-
为您的亚马逊 EMR 环境设置全表访问权限 (FTA)。有关说明,请参阅配置 Lake Formation 全表访问权限。
-
在 Lake Formation 控制台中,使用所有者账户注册 S3 路径:
-
导航到数据湖位置。
-
选择位置并启用向所有者账户注册 S3 路径。
-
-
向运行时角色授予相应的 Lake Formation 表权限:
-
要读取表数据,请授予运行时角色对该表的完全
SELECT权限。 -
要修改表数据,请授予运行时角色对表的
SUPER权限。
-
启用 Lake Formation 访问授权插件
要启用该插件,请在 Spark 会话中设置以下 S3A 配置属性:
| 属性 | 默认值 | 说明 |
|---|---|---|
fs.s3a.lakeformation.access.grants.enabled |
FALSE |
启用 Lake Formation 访问权限授权插件。 |
fs.s3a.lakeformation.access.grants.fallback.to.iam |
FALSE |
如果 Lake Formation 拒绝访问,则允许回退 S3 访问权限授权或 IAM 角色证书。 |
回退行为
当设置fs.s3a.lakeformation.access.grants.fallback.to.iam为时true,如果 Lake Formation 拒绝访问,插件将使用备用链。这在某些 S3 路径向 Lake Formation 注册而其他路径通过 S3 访问授权或 IAM 策略管理的场景中很有用。
启用备用功能后,插件会尝试按以下顺序获取凭证:
-
湖泊形成 — 插件调用GetTemporaryDataLocationCredentials。如果 Lake Formation 授予访问权限,则该插件将返回这些证书。
-
S3 访问授权 — 如果 Lake Formation 拒绝访问,插件会检查 S3 访问授权是否可以为请求的路径提供证书。如果 S3 Access Grants 实例覆盖了该路径,并且调用方拥有匹配的授权,则插件将使用这些证书。
-
IAM 角色 — 如果 Lake Formation 和 S3 访问授权都拒绝访问,则该插件将退回任务所附的 IAM 角色证书。
注意事项和限制
-
该插件支持 Apache Hive、Apache Hudi 和 Delta Lake 表格格式。目前不支持 Apache Iceberg。
-
亚马逊 EMR Spark Fine-Grained 访问控制 (FGAC) 模式目前不支持该插件。
-
Path-based 凭据售卖需要在表与其 G Amazon lue 数据目录中的 S3 位置之间进行 1:1 的映射。