研究与技术01
Netflix 为跑在 Amazon EMR 上的 Apache Spark 任务做了一套“工作负载证明”机制。打个比方:过去托管计算任务要访问内部服务,得把内部凭证直接塞给任务,凭证容易泄露、也难管理。现在的做法是先确认这个任务的 AWS IAM 身份,再核对 Netflix 控制面签发的声明,两者都通过后,才发一张有效时间很短的内部 X.509 证书,任务用它去访问内部服务。这样托管计算任务不必直接携带凭证,就能安全地完成内部认证,凭证暴露的风险和分发负担都小了。这套机制目前应用在 Netflix 的 Spark/EMR 场景,其他场景是否适用文中未说明。
文中可用工具
- Apache Spark在 Amazon EMR 上运行的分布式数据处理任务
- Amazon EMR托管运行 Spark 任务的 AWS 计算服务
- AWS IAM用于识别工作负载身份的云身份服务
- X.509 证书短期内部证书,用于访问内部服务
研究与技术02
Netflix 工程团队在 Amazon EMR 上跑 Apache Spark 任务时遇到一个麻烦:托管环境只给任务发一个 AWS 身份(IAM 角色),但公司内部服务只认自家 PKI(Metatron)签发的短期证书,两者不通用。他们的做法是让每个 Data Project 与一个专用 IAM 角色一一对应,控制面在提交任务时附上一份签名声明;任务启动后再用 AWS 凭据签出一个预签名 URL,以此向身份服务证明"我确实持有这个云身份",换取内部证书。这样 Spark 任务就能以 Data Project 身份访问加密列、查表权限,而不必依赖启动者的个人身份。方案不限于 Spark 或 EMR,任何只有云凭据的托管环境都可套用。
文中可用工具
- MetatronNetflix 内部的私有 PKI,负责签发短期 X.509 证书,让服务之间用双向 TLS 互相认证
- Amazon EMR运行 Apache Spark 任务的托管计算环境
- Apache Spark数据处理框架,3.0 起提供插件接口用于在驱动和 executor 启动时注入证明逻辑
- AWS STS提供 GetCallerIdentity 接口,让工作负载生成可验证自己云身份的预签名 URL
- HashiCorp Vault文中作为同类 IAM 认证思路的参考案例被提及,未说明在此方案中实际使用