亚马逊AWS官方博客
AWS Lake Formation 数据权限管控实践指南:从 EMR 集成到 BI 工具访问控制
![]() |
一、引言
在当今数据驱动的商业环境中,企业数据规模呈指数级增长,构建既能高效管理海量数据又能确保数据安全的数据湖架构已成为企业数字化转型的关键挑战。传统数据权限管控方案往往存在分散管理、权限冗余和安全隐患等问题,难以满足现代企业对数据治理的严格要求。AWS Lake Formation 作为一站式数据湖管理服务应运而生,它通过集中式权限模型和精细化访问控制,有效解决了企业在数据湖安全治理中面临的核心痛点,帮助企业快速构建安全、合规的数据湖架构。
本文将深入探讨 AWS Lake Formation 的数据权限管理功能和实践应用,重点关注:
- 基于 Lake Formation 的精细化权限控制,包括数据库、表和列级别的访问管理
- EMR 集群与 Lake Formation 的无缝集成,实现大数据分析场景下的统一权限管理
- BI 工具数据访问安全性,通过 Athena 访问数据时的权限控制方案
- IAM 与 Lake Formation 权限模型的协同工作机制
通过详细的配置步骤和实战案例,本文将帮助读者全面理解 Lake Formation 的权限管理体系,并能够在实际项目中构建安全可控的企业级数据湖方案。
![]() |
基于 Lake Formation 权限管理全景
二、启用 Lake Formation
1. Lake Formation 概述
AWS Lake Formation 是一项全托管服务,它不仅简化了数据湖的创建过程,更重要的是提供了统一的安全层,用于管理、保护和治理存储在 Amazon S3 中的数据湖资源。作为连接数据存储与分析服务的桥梁,Lake Formation 通过与 AWS Glue Data Catalog 的紧密集成,实现了对元数据和底层数据的统一权限管控。
Lake Formation 的核心价值在于其创新的权限管理模式:它突破了传统 S3 基于对象的访问控制限制,提供了更加灵活而精细的数据访问权限定义能力,包括:
- 多粒度访问控制:支持数据库、表、分区、列甚至单元格级别的精细权限管理
- 资源共享机制:可跨 AWS 账户安全共享数据资源,同时保持集中化权限管控
- 标签化权限管理:通过 LF-Tag 实现基于属性的访问控制,大规模简化权限管理
- 集中式权限模型:替代多个服务独立的权限配置,提供单一权限真实来源
在 Amazon EMR 6.7.0 及更高版本中,使用 AWS Lake Formation 能使用户能够在 Amazon S3 数据湖上应用基于 AWS Lake Formation 的数据库、表和列级权限,以执行包含使用 Amazon EMR Step API 提交的 Apache Hive 作业的各项操作,如:INSERT INTO、INSERT OVERWRITE 和 ALTER TABLE 等。此功能允许数据管理员为通过在 Amazon EMR 上运行的 Apache Hive 访问数据的客户定义和实施精细的表和列级安全。
通过与 AWS 分析生态系统的无缝集成,Lake Formation 使企业能够在保障数据安全的同时,充分释放数据的分析价值,实现”一次定义,处处应用”的权限管控体验。
2. 配置 Lake Formation
在 AWS 控制台中搜索 Lake Formation,进入管理界面。接下来我们在配置过程中介绍 Lake Formation 中的几个重要功能的概念。
1. 设置 Lake Formation 管理员
首次进入 Lake Formation 的控制台会弹出窗口让用户选择将 IAM user 或 IAM role 添加为 Data Lake Administrator,如下图所示:
![]() |
Data Lake Administrator 顾名思义,是数据湖的管理员,可以注册 Amazon S3 位置、访问数据目录、创建数据库、创建和运行工作流、向其他用户授予 Lake Formation 权限以及查看 AWS CloudTrail 日志。其拥有的 IAM 权限少于 AWS账号管理员,但足以管理数据湖。
后续也可以点击左侧 “Administrative roles and tasks” 菜单进入修改。
![]() |
2. 向 Lake Formation 注册位置
接下来我们需要向 Lake Formation 注册 Data lake locations(数据湖位置),该位置代表数据湖的物理存储位置,对应在 AWS 中存储数据湖数据的 Amazon S3 路径。Lake Formation 通过 Data location 权限管理用户对这些位置中数据的访问权限,而不依赖 S3 的访问权限。
进入 Data lake location,点击“Register location”按钮添 Amazon S3 路径,如下图所示:
![]() |
注意:在“Permission mode” 这里推荐先选择”Hybrid access mode”(混合访问模式),该种模式允许同时使用 AWS IAM 权限和自定义 Lake Formation 权限的访问模式。
“Hybrid access mode” 混合访问模式的特性可以总结为以下两点:
- 允许用户同时使用 IAM 权限和 Lake Formation 权限进行数据访问,满足不同场景下的权限需求。
- 对于已经使用 IAM 权限管理的用户来说,可以平滑过渡到 Lake Formation 的权限管理模型。
3. 应用程序集成设置
如果您不需要在列、行或单元格级别进行精细访问控制,则可以使用 Glue Data Catalog 设置表级访问控制。导航到 AWS Lake Formation 控制台,然后从边栏的 Administration (管理) 部分中选择 Application integration settings (应用程序集成设置) 菜单,勾选 Allow external engines to access data in Amazon S3 locations with full table access(允许外部引擎以完全表访问权限访问 Amazon S3 位置的数据)选项并点击 Save (保存)。
![]() |
对于需要遵守严格数据治理要求的环境,如需要对数据实施精细的访问控制(如列级、行级过滤),应当启用 Allow external engines to filter data in Amazon S3 locations registered with Lake Formation(允许外部引擎过滤在 Lake Formation 中注册的 Amazon S3 位置的数据)选项,Lake Formation 会将精细的权限(列级、行级过滤条件)传递给外部查询引擎,以支持列级和行级安全性的实施。
适用场景:这两个选项本质上是在安全控制的精细度和查询性能之间做权衡。第一个选项提供更精细的安全控制但可能影响性能,第二个选项提供更高的性能但安全控制较为宽松。根据您的数据治理要求和性能需求,可以选择适合的选项。
4. 添加数据库(可选)
如果您的 EMR 集群使用 Glue Data Catalog 管理元数据,在 Lake Formation 里可以直接看到已有的数据库,无需手动创建。
![]() |
至此,我们已经完成了 Lake Formation 的基本配置。接下来我们以 Lake Formation 管理员用户登陆,进行 Lake Formation 权限管理。
三、配置 Lake Formation 权限
1. LakeFormation 权限模型
在 AWS Lake Formation 中有两种主要类型的权限:
- 元数据(Metadata)权限 – 数据目录资源的权限(数据目录权限)。这些权限使委托人能够在 Data Catalog 中创建、读取、更新和删除元数据数据库和表
- 基础数据(Underlying data)权限 – 对 Amazon Simple Storage Service (Amazon S3) 中位置的权限,还可细分为:
- data access 权限 – 使委托人能够将数据读取和写入底层 Amazon S3 位置,即数据目录资源指向的数据。
- data location 权限 – 使委托人能够创建和更改指向特定 Amazon S3 位置的元数据数据库和表
对于这两类资源的访问控制,Lake Formation 结合使用 Lake Formation 权限和 AWS IAM 的权限。其中,Lake Formation 权限控制对数据目录资源、Amazon S3 位置以及这些位置的底层数据的访问;而 IAM 权限控制对 Lake Formation 和 AWS Glue API 和资源的访问。
当用户发出访问数据目录资源或底层数据的请求时,要使请求成功,它必须通过 IAM 和 Lake Formation 的双重权限检查。当某个用户具有在数据目录 (CREATE_TABLE) 中创建元数据表的 Lake Formation 权限,但如果没有 glue:CreateTable API 的 IAM 权限,操作将失败。
![]() |
虽然 Lake Formation 和 IAM 权限组合能够提供细粒度的访问控制,但实际应用中通常不需要在两个层面都进行精细管理。
下表总结了 Lake Formation + IAM 权限的常见管控模式,建议采用第2种模式,即只在 Lake Formation 层面进行主要控制,可以简化权限管理流程。
管控模式 | Lake Formation 权限 | IAM 权限 | 说明 |
模式 1 | Open(不做管控) | Fine-grained 细粒度 | 这是与 AWS Glue 向后兼容的默认方法。 精细意味着 IAM 策略控制对数据目录资源和单个 Amazon S3 存储桶的所有访问。 在 Lake Formation 控制台上,此方法显示为 Use only IAM access control (仅使用 IAM 访问控制) |
模式 2 | Fine-grained 细粒度 | Coarse-grained 粗粒度 | 在Lake Formation层面向各个主体(如 IAM user)授予对数据目录资源、S3 位置以及这些位置中的底层数据的有限的权限; 在 IAM 层面对单个操作和对 Amazon S3 位置的访问具有更广泛的权限。例如,粗粒度的 IAM 策略可能包含 “glue:*” 或 “glue:Create*”而不是“glue:CreateTables”,通过 Lake Formation 权限来控制委托人是否可以创建目录对象 |
2. 配置 metadata 权限
在 Lake Formation 左侧菜单找到 Permissions→Data permissions,点击 Grant,添加基于 IAM 的访问权限,选择所需的 Data catalog 的资源名称:
![]() |
3. 配置 Data locations 权限
Lake Formation Data location(数据位置)权限是 Lake Formation 数据权限的补充,用于管理创建指向特定 Amazon S3 位置的数据目录资源的能力,为数据湖中的位置提供了额外的安全层。例如,当我们为某个主体(如 IAM user) 授予 CREATE_TABLE 或 ALTER Lake Formation权限后,还可以通过授予 Data location 权限,以限制该主体可以创建或更改元数据表的位置。
接下来,我们需要为已注册到 Lake Formation 的S3 数据位置授予相应的访问权限,让 IAM User/Role 能够创建指向该位置的数据目录表或数据库。
操作方法是,在 Lake Formation 左侧菜单找到 Permissions→Data locations,点击 Grant,添加权限,选择需要赋权限的 IAM user。当我们使用 IAM Identity Center 来管理用户/组时,这里就可以选择通过 IdC 绑定用户和角色策略自动创建的 IAM Role,它一般是以 AWSReservedSSO_<PermissionSetName>_<uid> 命名。
![]() |
Lake Formation 在授予数据位置权限时并不依赖 AWS Resource Access Manager(AWS RAM)服务,因此用户无需通过接受资源共享邀请就能获取相应的数据位置权限。当授予数据位置权限时即隐性授予以下 Lake Formation 权限:
- 指向该位置的 Data Catalog 表的数据访问权限(如:SELECT、INSERT、DELETE)
- 该位置的数据位置权限(Data location permissions)
这意味着,在使用 EMR 或 Athena 访问这些 S3 存储桶中的数据时,无需再为相关 IAM 角色单独配置 S3 访问策略。
4. 查看 Lake Formation 授权
在 Data permission 页面,我们可以看到前面添加的 Metadata(Database、Table、Column 等)和 Data location 的权限列表:
![]() |
也可以通过 AWS CLI 命令行工具验证某项资源已经授予的 Lake formation 权限,例如 ws-bi-client1 已经具备:
5. 修改 Lake Formation 初始权限设定
当启用 AWS Lake Formation 时,为了保持与 AWS Glue 的向后兼容性,系统采用了特定的初始安全设置:
- 在所有现有 AWS Glue 数据目录资源上为 IAMAllowedPrincipals 组(包括 IAM 策略允许访问数据目录资源的任何 IAM 用户和角色)授予 Super 权限,这些超级权限使主体能够对授予该权限的数据库或表执行所有受 Lake Formation 支持的操作
- 为新建的 Data Catalog 数据目录资源启用 “Use only IAM access control” 设置
需要注意,这样的配置实际上导致对数据目录资源和 Amazon S3 位置的访问仅由 AWS Identity and Access Management (IAM) 策略控制,而单个 Lake Formation 权限则无效。
因此,当我们为特定 IAM 用户或者角色设置好 Lake Formation 权限后,撤销 IAMAllowedPrincipals 组的 Super 权限。在 AWS 控制台,选择”权限”,选择授予给 IAMAllowedPrincipals 的权限,然后点击”撤销”按钮。
或通过 AWS CLI 命令进行撤销:
同时修改 Data Catalog settings 中的选项,去掉为新的 Data Catalog 资源默认启用 “Use only IAM access control” 设置:
![]() |
四、EMR 集群与 Lake Formation 集成
1. 实现原理
以下是 Amazon EMR 如何访问受 Lake Formation 安全策略保护的数据的原理概览:
![]() |
- 用户提交 Amazon EMR 查询以查询 Lake Formation 中的数据。
- Amazon EMR 从 Lake Formation 请求临时凭证,以授予用户数据访问权限。
- Lake Formation 返回临时凭证。
- Amazon EMR 发送查询请求以从 Amazon S3 检索数据。
- Amazon EMR 从 Amazon S3 接收数据,对其进行筛选,并根据用户在 Lake Formation 中定义的用户权限返回结果。
2. 先决条件
在实现 Amazon EMR 和 Lake Formation 集成之前,必须满足以下要求:
- 必须 AWS Glue Data Catalog 作为 Amazon EMR 元数据存储
- 在 Lake Formation 中定义和管理访问 AWS Glue Data Catalog 中的数据库、表和列的权限
- 在 Amazon EMR 集群上启用运行时角色授权(runtime role authorization)
Amazon EMR 运行时角色(runtime role)是用户与 EMR Step 关联的 IAM 角色,作业使用此角色访问 AWS 资源。借助 EMR Step 的运行时角色,可以实现为 Spark 和 Hive 作业指定不同的 IAM 角色,从而在作业级别缩小访问权限范围。这可以简化在多个租户之间共享的单个 EMR 集群上的访问控制,其中每个租户都可以使用 IAM 角色进行隔离。
3. 创建 EMR 安全配置
Amazon EMR 安全配置简化了在集群中应用一致的安全、授权和身份验证选项的过程。您可以在 Amazon EMR 控制台上或通过 AWS CLI 或 AWS 开发工具包创建安全配置。当您将安全配置附加到集群时,Amazon EMR 会将安全配置中的设置应用于集群。
方式一:AWS Web Console 控制台创建
登录 AWS Management Console,然后通过 https://console.aws.amazon.com/emr 打开 Amazon EMR 控制台,左侧菜单选择 EMR on EC2: Security configurations
![]() |
创建一个安全配置,命名为:iamconfig-with-iam-lf ,选择自定义设置
![]() |
Authorization 部分选择:”Runtime role”,权限控制方式选择:”AWS Lake Formation”
![]() |
完成后可以在安全配置列表中看到新建的安全配置
![]() |
方式二:AWS CLI 命令行创建
创建一个名为 lf-runtime-roles-sec-cfg.json 的文件 使用以下安全配置:
注意:请将 LakeFormationConfiguration/AuthorizedSessionTagValue 属性设置为 Amazon EMR 以确保 session 标签可以授权 Lake Formation;
如果没有证书文件,可将EnableInTransitEncryption 属性设置为 false,并删除 InTransitEncryptionConfiguration 字段
使用以下命令创建 Amazon EMR 安全配置:
为 EMR 集群指定安全配置
我们可以在新建EMR集群时将创建好的安全配置附加到集群,但不能为已有的 EMR 集群添加安全配置。
![]() |
4. 为 EMR 运行时角色配置权限
要继续使用 Amazon EMR 运行时角色设置基于 Lake Formation 的访问控制,我们必须为 Amazon EMR 运行时角色配置 AWS Glue 和 Lake Formation 授权。
- IAM 权限控制对 Lake Formation 和 AWS Glue API 和资源的访问。
- Lake Formation 权限控制对 AWS Glue 数据目录资源、Amazon S3 位置以及这些位置的底层数据的访问。
新建 policy,选择 JSON 编辑模式:
![]() |
复制以下 json 到 policy 编辑器:
输入 Policy 名称,如:emr-runtime-roles-lake-formation-policy 完成创建。
![]() |
5. 使用 Runtime Role 提交作业
要将此策略分配给EMR 您的 IAM 运行时角色,在提交作业的时候指定 Runtime Role。
示例 1 – 使用 AWS CLI 提交 Spark 作业
示例 2 – 使用 AWS CLI 执行 Hive 查询作业
五、BI 客户端数据访问控制
1. 实现原理
Lake Formation 支持集中式权限管理功能,可以管控通过 JDBC 接口访问 EMR 数据的权限(数据元数据由 Glue Data Catalog 统一管理)。当 BI 客户端使用 IAM 凭证通过 Athena 或其他集成服务访问数据时,Lake Formation 会自动执行相应的权限控制,确保用户只能访问其被授权的数据。
![]() |
以 BI 应用通过 Athena 进行查询为例:
- BI 应用通过 JDBC 连接到 Amazon Athena
- Athena 会向 Lake Formation 验证用户权限
- Lake Formation 验证通过后会提供临时访问凭证
- Athena 使用这些临时凭证来查询数据
- 查询完成后凭证自动失效
2. 为BI 客户端创建账号
创建 IAM User
考虑到 BI 客户端数量较少,我们选择使用 IAM 进行用户身份验证,可以避免部署复杂的 Active Directory 目录服务或 SAML 2.0 联合身份认证系统。
需要提前为不同的BI/外部应用创建不同的 IAM User,不需要为这些 IAM user 赋予资源访问权限。
我们创建两个用于测试验证的IAM User:ws-bi-client1, ws-bi-client2
![]() |
为 IAM user 创建 Access key/Secret key 并保持好 .csv 文件用于BI 应用访问授权
![]() |
添加 IAM 权限
为了实现基于 Lake Formation 权限控制的JDBC访问,还需要为 BI 客户端使用的 IAM 用户添加必要的 IAM 权限,包括:
Lakeformation: GetDataAccess
使用 Athena 查询向 Lake Formation 注册的数据的主体(如 IAM user)必须有一个 IAM 权限策略允许执行 lakeformation:GetDataAccess 操作。获得此权限后,Lake Formation 将授权访问数据的临时凭证请求。
Athena: GetQueryResultsStream
使用 Athena 查询向 Lake Formation 注册的数据的主体(如 IAM user)必须有一个 IAM 权限策略允许执行 lakeformation:GetDataAccess 操作。获得此权限后,Lake Formation 将授权访问数据的临时凭证请求。
Athena 查询结果 S3 存储位置访问权限
存储 Athena 查询结果的 S3 位置无法向 Lake Formation 注册,意味着 Lake Formation 权限不限制对这些位置的访问,需要为客户端的 IAM user 手动添加访 问 query_result location 的 S3 权限,例如:
CTAS 查询需要 S3 写入权限(可选)
Create Table As Statements(CTAS 从查询结果创建表)额外需要对表的 Amazon S3 位置进行写入访问。要对向 Lake Formation 注册的数据运行 CTAS 查询,Athena 用户除了具有相应的 Lake Formation 权限以读取数据位置以外,还必须具有写入表 Amazon S3 位置的 IAM 权限。
为了便于理清对不同服务的IAM权限的需求,我们将所需权限分成4个 inline policy 分别进行介绍:
![]() |
IAM policy for Athena:
IAM policy for Glue:
IAM policy for LakeFormation:
IAM policy for S3 query result:
注意:请将这里的’aws-emr-data-bucket/query_result’ 替换成实际存储查询结果的 S3 路径。
3. 通过 JDBC 访问 Athena
为 BI 应用使用基于 IAM 的身份验证连接参数和 JDBC 驱动程序连接到 Amazon Athena;
添加 Athena JDBC 驱动:
![]() |
创建 Athena JDBC 连接:
![]() |
连接参数示例:
4. 验证 Lake Formation 权限管控
为了验证 Lake Formation 的权限管控机制是否生效,我们分别为两个 IAM user 附加不同的 IAM 权限:
准备了两张 Hive 表:noaa_gsod_demo,noaa_gsod_pds, 放在不同的 S3 地址:
![]() |
相关 hive properties:
“hive.exec.scratchdir”: “s3://aws-emr-studio-123456789011-eu-west-1/hive/scratch”,
“hive.metastore.warehouse.dir”: “s3://aws-emr-studio-123456789011-eu-west-1/hive/warehouse”,
接下来我们分别为 IAM 用户 ws-bi-client1 和 ws-bi-client2 创建两个连接:athena-client-1,athena-client-2
未开启 Lake formation 权限控制,仅基于 IAM 权限授权
IAM 用户 ws-bi-client1 因不具备 Athena 和 S3 的完全访问权限,连接被拒(Error code:400):
![]() |
IAM 用户 ws-bi-client2 拥有完整的 Athena 和 S3 的权限,可以访问到 default 数据库下的 table:
![]() |
启用 Lakeformation 权限控制后
为 IAM 用户 ws-bi-client1 添加 demo 数据表的 Lake Formation 权限:
![]() |
即可正常访问 demo 表格数据:
![]() |
此时,IAM 用户 ws-bi-client2 未配置如何 Lake Formation 数据库访问权限:
![]() |
即便具有 AmazonAthenaFullAccess, AmazonS3FullAccess IAM 权限,通过 JDBC 连接后仍然访问不到任何 Hive 表:
![]() |
同样,为该用户添加 demo 表格的 Lake formmation 权限:
![]() |
即可通过 JDBC 访问到对应的 Hive 表:
![]() |
五、总结
本文详细介绍了如何使用 AWS Lake Formation 实现企业级数据湖的安全权限管控,从配置到实践案例全面展示了 Lake Formation 的强大能力。通过本文的实践指南,我们可以得出以下关键结论:
- 统一权限管理架构 – Lake Formation 提供了一站式的数据湖权限管理解决方案,实现了从元数据到底层数据的精细化访问控制,简化了传统多层授权的复杂性。
- 灵活的权限模型 – 通过 Lake Formation 与 IAM 的协同工作机制,企业可以在粗粒度和细粒度之间选择合适的权限控制策略,既保证了安全性,又不会过度增加管理负担。
- 无缝集成多种分析服务 – Lake Formation 成功实现了与 EMR、Athena 等分析服务的深度集成,使得权限控制能够贯穿数据处理的全生命周期,确保一致的安全策略执行。
- 降低复杂性提高效率 – 采用 Lake Formation 后,无需为每个服务单独配置 S3 访问权限,大幅降低了权限管理的复杂性和出错风险,提高了 IT 团队的工作效率。
- 满足合规性要求 – 通过精细化的列级、表级权限控制,企业可以更好地满足数据隐私和合规性要求,保护敏感数据的同时允许合法使用。
在实施 Lake Formation 权限管控方案时,建议采取渐进式的迁移策略,先使用混合访问模式测试与验证,再逐步过渡到完全的 Lake Formation 权限控制模式。对于已有的数据湖架构,可考虑先在部分关键数据上实施,待积累足够经验后再全面推广。
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。