自动化强化 Amazon EKS 节点和更新的管道创建指南
作者:Nima Fotouhi,发布日期:2024年6月14日 关于 Amazon Elastic Kubernetes Service 的更多帖子 容器相关帖子 中级技能200 安全、身份和合规性 技术操作指导永久链接 评论区
2024年7月16日: 本文更新了代码及部分 CloudFormation 参数。
关键点总结
Amazon EKS 提供安全的 Kubernetes 集群,便于操作和维护。使用 CIS 基准对 Amazon EKS 节点进行强化,以增强安全性。自动更新节点组,有效减轻手动操作。利用 AWS 服务如 CloudFormation 和 Image Builder创建可靠的强化流程。Amazon Elastic Kubernetes Service (Amazon EKS) 是一个强大的 Kubernetes 认证服务,允许用户在 Amazon Web Services (AWS) 上构建、保护、操作和维护 Kubernetes 集群。它与亚马逊的关键服务如 Amazon CloudWatch、Amazon EC2 Auto Scaling 和 AWS Identity and Access Management (IAM) 无缝集成,增强了容器化应用程序的监控、扩展和负载均衡能力。这对于迁移到 AWS 的组织尤其合适,因为它支持开源 Kubernetes 工具与插件。
在之前的 博客 中,我展示了如何使用互联网安全中心CISDocker 基准创建 Amazon Elastic Container Service (Amazon ECS) 加固镜像。而在这篇文章中,我将展示如何利用 CIS Amazon Linux 基准 加强您的管理节点组安全性,特别是在 Amazon Linux 2 和 Amazon Linux 2023 中应用这些策略,以确保符合组织或监管的安全标准。
CIS Amazon Linux 基准概述
CIS Amazon Linux 基准是由安全专家合作开发的,目的是提供增强 Amazon Linux 形象安全性的指导。这些基准通过全球安全专业人士的输入形成,共同反映了当前网络安全的挑战与最佳实践。
在 Amazon EKS 上运行容器工作负载时,了解 共享责任模型 至关重要,能够明确您需要保护哪些组件。这是因为 AWS 负责基础设施的安全,而您负责保护应用程序和数据。将 CIS 基准应用于 Amazon EKS 节点是一种战略性的安全增强方法,涵盖了系统更新、现代加密政策、配置安全文件系统、禁用不必要的内核模块等建议。
在实施这些基准之前,我建议进行全面的威胁分析,以识别您环境中的安全风险。这一步骤能确保 CIS 基准的应用是针对性的和高效的,解决特定的漏洞和威胁。通过了解您环境中的特定风险,您可以智能地使用这些基准,以便合理地调整您的应用,从而更好地满足特定需求。
这些基准是广泛可用的,使各种规模的组织能够在没有重大财务支出的情况下采取安全措施。此外,应用 CIS 基准有助于符合各种安全和隐私的法规,如美国国家标准与技术研究所NIST、健康保险流通与问责法案HIPAA和支付卡行业数据安全标准PCI DSS,简化合规工作。
在此解决方案中,您将实现 CIS Amazon Linux 2 基准 v200 或 Amazon Linux 2023 v100 的建议。依据基准指导,您将使用由 Ansible Lockdown 提供的 Amazon Linux 2 CIS 基线 Ansible 角色 和 Amazon2023 CIS 基线 Ansible 角色 进行实现。
解决方案概览
EC2 Image Builder 是 AWS 的一项全托管服务,旨在自动创建、管理和部署安全且及时更新的基础镜像。在本解决方案中,我们将使用 Image Builder 将 CIS Amazon Linux 基准应用于 Amazon EKS 优化的 Amazon Machine Image (AMI)。生成的 AMI 将被用以更新 EKS 集群的节点组。此方法可根据需求进行定制,允许您选择特定的安全控制以加固基础 AMI。然而,建议您审查此解决方案中提供的特定控制,并评估它们与您现有工作负载和应用程序的交互,以保持无缝集成和不间断的功能。
了解每个安全控制的细节至关重要,并选择与您的操作需求和合规要求一致的控制,而不造成干扰。
此外,您可以在部署 AWS CloudFormation 模板时指定集群标签。这些标签帮助过滤在节点组更新过程中包含的 EKS 集群。我已提供一个 CloudFormation 模板,以便于提供所需资源。
如图所示,解决方案包括以下步骤:
Image BuilderAMI 镜像管道从 GitHub 克隆 Ansible 角色,以您在 CloudFormation 模板中指定的基础镜像为基础,并将控制应用于基础镜像。管道发布加固后的 AMI。管道验证应用于基础镜像的基准,并将结果发布到 Amazon Simple Storage Service (Amazon S3) 存储桶。同时,调用 Amazon Inspector 对已发布镜像进行漏洞扫描。
状态机初始化
AMI 发布成功后,管道向 AMI 状态 Amazon Simple Notification Service (Amazon SNS) 主题发布消息。SNS 主题调用 状态机初始化 AWS Lambda 函数。状态机初始化 Lambda 函数提取已发布 AMI 的镜像 ID,并将其作为输入,以启动状态机。
状态机
第一状态收集与 Amazon EKS 集群节点组相关的信息。为使用自定义启动模板启动的节点组创建一个包含加固 AMI 镜像 ID 的新启动模板版本。第二状态使用新启动模板对 EKS 集群的节点组进行更新。
镜像更新提醒
每周调度规则调用 镜像更新提醒 Lambda 函数。镜像更新提醒 Lambda 函数获取 CloudFormation 模板中 LatestEKSOptimizedAMI 的值,并提取 Image Builder 管道中用作父镜像的 Amazon EKS 优化 AMI 的最后修改日期。判断 AMI 的最后修改日期与管道中最新发布的 AMI 创建日期之间的关系。如果存在新基础镜像,则向 镜像更新提醒 SNS 主题发布消息。镜像更新提醒 SNS 主题向订阅者发送消息,通知他们有新基础镜像必须更新图像配方以处理新的 AMI。先决条件
为顺利完成此操作手册,请确保已准备好以下条件,否者 CloudFormation 部署可能会失败:
AWS 账户创建所需资源的权限已部署的具有一个或多个管理节点组的现有 EKS 集群,并使用您自己的启动模板进行启动安装 AWS Command Line Interface (AWS CLI)在您的 AWS 账户中启用 Amazon Inspector 在您的账户中启用 AWSServiceRoleForImageBuilder 服务链接角色操作步骤
要部署解决方案,请完成以下步骤。
十大免费加速器第一步:下载或克隆代码库
首先,下载或克隆 解决方案代码库。
下载代码库访问 GitHub 上代码库的主页。选择 Code,然后选择 Download ZIP。克隆代码库确保已安装 Git。在终端运行以下命令:bash git clone https//githubcom/awssamples/pipelineforhardeningeksnodesandautomatingupdatesgit
第二步:创建 CloudFormation 堆栈
在这一步中,通过创建 CloudFormation 堆栈 来部署解决方案的资源,使用提供的 CloudFormation 模板。登录到您的账户并 选择 AWS 区域,该区域支持此解决方案使用的服务。创建堆栈时,请按照 在 AWS CloudFormation 控制台中创建堆栈的步骤。注意您需要为模板中定义的参数提供值。以下表格列出了您需要提供的参数。
参数描述AnsiblePlaybookArgumentsAnsibleplaybook 命令参数。CloudFormationUpdaterEventBridgeRuleStateAmazon EventBridge 规则,用于调用 Lambda 函数检查新的 Image Builder 父镜像版本。ClusterTagsJSON 格式的标签,用于过滤您希望更新的 EKS 集群。 [{“Key””Team””Value” “Development”}]ComponentNameImage Builder 组件名称。DistributionConfigurationNameImage Builder 分发配置名称。EnableImageScanning选择是否启用 Amazon Inspector 镜像扫描。ImagePipelineNameImage Builder 管道名称。InfrastructureConfigurationNameImage Builder 基础设施配置名称。InstanceTypeImage Builder 基础设施配置的 EC2 实例类型。LatestEKSOptimizedAMIEKS 优化 AMI 参数名称。有关更多信息,请参见 检索 Amazon EKS 优化的 Amazon Linux AMI ID。RecipeNameImage Builder 食谱名称。注意:确保 AWS Task Orchestrator and Executor (AWSTOE) 应用程序在 Image Builder 中正常工作,并使更新后使用加固镜像的节点加入您的 EKS 集群,必须传递以下最低 Ansible 参数:
Amazon Linux 2 bash extravars {amazon2cisfirewallexternalamazon2cisrule4524false} skiptags rule6211rule6212rule6213rule6214rule6215rule6216rule6217rule4524
Amazon Linux 2023 bash extravars {amzn2023cissyslogserviceexternalamzn2023cisselinuxdisabletrue} skiptags rule1123rule1143rule121rule131rule133firewalldaccountslogrotaterule6210
第三步:设置 Amazon SNS 主题订阅者
Amazon Simple Notification Service (Amazon SNS) 是一种网络服务,用于协调和管理向订阅端点或客户端发送和交付消息。SNS 主题是一个逻辑访问点,充当通信通道。
该解决方案创建了两个 Amazon SNS 主题,使您了解流程的每一步。以下是该解决方案创建的主题及其用途的列表。
AMI 状态主题 在成功创建 AMI 时,向此主题发布消息。镜像更新提醒主题 如果 AWS 发布了更高版本的基础 Amazon EKS 优化 AMI,则向此主题发布消息。您需要手动 修改订阅,以便接收发布到该主题的消息。
修改 CloudFormation 模板创建的主题的订阅登录至 AWS 管理控制台 ,并访问 Amazon SNS 控制台。在左侧导航栏中,选择 Subscriptions。在 Subscriptions 页面,选择 Create subscription。在 Create subscription 页面,按照以下方式在 Details 部分进行操作:对于 Topic ARN,选择 CloudFormation 创建的一个主题的 Amazon 资源名称 (ARN)。对于 Protocol,选择 Email。对于 Endpoint,输入端点值。例如,指定邮件地址,如分发列表的电子邮件地址。选择 Create subscription。对于另一个主题重复上述步骤。
第四步:运行管道
该解决方案创建的 Image Builder 管道由一个图像配方、一个基础设施配置和一个分发配置组成。图像配方已设置为创建 AMI,选择基础镜像并选择组件。只有一个组件用于定义构建和测试步骤。在构建步骤中,解决方案应用 CIS Amazon Linux 2 基准的 Ansible playbook,并清理不必要的文件和文件夹。在测试步骤中,解决方案运行 Amazon Inspector,这是一项持续评估服务,用于扫描您的 AWS 工作负载以发现软件漏洞和意外的网络暴露,并进行 Amazon Linux 2 CIS 审核配置 的核查选项。您可以创建自己的组件并将它们与图像配方关联,以对基础镜像进行进一步修改。
您需要手动 运行管道 ,可以通过 控制台 或 AWS CLI 完成。
通过控制台运行管道打开 EC2 Image Builder 控制台。在管道详细信息页面,选择您的管道名称。在页面顶部的 Actions 菜单中,选择 Run pipeline。通过 AWS CLI 运行管道有两种方法可以获取该解决方案创建的管道的 ARN:使用 CloudFormation 控制台:在 CloudFormation 控制台的 Stacks 页面,选择堆栈名称。CloudFormation 为您选择的堆栈显示堆栈详细信息。从堆栈输出窗格中注意 ImagePipelineArn。使用 AWS CLI:确保 AWS CLI 已正确 配置。运行以下命
发表评论