

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

# 使用适用于亚马逊 EMR Spark 的 Lake Formation 进行基于 S3 路径的访问
<a name="lake-formation-path-based-credential-vending"></a>

在 Amazon EMR 7.13.0 及更高版本中，您可以使用[AWS Lake Formation 访问权限插件](https://docs.aws.amazon.com/lake-formation/latest/dg/accessing-s3-locations.html)获取在 Lake Formation 中注册的 S3 路径的临时证书。除了Full Table Access (FTA) 提供的基于表名的现有 Formation-vended 凭证自动售货之外，这还允许直接引用 S3 路径的 Spark 查询使用 Lake 凭证。

Lake Formation Access Grants 插件与 Spark 中的 S3A 文件系统集成。启用后，S3A 将使用该插件调用 Lake Formation [GetTemporaryDataLocationCredentials](https://docs.aws.amazon.com/lake-formation/latest/APIReference/API_GetTemporaryDataLocationCredentials.html)API 来获取属于 Lake Formation-registered 表的 S3 路径的临时证书。

当您的 Spark 作业通过直接引用 S3 路径（例如`spark.read.parquet("s3a://my-bucket/my-table/")`）而不是使用表名来读取或写入数据时，此插件非常有用。该插件还支持在 Lake Formation 访问被拒绝时可选回退到 S3 访问授权或 IAM 角色证书。

## 与全表访问权限 (FTA) 的关系
<a name="lake-formation-path-based-relationship-fta"></a>

现有的 Full Table Access 功能使用 [GetTemporaryGlueTableCredentials](https://docs.aws.amazon.com/lake-formation/latest/APIReference/API_GetTemporaryGlueTableCredentials.html)API，它根据表名提供凭证。Lake Formation Access Grants 插件使用 [GetTemporaryDataLocationCredentials](https://docs.aws.amazon.com/lake-formation/latest/APIReference/API_GetTemporaryDataLocationCredentials.html)API，它基于 S3 路径出售凭证。

您可以同时使用这两个功能。当两者都启用时，FTA 凭证优先用于表名查询，而插件则处理直接的 S3 路径查询。

## 先决条件
<a name="lake-formation-path-based-prerequisites"></a>

在使用 Lake Formation Access Grants 插件之前，请完成以下步骤：
+ 为您的 Amazon EMR 环境设置全表访问权限 (FTA)。有关说明，请参阅。
+ 在 Lake Formation 控制台中，使用所有者账户注册 S3 路径：

  1. 导航到**数据湖位置**。

  1. 选择位置并启用 “向**所有者帐户注册 S3 路径**”。
+ 向运行时角色授予对表的相应的 Lake Formation 权限：
  + 要读取表数据，请向运行时角色授予对表的完全`SELECT`权限。
  + 要修改表数据，请授予运行时角色对表的`SUPER`权限。

## 启用 Lake Formation 访问权限授予插件
<a name="lake-formation-path-based-enable"></a>

要启用该插件，请在 Spark 会话中设置以下 S3A 配置属性：


**Lake Formation 访问权限授予插件配置属性**  

| 属性 | 默认值 | 说明 | 
| --- | --- | --- | 
| fs.s3a.lakeformation.access.grants.enabled | FALSE | 启用 Lake Formation 访问权限授予插件。 | 
| fs.s3a.lakeformation.access.grants.fallback.to.iam | FALSE | 如果 Lake Formation 拒绝访问，则启用回退到 S3 访问权限授予或 IAM 角色证书。 | 

## 回退行为
<a name="lake-formation-path-based-fallback"></a>

设置`fs.s3a.lakeformation.access.grants.fallback.to.iam`为时`true`，如果 Lake Formation 拒绝访问，则插件将使用备用链。这在某些 S3 路径在 Lake Formation 中注册而其他路径通过 S3 访问授权或 IAM 策略进行管理的场景中非常有用。

启用后备功能后，插件会尝试按以下顺序获取凭证：

1. **Lake Formation** — 插件调用[GetTemporaryDataLocationCredentials](https://docs.aws.amazon.com/lake-formation/latest/APIReference/API_GetTemporaryDataLocationCredentials.html)。如果 Lake Formation 授予访问权限，则插件会返回这些凭证。

1. **S3 访问授权** — 如果 Lake Formation 拒绝访问，则该插件会检查 S3 访问权限是否可以为请求的路径提供凭证。如果 S3 Access Grants 实例覆盖了路径，并且调用方拥有匹配的授权，则插件将使用这些凭证。

1. **IAM 角色** — 如果 Lake Formation 和 S3 Access Grants 都拒绝访问，则插件将回退到附加到任务的 IAM 角色证书。

## 注意事项和限制
<a name="lake-formation-path-based-considerations"></a>
+ 该插件支持 Apache Hive、Apache Hudi 和 Delta Lake 表格格式。目前不支持 Apache Iceberg。
+ Amazon EMR Spark Fine-Grained 访问控制 (FGAC) 模式目前不支持该插件。
+ Path-based 凭证自动售卖需要在表与其 S3 在 G AWS lue 数据目录中的位置之间建立 1:1 的映射。