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管“从外部买/卖数据”。

AWS 数据共享核心服务协作关系 数据存放 → 元数据 → 授权治理 → 访问入口 → 外部分发 数据存放层 Amazon S3 桶 / 前缀 数据最终以对象形式存放,是所有共享的物理落点 元数据层 Glue Data Catalog 数据库 / 表 / 分区 / Schema 授权与治理层 Lake Formation 表/列/行级权限 + 位置注册 访问入口层 S3 Access Points 具名端点 + 独立访问策略 资源级共享层 AWS RAM 跨账号共享 Glue 表/数据库等 外部数据交易与分发层 AWS Data Exchange 订阅 / 发布 / 版本管理 爬取/注册 注册数据位置 权限绑定 多入口访问 共享资源 数据产品落地 协作主线:S3 存数据 → Glue Catalog 建元数据 → Lake Formation 做精细授权 → RAM 跨账号共享资源 → 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代码里,其他引擎无法复用
记忆口诀:Catalog 管“是什么”,Lake Formation 管“谁能看什么”,RAM 管“把资源交给谁”,Access Points 管“从哪个门进”,Data Exchange 管“对外买卖”。五者各司其职,组合使用才能覆盖从内部共享到外部分发的完整链路。

选型时的判断顺序

实际做方案时,可以按以下顺序判断:先问“数据在哪”——确定S3位置;再问“对方怎么知道表结构”——决定是否用Glue Data Catalog;再问“要不要列/行级控制”——需要则上Lake Formation;再问“对方是否要在自己账号Catalog里直接看到”——需要则用RAM共享Glue资源;再问“是否要给不同团队不同访问入口”——需要则建S3 Access Points;最后问“是否面向外部组织分发”——是则考虑Data Exchange。按这个顺序,基本不会把服务用错层。

需要特别注意的是,Lake Formation和RAM在Glue表共享上有一定功能重叠,但定位不同:Lake Formation侧重“授权后对方能查”,RAM侧重“资源出现在对方账号里”。两者可以同时使用,也可以根据团队习惯只选其一,但不要在同一张表上既做Lake Formation授权又做RAM共享却不清楚权限叠加效果,否则容易出现“以为收紧了、实际还开着”的治理漏洞。