这是一篇客座博客文章,由 Contentful 的 Patrick Oberherr 和 Netlight Consulting 的 Johannes Günther 共同撰写。
这篇博文展示了如何提高基于以下内容的数据管道架构的安全性: 适用于 Apache Airflow 的 Amazon Managed Workflows (Amazon MWAA) 和 亚马逊弹性 Kubernetes 服务 (Amazon EKS) 通过设置细粒度的权限,使用 HashiCorp 地形 对于基础设施即代码。
许多 AWS 客户使用 Amazon EKS 来执行其数据工作负载。 Amazon EKS 的优势包括根据工作负载需求提供不同的计算和存储选项、通过共享底层基础设施实现更高的资源利用率,以及提供专用扩展的充满活力的开源社区。 这 EKS 数据 项目提供了一系列模板和其他资源来帮助客户开始这一旅程。 它包括使用说明 Amazon MWAA 作为作业调度程序.
Contentful 是 AWS 客户和 AWS 合作伙伴网络 (APN) 合作伙伴。 在其软件即服务 (SaaS) 产品 Contentful 可组合内容平台的幕后,Contentful 利用数据洞察来改善业务决策和客户体验。 内容丰富的参与 网络灯是 APN 咨询合作伙伴,帮助建立一个数据平台来收集这些见解。
Contentful 的大多数应用程序工作负载都在 Amazon EKS 上运行,并且该服务和 Kubernetes 在组织中广为人知。 这就是 Contentful 的数据工程团队决定也在 Amazon EKS 上运行数据管道的原因。 为了工作 调度,他们首先在 Amazon EKS 集群上使用自营 Apache Airflow,后来改用 Amazon MWAA 以减少工程和运营开销。 工作 执行 保留在 Amazon EKS 上。
Contentful 使用此基础设施运行复杂的数据管道,包括从多个数据源和不同的转换作业中摄取,例如使用 DBT。 整个管道共享一个 Amazon MWAA 环境和一个 Amazon EKS 集群。 对于单一环境中的多种工作负载,有必要应用 最小特权原则,确保各个任务或组件仅具有其运行所需的特定权限。
通过根据角色和职责划分权限,Contentful 的数据工程团队能够创建更强大、更安全的数据处理环境,这对于维护所处理数据的完整性和机密性至关重要。
在这篇博文中,我们将逐步介绍如何从头开始设置基础设施,并使用 Terraform(Contentful 为基础设施即代码选择的工具)部署示例应用程序。
先决条件
要继续阅读此博客文章,您需要安装以下工具的最新版本:
概述
在这篇博文中,您将创建一个具有以下基础架构的示例应用程序:
示例 Airflow 工作流程列出了源存储桶中的对象,使用以下命令临时存储此列表 气流XComs,并将列表作为文件写入目标存储桶。 该应用程序使用由 Amazon MWAA 环境调度的 Amazon EKS Pod 执行。 您将 EKS 集群和 MWAA 环境部署到 虚拟私有云 (VPC) 并向 EKS Pod 应用最低权限 服务帐号的 IAM 角色。 Amazon MWAA 的配置存储桶包含运行时要求以及指定 气流有向无环图 (DAG).
初始化项目并创建bucket
建立档案 main.tf
在空目录中包含以下内容:
该文件定义了 Terraform AWS 提供商 以及源存储桶和目标存储桶,其名称导出为 AWS Systems Manager 参数。 它还告诉 Terraform 上传一个名为 dummy.txt
到源存储桶中,这使得我们稍后将创建的 Airflow 示例应用程序能够在列出存储桶内容时接收结果。
通过发出以下命令初始化 Terraform 项目并下载模块依赖项:
创建基础设施:
Terraform 要求您确认对环境的更改,然后开始在 AWS 中部署资源。 部署成功后,您应该看到以下成功消息:
创建VPC
创建一个新文件 vpc.tf
在同一目录中 main.tf
并插入以下内容:
此文件定义 VPC(一个虚拟网络),稍后将托管 Amazon EKS 集群和 Amazon MWAA 环境。 请注意,我们使用 现有 Terraform 模块 为此,它包装了底层网络资源的配置,例如 子网, 路由表及 NAT 网关.
下载VPC模块:
部署新资源:
请注意正在创建哪些资源。 通过在 Terraform 文件中使用 VPC 模块,在定义基础设施时消除了许多底层复杂性,但了解到底正在部署什么仍然很有用。
请注意,Terraform 现在可以处理我们在两个文件中定义的资源, main.tf
和 vpc.tf
,因为 Terraform 包括所有 .tf
档 在当前工作目录中。
创建 Amazon MWAA 环境
创建一个新文件 mwaa.tf
并插入以下内容:
像以前一样,我们使用 现有模块 节省 Amazon MWAA 环境的配置工作。 该模块还创建配置存储桶,我们用它来指定 应用程序的运行时依赖性 (apache-airflow-cncf-kubernetes在) requirements.txt
文件。 该软件包与预安装的软件包结合使用 apache-airflow-亚马逊,启用与 Amazon EKS 的交互。
下载 MWAA 模块:
部署新资源:
此操作需要 20-30 分钟才能完成。
创建 Amazon EKS 集群
建立档案 eks.tf
具有以下内容:
为了创建集群本身,我们利用 Terraform 的 Amazon EKS 蓝图 项目。 我们还定义了一个以一个节点为目标大小的托管节点组。 请注意,在负载波动的情况下,请使用以下命令扩展集群 卡彭特 而不是上面显示的托管节点组方法使集群扩展更加灵活。 我们使用托管节点组主要是因为易于配置。
我们定义身份 Amazon MWAA 执行角色 假设在 Kubernetes 中使用 map_roles
多变的。 配置完成后 Terraform Kubernetes 提供商,我们向 Amazon MWAA 执行角色授予管理集群中 pod 的权限。
下载 Terraform 模块的 EKS 蓝图:
部署新资源:
此操作大约需要 12 分钟才能完成。
为服务账户创建 IAM 角色
建立档案 roles.tf
具有以下内容:
该文件定义了两个 Kubernetes 服务帐户, source-bucket-reader-sa
和 destination-bucket-writer-sa
以及他们对 AWS API 的权限,使用服务账户的 IAM 角色 (IRSA)。 我们再次使用 Amazon EKS Blueprints for Terraform 项目中的模块来简化 IRSA 配置。 请注意,这两个角色仅获得所需的最小权限,定义为 AWS IAM 策略.
下载新模块:
部署新资源:
创建 DAG
建立档案 dag.py
定义气流 DAG:
DAG 被定义为按小时计划运行,有两个任务 read_bucket
使用服务帐户 source-bucket-reader-sa
和 write_bucket
使用服务帐户 destination-bucket-writer-sa
,一个个追赶着。 两者都使用运行 EksPodOperator,它负责在 Amazon EKS 上安排任务,使用 AWS CLI Docker 映像 运行命令。 第一个任务列出源存储桶中的文件并将列表写入 Airflow XCom。 第二个任务从 XCom 读取列表并将其存储在目标存储桶中。 请注意, service_account_name
参数区分每个任务被允许执行的操作。
建立档案 dag.tf
将 DAG 代码上传到 Amazon MWAA 配置存储桶:
部署更改:
Amazon MWAA 环境自动从 S3 存储桶导入文件。
运行 DAG
在您的浏览器中,导航至 亚马逊 MWAA 控制台 并选择您的环境。 在右上角,选择 打开气流用户界面 。 您应该看到以下内容:
要触发 DAG,请在 行动 栏,选择播放符号,然后选择 触发DAG。 单击 DAG 名称可探索 DAG 运行及其结果。
导航到 Amazon S3控制台 并选择以“destination”开头的存储桶。 它应该包含一个文件 list.json
最近创建的 write_bucket
任务。 下载该文件以探索其内容,这是一个包含单个条目的 JSON 列表。
清理
您在本演练中创建的资源会产生 AWS 成本。 要删除创建的资源,请发出以下命令:
并在 Terraform CLI 对话框中批准更改。
结论
在这篇博文中,您了解了如何通过缩小每个单独任务的权限来提高在 Amazon MWAA 和 Amazon EKS 上运行的数据管道的安全性。
要更深入地了解,请使用本演练中创建的工作示例来进一步探讨该主题:如果删除 service_account_name
来自 Airflow 任务的参数? 如果在两个任务中交换服务帐户名称会发生什么?
为简单起见,在本演练中,我们使用平面文件结构,并将 Terraform 和 Python 文件放在单个目录中。 我们没有遵守 标准模块结构 由 Terraform 提出,普遍推荐。 在现实项目中,将项目拆分为多个 Terraform 项目或模块还可以提高拥有基础设施不同部分的团队之间的灵活性、速度和独立性。
最后,一定要学习 EKS 数据 文档,它提供了在 Amazon EKS 上运行数据管道的其他宝贵资源,以及 亚马逊 MWAA 和 阿帕奇气流 用于实现您自己的用例的文档。 具体可以看看这个 示例实现 适用于 Amazon MWAA 和 Amazon EKS 的 Terraform 模块,其中包含更成熟的 Amazon EKS 配置和节点自动扩展以及网络方法。
如果您有任何疑问,可以在 AWS 回复:发布 或伸出援手 AWS 支持.
作者简介
乌尔里希·欣泽 是 AWS 的解决方案架构师。 他与软件公司合作,在 AWS 上构建和实施基于云的解决方案。 在加入 AWS 之前,他为 AWS 客户和合作伙伴提供软件工程、咨询和架构方面的工作超过 8 年。
帕特里克·奥伯赫尔 是 Contentful 的一名高级数据工程师,在 AWS 工作了 4 年以上,在数据领域工作了 10 年以上。 在 Contentful,他负责托管在 AWS 上的数据堆栈的基础设施和运营。
约翰内斯·冈瑟 是 Netlight 的云和数据顾问,拥有 5 年以上的 AWS 工作经验。 他帮助各个行业的客户设计可持续的云平台,并获得了 AWS 认证。
- :具有
- :是
- :不是
- $UP
- 1
- 10
- 100
- 12
- 16
- 2023
- 27
- 41
- 8
- 9
- a
- Able
- 关于
- 以上
- 根据
- 账号管理
- 账户
- 承认
- 横过
- 行动
- 无环
- 添加
- 坚持
- 优点
- 优点
- 后
- 再次
- 驳
- 所有类型
- 沿
- 还
- Amazon
- 亚马逊网络服务
- an
- 和
- 另一个
- 任何
- 阿帕奇
- API
- 应用领域
- 使用
- 的途径
- 批准
- 架构
- 保健
- AS
- 假设
- At
- 授权
- 自动表
- 自动
- 可使用
- 远离
- AWS
- AWS 认证
- AWS 客户
- 基于
- 因为
- before
- 背后
- 在幕后
- 作为
- 之间
- 博客
- 都
- 浏览器
- 商业
- 但是
- by
- CAN
- 例
- 认证
- 变
- 更改
- 选择
- 点击
- 客户
- 云端技术
- 簇
- 码
- 柱
- 组合
- 社体的一部分
- 公司
- 完成
- 复杂
- 复杂
- 组件
- 计算
- 保密
- 配置
- 安慰
- 顾问
- 咨询
- 包含
- 包含
- 内容
- 内容平台
- 角落
- 正确
- 成本
- 创建信息图
- 创建
- 创建
- 电流
- 顾客
- 客户体验
- 合作伙伴
- DAG
- data
- 数据工程师
- 数据平台
- 数据处理
- 日期时间
- 决定
- 决策
- 更深
- 定义
- 定义
- 定义
- 定义
- 依赖
- 依赖
- 根据
- 部署
- 部署
- 部署
- 部署
- 描述
- 设计
- 目的地
- 销毁
- 对话框
- DID
- 不同
- 针对
- 潜水
- 不同
- do
- 码头工人
- 文件
- 下载
- 画
- 每
- 缓解
- 回音
- 努力
- 空的
- 使
- 从事
- 工程师
- 工程师
- 保证
- 条目
- 环境
- 必要
- 醚(ETH)
- 究竟
- 例子
- 交换
- 执行
- 执行
- 执行
- 体验
- 探索
- 扩展
- false
- 部分
- 文件
- 档
- (名字)
- 平面
- 高度灵活
- 灵活地
- 遵循
- 以下
- 针对
- 止
- 功能
- 进一步
- 收集
- 通常
- 得到
- GitHub上
- 给
- 图形
- 团队
- 组的
- 客人
- 来宾博客
- 手柄
- 发生
- 有
- he
- 帮助
- 帮助
- 更高
- 主持人
- 托管
- 创新中心
- How To
- HTML
- HTTPS
- IAM
- 身分
- if
- 实施
- 实施
- 进口
- 进口
- 改善
- in
- 包括
- 包括
- 包含
- 增加
- 独立
- 个人
- 行业
- 基础设施
- 内
- 可行的洞见
- 代替
- 诚信
- 相互作用
- 接口
- 成
- 问题
- 发行
- IT
- 它的
- 本身
- 工作
- 工作机会
- 加盟
- 旅程
- JPG
- JSON
- 键
- 类
- 知道
- 知识
- Kubernetes
- 后来
- 最新
- 知道
- 最少
- 喜欢
- 清单
- 清单
- 书单
- 加载
- 本地
- 记录
- 看
- 维持
- 使
- 制作
- 管理
- 管理
- 经理
- 成熟
- 可能..
- 的话
- 元数据
- 最低限度
- 分钟
- 模块
- 模块
- 更多
- 许多
- 多
- 姓名
- 命名
- 名称
- 导航
- 必要
- 需求
- 需要
- 网络
- 工业网络
- 全新
- 节点
- 注意
- 现在
- 对象
- 对象
- of
- on
- 一
- 仅由
- 开放源码
- 操作
- 运营
- 运营商
- 附加选项
- or
- 组织
- 其他名称
- 我们的
- 输出
- 产量
- 己
- 包
- 参数
- 合伙人
- 合作伙伴网络
- 伙伴
- 部分
- 打补丁
- 径
- 帕特里克
- 权限
- 管道
- 平台
- 平台
- 柏拉图
- 柏拉图数据智能
- 柏拉图数据
- 播放
- 豆荚
- 政策
- 肖像
- 帖子
- 主要
- 私立
- 处理
- 产品
- 本人简介
- 项目
- 项目
- 建议
- 提供者
- 供应商
- 提供
- 蟒蛇
- 有疑问吗?
- RE
- 达到
- 接收
- 最近
- 建议
- 减少
- 地区
- 去掉
- 岗位要求
- 资源
- 资源利用率
- 资源
- 责任
- 提供品牌战略规划
- 导致
- 成果
- 健壮
- 角色
- 角色
- 第
- 运行
- 运行
- 运行
- SaaS的
- 同
- 保存
- 鳞片
- 缩放
- 场景
- 始你
- 预定
- 调度
- 划伤
- 其次
- 安全
- 保安
- 看到
- 系列
- 服务
- 特色服务
- 集
- 设置
- 分享
- 共享
- 应该
- 如图
- 作品
- 简单
- 简化
- 单
- 单一环境
- 尺寸
- 小
- 软件
- 软件工程
- 解决方案
- 来源
- 来源
- 具体的
- 特别是
- 速度
- 堆
- 团队
- 开始
- 开始
- 开始
- 启动
- 个人陈述
- 仍
- 存储
- 储存选项
- 商店
- 结构体
- 学习
- 主题
- 成功
- 成功
- 肯定
- 可持续发展
- 交换的
- 符号
- 产品
- 采取
- 拍摄
- 需要
- 目标
- 任务
- 任务
- 团队
- 队
- 告诉
- 模板
- Terraform
- 文本
- 这
- 其
- 然后
- 博曼
- 他们
- Free Introduction
- 通过
- 至
- 象征
- 工具
- 工具
- 最佳
- 主题
- 转型
- 触发
- true
- 二
- 类型
- 相关
- 更新
- 上
- 使用
- 用过的
- 用户
- 用户界面
- 使用
- 运用
- 有价值
- 折扣值
- 变量
- 各个
- 版本
- 充满活力
- 在线会议
- 走
- 演练
- 是
- we
- 卷筒纸
- Web服务
- 井
- 什么是
- ,尤其是
- 这
- 全
- 谁的
- 为什么
- 广泛
- 将
- 工作
- 工作流程
- 工作流程
- 加工
- 年
- 您
- 您一站式解决方案
- 和风网