2. AWS数据共享核心服务概览
在AWS上做跨团队数据共享,最容易踩的坑不是“某个服务不会用”,而是把几个职责不同的服务混在一起用。比如有人想用RAM共享一张Glue表,有人想用Lake Formation共享一个S3前缀,还有人把S3 Access Points当成权限系统。要避免这类混乱,先要建立一张清晰的“服务地图”:每个服务解决共享链条上的哪一段问题,它们之间是替代关系还是协作关系。
先分清五个服务各自站在哪一层
可以把一次跨团队数据共享拆成四个层次:数据存放层(数据实际放在哪)、元数据层(别人怎么知道有哪些表、字段是什么)、访问入口层(别人通过什么地址和身份访问)、授权与治理层(谁被允许访问哪些行、列、对象)。五个核心服务正好分布在这几层上:
- Amazon S3 是数据存放层,也是所有共享的最终落点。无论上层怎么包装,数据最终都以对象形式存在S3桶里。
- AWS Glue Data Catalog 是元数据层。它保存数据库、表、分区、列定义和Schema,是Athena、Redshift Spectrum、EMR、Glue ETL等引擎查找“数据长什么样、在哪”的统一目录。
- AWS Lake Formation 是授权与治理层。它在Glue Data Catalog之上提供表、列、行级别的精细权限,并管理数据位置(S3路径)的注册,让“授权”和“元数据”绑定在一起。
- AWS Resource Access Manager(RAM) 是资源级共享层。它把某个AWS资源(如Glue表、Glue数据库、子网、License配置等)直接共享给另一个账号或组织单元,是“把资源本身交给对方”的机制。
- S3 Access Points 是访问入口层。它为同一个桶创建多个具名网络端点,每个端点绑定自己的访问策略,让不同团队用不同入口访问同一份数据,而不必各自维护复杂的桶策略。
- AWS Data Exchange 是数据交易与分发层。它面向“从外部获取数据”或“对外发布数据产品”的场景,提供订阅、授权、数据集版本管理,是跨组织数据分发的市场型服务。
理解这五者的关键,是记住一句话:Glue Data Catalog管“是什么”,Lake Formation管“谁能看什么”,RAM管“把资源交给谁”,S3 Access Points管“从哪个门进”,Data Exchange管“从外部买/卖数据”。
协作关系:不是替代,而是接力
这五个服务在真实共享场景中通常是接力关系,而不是选一个用。以一个典型场景为例:A团队在S3桶 s3://analytics-prod/orders/ 下存放订单Parquet文件,B团队需要在自己的账号里用Athena查询其中部分列。
第一步,A团队用Glue Crawler或手动在Glue Data Catalog中创建数据库 analytics_prod 和表 orders,指定数据位置为上述S3前缀。此时元数据有了,但B团队还看不到。
第二步,A团队在Lake Formation中把 s3://analytics-prod/orders/ 注册为数据位置,并对表 orders 授予B团队账号的 SELECT 权限,同时可以限制只暴露 order_id、order_date、amount 三列,隐藏 customer_phone 等敏感列。这一步是“精细授权”。
第三步,如果B团队需要在自己的Glue Catalog中直接看到这张表,A团队可以通过RAM把Glue表或整个数据库共享给B团队账号。B团队接受共享后,在自己的Catalog里就能看到该表,无需复制元数据。
第四步,如果B团队还需要直接读取S3对象(比如用Spark作业),A团队可以为该桶创建一个S3 Access Point,例如 ap-analytics-orders,并绑定只允许B团队角色读取 orders/ 前缀的策略。B团队通过这个端点访问,而不是直接操作桶策略。
第五步,如果这份数据还要对外部合作伙伴分发,A团队可以把数据集发布到AWS Data Exchange,设置订阅条款和版本,外部方通过订阅获得访问授权。Data Exchange负责的是“对外分发”这一层,不替代前面的权限治理。
容易混淆的边界
| 问题 | 正确服务 | 常见误用 |
|---|---|---|
| 限制B团队只能看某几列 | Lake Formation 列级权限 | 用S3桶策略无法做到列级 |
| 让B团队在自己的Catalog里看到表 | RAM 共享 Glue 表/数据库 | 误以为Lake Formation授权后对方Catalog自动出现 |
| 同一桶给不同团队不同入口 | S3 Access Points | 为每个团队改桶策略,越改越乱 |
| 从外部供应商获取数据集 | AWS Data Exchange | 用RAM共享外部账号资源,流程不匹配 |
| 定义表结构和分区 | Glue Data Catalog | 把Schema写在ETL代码里,其他引擎无法复用 |
选型时的判断顺序
实际做方案时,可以按以下顺序判断:先问“数据在哪”——确定S3位置;再问“对方怎么知道表结构”——决定是否用Glue Data Catalog;再问“要不要列/行级控制”——需要则上Lake Formation;再问“对方是否要在自己账号Catalog里直接看到”——需要则用RAM共享Glue资源;再问“是否要给不同团队不同访问入口”——需要则建S3 Access Points;最后问“是否面向外部组织分发”——是则考虑Data Exchange。按这个顺序,基本不会把服务用错层。
需要特别注意的是,Lake Formation和RAM在Glue表共享上有一定功能重叠,但定位不同:Lake Formation侧重“授权后对方能查”,RAM侧重“资源出现在对方账号里”。两者可以同时使用,也可以根据团队习惯只选其一,但不要在同一张表上既做Lake Formation授权又做RAM共享却不清楚权限叠加效果,否则容易出现“以为收紧了、实际还开着”的治理漏洞。