数据湖治理 - 通过 AWS Lake Formation 实现集中式访问控制

解说使用 AWS Lake Formation 构建数据湖、实现访问控制与治理的方法。介绍针对基于 S3 的数据湖的列级与行级细粒度权限管理,以及与 Glue、Athena 的集成。

数据湖的治理挑战与 Lake Formation 的角色

以 S3 为存储基础的数据湖是一种强大的架构,可以低成本集中管理结构化、半结构化和非结构化数据。然而,随着数据量和用户数的增长,「谁可以访问哪些数据」的管理迅速变得复杂。以往通过组合 S3 存储桶策略、IAM 策略和 Glue Data Catalog 资源策略来实现访问控制,但当表数量超过数百时管理往往会崩溃。AWS Lake Formation 是 2019 年正式发布的数据湖治理服务,集中管理数据的摄取、目录注册、访问控制和审计。Lake Formation 的核心是权限管理层,可以在数据库、表、列、行、单元格各级别对 S3 上的数据授予访问权限。

访问控制模型与 LF-TBAC

Lake Formation 提供两种访问控制模型。Named Resource 方式是指定特定数据库、表、列并向主体(IAM 用户/角色)授予权限的传统模型。Tag-Based Access Control(LF-TBAC)是在数据资源和主体双方附加 LF-Tag(键值对),通过标签匹配自动应用权限的模型。例如,为表附加 department=finance 标签,并将相同标签关联到财务部门的角色,则每次添加新表时无需单独设置权限即可自动授予访问权限。 ```bash # 创建 LF-Tag aws lakeformation create-lf-tag \ --catalog-id 123456789012 \ --tag-key department \ --tag-values '["finance","engineering","marketing"]' # 为表附加 LF-Tag aws lakeformation add-lf-tags-to-resource \ --resource '{"Table":{"DatabaseName":"analytics","Name":"transactions"}}' \ --lf-tags '[{"TagKey":"department","TagValues":["finance"]}]' ``` 行级安全(Row-Level Security)可以定义过滤表达式,按主体限制可查看的行。例如设置 region='ap-northeast-1' 条件,则只返回东京区域的数据。结合列级访问控制,可以为同一表的不同用户提供不同的视图。

数据目录与查询引擎的集成

Lake Formation 与 AWS Glue Data Catalog 集成,集中管理 S3 上数据的 Schema 信息(数据库、表、分区、列定义)。可通过 Glue Crawler 扫描数据源,自动检测 Schema 并注册到目录中。注册的表会应用 Lake Formation 的权限,从 AthenaRedshift Spectrum、EMR(Spark/Hive)执行查询时自动应用访问控制。用户只需编写 SQL,后台由 Lake Formation 执行权限检查和列、行的过滤。与 Athena 的集成中,即使用户执行 SELECT *,没有权限的列也会自动从结果中排除。这种透明的访问控制使得应用程序端无需实现过滤逻辑。使用 Governed Tables 功能可以对 S3 上的数据实现 ACID 事务,即使多个 ETL 作业同时更新数据也能保持一致性。

跨账户共享与数据网格

通过 Lake Formation 的跨账户共享功能,可以在 AWS Organizations 内的多个账户之间安全共享数据。当数据所有者账户向其他账户授予表或数据库的权限时,接收方账户的 Lake Formation 中会创建资源链接,可直接从 Athena 或 Redshift Spectrum 进行查询。无需物理复制数据,因为引用的是 S3 上的原始数据,不会产生重复的存储成本。这一机制作为数据网格架构的基础发挥作用。各领域团队(销售、市场、工程)在自己的账户中管理数据产品,并通过 Lake Formation 向整个组织发布。通过与 AWS RAM(Resource Access Manager)的集成,还可以在 Organizations 的 OU(组织单元)级别批量控制共享管理。在审计方面,通过 CloudTrail 与 Lake Formation 的集成,自动记录谁在何时访问了哪些数据的审计日志。 如果想拓展数据分析知识,也可以参考Amazon 上的专业书籍

导入步骤与最佳实践

在现有的 S3 + Glue + Athena 环境中导入 Lake Formation 可以分阶段进行。首先指定 Lake Formation 管理员(Data Lake Administrator),将现有 Glue Data Catalog 的数据库注册到 Lake Formation。然后将 S3 的数据位置注册到 Lake Formation,设置 Lake Formation 作为数据访问的中介。此时从基于 IAM 的访问控制迁移到基于 Lake Formation 的控制,需要逐步删除 IAMAllowedPrincipals 的权限并替换为 Lake Formation 的权限。迁移时需注意,如果一次性删除 IAMAllowedPrincipals,现有查询将会失败,因此建议按表逐步迁移。最佳实践包括:采用 LF-TBAC 实现可扩展的权限管理、对生产数据的访问遵循最小权限原则、定期审计 CloudTrail 日志确认访问模式。Lake Formation 本身免费使用,计费仅为 S3 存储、Glue Crawler/ETL 作业、Athena 查询扫描等基础服务的使用费用。

Lake Formation 的费用

Lake Formation 本身不产生额外费用。成本来自 Lake Formation 管理的 AWS 服务(Glue Crawler、S3 存储、Athena 查询)的使用费用。Glue Crawler 每 DPU 小时约 0.44 美元,Athena 每扫描 1 TB 约 5.00 美元。使用 Lake Formation 的基于标签的访问控制(LF-TBAC)进行列级和行级权限管理时也不产生额外费用。

总结 - Lake Formation 的活用指南

AWS Lake Formation 是为基于 S3 的数据湖添加企业级访问控制和治理的服务。列、行、单元格级别的细粒度权限管理、通过 LF-TBAC 实现的可扩展策略运维、通过跨账户共享实现的数据网格是其主要优势。通过与 Athena、Redshift Spectrum、EMR 的透明集成,无需更改现有查询工作流即可引入访问控制。Lake Formation 本身免费使用,可分阶段导入到现有的 S3 + Glue + Athena 环境中,是考虑加强数据湖治理时的首选方案。