本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Image Builder 和 Terraform 为经过强化的容器EC2镜像构建管道
由迈克·圣克罗斯 (AWS) 和安德鲁·雷恩斯 () 创作 AWS
摘要
这种模式构建了一个 EC2Image Builder 管道,用于生成经过强化的 Amazon Linux 2
该版本包括两 EventBridge 条 Amazon 规则。一条规则是,当 Amazon Inspector 调查发现为高或严重时,将启动容器映像管线,以便替换不安全的映像。此规则要求同时启用 Amazon Inspector 和亚马逊弹性容器注册表(亚马逊ECR)增强型扫描。另一条规则在成功将图像推送到亚马逊ECR存储库后,向亚马逊简单队列服务 (AmazonSQS) 队列发送通知,以帮助您使用最新的容器映像。
注意
亚马逊 Linux 2 的支持已接近终止。欲了解更多信息,请参阅亚马逊 Linux 2 FAQs
先决条件和限制
先决条件
限制
该解决方案创建了一个 Amazon 虚拟私有云 (AmazonVPC) 基础架构,其中包括一个NAT网关和一个用于从其私有子网连接互联网的互联网网关。你不能使用VPC终端节点,因为 T AWSask Orchestrator 和 Executor (AWSTOE) 的引导过程
从互联网安装AWSCLI版本 2。
产品版本
Amazon Linux 2
AWSCLI版本 1.1 或更高版本
架构
目标技术堆栈
这种模式创建 43 项资源,包括:
两个 Amazon Simple Storage Servic e (Amazon S3) 存储桶:一个用于管道组件文件,一个用于服务器访问和亚马逊流日志 VPC
包含公有子网、私有子网、路由表、网关和互联网NAT网关的虚拟私有云 (VPC)
I EC2 mage Builder 管道、配方和组件
容器映像
用于图像加密的AWS密钥管理服务 (AWSKMS) 密钥
一个 SQS 队列
三个角色:一个用于运行 EC2 Image Builder 管道,一个用于 EC2 Image Builder 的实例配置文件,一个用于 EventBridge 规则
两 EventBridge 条规则
Terraform 模块结构
有关源代码,请参阅 GitHub 存储库 Terraform EC2 Image Builder 容器强化
├── components.tf ├── config.tf ├── dist-config.tf ├── files │ └──assumption-policy.json ├── hardening-pipeline.tfvars ├── image.tf ├── infr-config.tf ├── infra-network-config.tf ├── kms-key.tf ├── main.tf ├── outputs.tf ├── pipeline.tf ├── recipes.tf ├── roles.tf ├── sec-groups.tf ├── trigger-build.tf └── variables.tf
模块详细信息
components.tf
包含用于上传/files
目录内容的 Amazon S3 上传资源。您也可以在此处以模块化方式添加自定义组件YAML文件。/files
包含用来定义components.tf
中所用组件的.yml
文件。image.tf
包含基本映像操作系统的定义。在这里,您可修改不同基础映像管线的定义。infr-config.tf
并dist-config.tf
包含启动和分发映像所需的最低AWS基础架构所需的资源。infra-network-config.tf
包含将容器映像部署到的最低VPC基础架构。hardening-pipeline.tfvars
包含要在应用时所用的 Terraform 变量。pipeline.tf
在 Terraform 中创建和管理 EC2 Image Builder 管道。recipes.tf
是您可以指定不同的组件混合物来创建容器配方的位置。roles.tf
包含亚马逊弹性计算云 (AmazonIAM) 实例配置文件和管道部署角色的 Ident AWS ity and Access Management (EC2) 策略定义。trigger-build.tf
包含 EventBridge 规则和SQS队列资源。
目标架构
该图说明了以下工作流程:
EC2Image Builder 使用定义的配方构建容器映像,该配方会安装操作系统更新并将RHEL介质STIG应用于 Amazon Linux 2 基础映像。
经过强化的图像将发布到私有 Amazon ECR 注册表,成功发布图像后, EventBridge 规则会向SQS队列发送消息。
如果将 Amazon Inspector 配置为增强扫描,它会扫描亚马逊ECR注册表。
如果 Amazon Inspector 为图像生成了 “临界” 或 “高” 严重性发现, EventBridge 则规则会触发 EC2 Image Builder 管道再次运行并发布经过强化处理的新图像。
自动化和扩缩
此模式描述了如何在计算机上预调配基础设施并构建管线。但是它旨在大规模使用。与其在本地部署 Terraform 模块,不如在多账户环境中使用它们,例如带有 Account Factory for Terraform 环境的 Cont AWSrol Tower 环境。
在这种情况下,您应该使用后端状态 S3 存储桶 管理 Terraform 状态文件,而不是在本地管理配置状态。 要实现规模化使用,请从 Control Tower 或 landing zone 账户模式将解决方案部署到一个中央账户,例如共享服务账户或公共服务账户,并向消费者账户授予访问亚马逊ECR存储库和AWSKMS密钥的权限。有关设置的更多信息,请参阅 re: Post 文章如何允许辅助账户在我的 Ama ECR zon 图像存储库中推送或拉取图片
? 例如,在账户自动售货机 或 Account Factory for Terraform 中,向每个账户基准或账户自定义基准添加权限,以提供对该亚马逊ECR存储库和加密密钥的访问权限。 部署容器镜像管道后,您可以使用 Im EC2 age Builder 功能(例如组件)对其进行修改,这些功能可以帮助您将更多组件打包到 Docker 版本中。
用于加密容器映像的密AWSKMS钥应在要使用该镜像的账户之间共享。
您可通过复制整个 Terraform 模块并修改以下
recipes.tf
属性来添加对其他映像的支持:将
parent_image = "amazonlinux:latest"
修改为其他映像类型。修改
repository_name
为指向现有的 Amazon ECR 存储库。这会创建另一个管道,用于将不同的父映像类型部署到您的现有 Amazon ECR 存储库。
工具
工具
Terraform(IaC 预调配)
Git(如果在本地预调配)
AWSCLI版本 1 或版本 2(如果在本地配置)
代码
此模式的代码位于 GitHub 存储库 Terraform EC2 Image Builder 容器强化
操作说明
任务 | 描述 | 所需技能 |
---|---|---|
设置本地凭证。 | 设置您的AWS临时证书。
| AWS DevOps |
克隆存储库。 |
| AWS DevOps |
更新变量。 | 更新
以下是关于每个变量的描述:
| AWS DevOps |
初始化 Terraform。 | 更新变量值后,您可初始化 Terraform 配置目录。初始化配置目录会下载并安装配置中定义的AWS提供程序。
您应该看到一条消息,指出 Terraform 已成功初始化并标识了已安装的提供程序的版本。 | AWS DevOps |
部署基础设施并创建容器映像。 | 使用以下命令通过使用
| AWS DevOps |
自定义容器。 | 在 EC2 Image Builder 部署管道和初始配方后,您可以创建容器配方的新版本。 您可以添加 EC2 Image Builder 中可用的 31 个以上组件中的任何一个来自定义容器构建。有关更多信息,请参阅 I EC2 mage Builder 文档中创建新版本的容器配方的 “组件” 部分。 | AWS 管理员 |
任务 | 描述 | 所需技能 |
---|---|---|
验证AWS基础架构配置。 | 成功完成第一个 Terraform
| AWS DevOps |
验证各个AWS基础架构资源。 | 要验证已部署的各个资源,如果您在本地预调配,则可以运行以下命令:
此命令将返回 43 项资源列表。 | AWS DevOps |
任务 | 描述 | 所需技能 |
---|---|---|
移除基础设施和容器映像。 | 使用 Terraform 配置后,可运行以下命令来移除资源:
| AWS DevOps |
故障排除
事务 | 解决方案 |
---|---|
验证提供商凭证时出错 | 在本地计算机上运行 Terraform
此错误是由本地计算机配置中使用的凭证安全令牌过期引起的。 要解决此错误,请参阅AWSCLI文档中的设置和查看配置设置。 |
相关资源
后端状态 S3 存储桶
(Terraform 文档) 安装或更新最新版本的 AWS CLI(AWSCLI文档)