用最专业的眼光看待互联网
立即咨询使用Kubernetes的政策即代码PaC解决方案,管理员和安全专业人士可以强制将组织政策应用到Kubernetes资源上。目前,市场上有几种公共的PaC解决方案可用于Kubernetes,如Gatekeeper、Polaris和Kyverno。
PaC解决方案通常实现两项功能:
使用Kubernetes admission controllers在对象创建之前进行验证或修改,以帮助执行集群的最佳配置实践。提供扫描先前创建资源或新评估政策的方式。本文展示了一个将PaC解决方案中的政策违规信息例如使用Kyverno或直接从Gatekeeper的约束状态发送到AWS安全中心的解决方案。通过此解决方案,您可以在您的Amazon Elastic Kubernetes Service (Amazon EKS)集群和AWS组织中可视化Kubernetes的安全错误。这也有助于您在Security Hub上实现标准安全用例,例如统一安全报告、通过工单系统的升级或自动化修复,从而提升整体Kubernetes安全态势,减少手动工作量。
该解决方案采用在A ContainerFree Way to Configure Kubernetes Using AWS Lambda中描述的方法,来部署一个AWS Lambda函数,该函数定期将Kubernetes集群的安全状态与来自Kubernetes或Gatekeeper的政策报告同步到安全中心。图1展示了解决方案的架构图。
此解决方案的工作原理如下:
一个定时事件以10分钟为间隔调用Lambda函数。Lambda函数通过Kubernetes Python客户端和Lambda函数的AWS身份与访问管理IAM角色,遍历您希望集成的每个运行中的EKS集群。对于每个运行中的集群,Lambda函数检索所选的Kubernetes政策报告或Gatekeeper约束状态,取决于所选政策,并将当前的违规信息发送到安全中心。如果使用Gatekeeper,如果存在更多的违规内容而非约束中所报告的,安全中心会生成额外的信息性发现,以便安全团队了解缺失的发现。可选:EKS集群管理员可以通过在Gatekeeper审计操作中使用constraintviolationslimit标志来提高报告的政策违规数量。
对于每个运行中的集群,Lambda函数会在安全中心归档之前已经提出和解决的发现。您可以从这个GitHub仓库下载该解决方案。
在这些步骤中,我将向您展示如何部署Kubernetes政策即代码解决方案,并将发现转发到安全中心。我们将使用Kyverno配置一套Kubernetes演示环境,并将现有EKS集群中的发现转发到安全中心。
提供的代码包括一个约束示例和不合规资源以进行测试。
您的AWS环境中需要有一个EKS集群来设置该解决方案。该集群应配置为使用awsauth ConfigMap或访问条目。可选:您可以使用eksctl来创建集群。
以下资源需要在您的计算机上安装:
魔戒官网梯子Git命令行工具。Bash shell。Windows 10用户可以安装Windows子系统Linux。AWS命令行工具AWS CLI。eksctl和Kubectl。Python3和pip。第一步是在现有Kubernetes集群中安装Kyverno。然后,部署Kyverno policy和不合规资源的示例。
部署Kyverno示例和政策根据其安装手册在您的Kubernetes集群中部署Kyverno,使用Kubernetes CLI。
bashkubectl create f https//githubcom/kyverno/kyverno/releases/download/v1100/installyaml
设置一个要求命名空间使用thisshouldntexist标签的政策。
bashkubectl create f ltlt EOFapiVersion kyvernoio/v1kind ClusterPolicymetadata name requirenslabelsspec validationFailureAction Audit background true rules name checkforlabelsonnamespace match any resources kinds Namespace validate message The label thisshouldntexist is required pattern metadata labels thisshouldntexist EOF
部署不合规资源以测试此解决方案创建一个不合规命名空间。
bashkubectl create namespace noncompliant
使用以下命令检查Kubernetes政策报告状态:
bashkubectl get clusterpolicyreport o yaml
您应该查看到类似于以下的输出:
yamlapiVersion v1items apiVersion wgpolicyk8sio/v1alpha2 kind ClusterPolicyReport metadata creationTimestamp 20240220T140037Z generation 1 labels appkubernetesio/managedby kyverno cpolkyvernoio/requirenslabels 3734083 name cpolrequirenslabels resourceVersion 3734261 uid 3cfcf1dabd28453fb2f5512c26065986 results message validation error The label thisshouldntexist is required rule checkforlabelsonnamespace failed at path /metadata/labels/thisshouldntexist/ policy requirenslabels resources apiVersion v1 kind Namespace name noncompliant uid d62eb1ad8a0b476b848dff6542c57840 result fail rule checkforlabelsonnamespace scored true source kyverno timestamp nanos 0 seconds 1708437615
下一步是克隆并部署与安全中心集成的解决方案。
部署解决方案步骤使用您喜欢的命令行终端克隆GitHub仓库:
bashgit clone https//githubcom/awssamples/securityhubk8spolicyintegrationgit
打开parametersjson文件,配置以下值:
Policy 您希望启用的产品名称,在本例中为policyreport,支持Kyverno等工具。ClusterNames EKS集群列表。当AccessEntryEnabled被启用时,该解决方案会为访问集成部署访问条目。SubnetIds 可选您子网的逗号分隔列表。如果您将EKS集群的API端点配置为仅限私有,那么您需要配置此参数。如果您的EKS集群启用了公共端点,则可以删除此参数。SecurityGroupId 可选一个允许连接到EKS集群的安全组ID。该参数仅在您运行私有API端点时需要,否则可以删除。此安全组应该允许来自EKS控制平面的安全组的入站连接。AccessEntryEnabled 可选如果您使用EKS访问条目,解决方案将自动部署具有只读组权限的访问条目。默认情况下,此参数为True。保存更改并关闭参数文件。设置您的AWSREGION例如,export AWSREGION=euwest1,并确保您的凭据已为委托管理员账户配置。输入以下命令进行部署:
bash/deploysh
您应看到以下输出:
plaintextWaiting for changeset to be createdWaiting for stack create/update to completeSuccessfully created/updated stack awssecurityhubk8spolicyintegration
您需要创建Kubernetes Group readonlygroup以允许Lambda函数的IAM角色读取权限。如果您不使用访问条目,您还需要修改Kubernetes集群的awsauth ConfigMap。
配置EKS集群访问步骤对于您账户中运行的每个集群,运行kubesetupsh脚本以创建Kubernetes只读集群角色和集群角色绑定。可选如果您不使用访问条目,请使用eksctl配置awsauth ConfigMap。下一步是验证与安全中心的Lambda集成是否正在运行。
验证集成运行步骤打开Lambda控制台,导航到awssecurityhubk8spolicyintegrationltregiongt函数。启动测试,将您集群的不合规发现导入到安全中心。在安全中心控制台中,审核来自Kyverno的最近创建的发现。最后一步是清理您为了这一演示而创建的资源。
销毁堆栈步骤使用笔记本上的命令行终端运行以下命令:
bash/cleanupsh

在本帖中,您了解了如何将Kubernetes政策报告发现与安全中心集成,并通过使用Kyverno政策引擎测试了此设置。如果您希望测试此解决方案与Gatekeeper的集成,可以在GitHub仓库的README文件中找到替代命令。
通过这种集成,您可以全面监控EKS集群的Kubernetes安全态势,并将其与其它安全发现如来自AWS Config、Amazon Inspector等的发现合并。您也可以将此解决方案与其他工具,如kubebench或Gatekeeper结合使用。您可以扩展此设置,以通知安全团队关键的配置错误或使用AWS安全中心实施自动修复措施。
有关如何使用PaC解决方案来保护AWS云中的Kubernetes工作负载的更多信息,请参见Amazon Elastic Kubernetes Service (Amazon EKS)实验室、Amazon EKS最佳实践以及在Amazon EKS中使用Gatekeeper作为Pod安全策略替代方案。
如您对此帖子有任何反馈,请在评论部分提交。如果您对此帖子有问题,请联系AWS支持。
Joaquin是AWS专业服务的首席安全架构师。他热衷于构建帮助开发者提高软件质量的解决方案。在加入AWS之前,他在安全行业的多个领域工作,涉及移动安全、云和合规等话题。在空闲时间,Joaquin喜欢和家人共度时光以及阅读科幻小说。
标签: Amazon EKS, AWS Security Hub, EKS, 安全博客, 安全中心
正在加载评论