【.com快译】安全一直是许多DevOps团队的症结所在,包括我自己的加拿大保险和金融服务合作社。虽然我们的绝大多数CI/CD管道已经在各种工具的帮助下实现了自动化,并且基于容器的自动化应用程序部署是常态,但安全性仍然落后。与大多数DevOps团队一样,我们有自动漏洞扫描,但在手动构建安全策略以保护应用程序及其在生产中的工作负载时遇到了问题。好消息是,今天Kubernetes的自定义资源定义(CRD)使我们的团队能够通过自己的管道尽早将应用程序的安全策略声明集成到代码中,并自动将此类安全策略部署到生产环境中。目前,我们通过CRD引入各种全局安全策略。这些策略预定义了应用程序允许的行为,并在多个Kubernetes集群中实施不同的保护措施。通过使用CRD将安全策略作为代码进行自动化和集中管理,我们既可以加强和简化策略执行,又可以以高效、容错和安全的方式部署和更新各种应用程序。接下来,我们将分享我们公司如何自动化应用安全策略:CRD的优势为了利用容器工具提供的优势,我们团队使用了NeuVectorCRD,并在NeuVector容器安全平台中定义了各种安全策略。首先通过CRD,我们启用这些策略来捕获应用程序最初的正常合法行为,并以此为基础构建一个完整的配置文件(profile)。然后CRD将这些行为列入白名单,包括:所有符合应用程序标准操作的网络规则、流程、协议和文件活动。最后,在应用程序的容器环境中,CRD通过仅允许那些已批准的网络连接(使用ISO第7层应用程序协议进行识别和检查)并拒绝任何异常的外部连接来提供安全性。因此,我们的策略可以防止攻击者尝试使用内部或外部通信连接访问应用程序所在的生产环境。CRD不仅允许我们根据全局或每个服务定义不同的规则;同时也支持RBAC,让我们可以使用本地的Kubernetes服务账号和角色来实现各种安全策略。同时,它的版本控制功能也帮助我们跟踪每一个应用的修订策略。此外,OpenPolicyAgent等安全策略管理工具也可以根据需要支持各种集成。创建NeuVectorCRDNNeuVectorCRD允许您使用Kubernetes的本地YAML文件创建各种安全规则。首先,您需要创建一个NeuVectorCRD。如下图所示,我们使用YAML代码创建了一个CRD。同时,我们为NvSecurityRule定义了一个命名空间域,定义了NvClusterSecurityRule的域范围,使其能够跨集群运行。我们通过运行以下命令来创建CRD:使用NeuVectorCRD,所有由NvSecurityRule类型调用的自定义资源现在都可以由CRD处理。因此,您可以继续创建各种自定义资源来定义更多的安全策略。但在此之前,请参考NeuVector的相关文档添加所有需要的clusterroles和clusterrolebindings。此外,CRD可以在Kubernetes中部署原生的、支持RBAC的NeuVector安全规则。CRD为特定命名空间声明的安全策略只能由有权部署到工作区的服务帐户执行。同样,服务帐户必须具有适当的集群管理员权限才能跨命名空间部署这些集群范围的CRD定义。下面是demo-security-v1.yaml文件的代码片段。它使用HTTP协议限制demo命名空间中的nginx-pod容器连接到同一命名空间中的node-pod容器。除了上述代码片段之外,yaml文件还应继续指定演示命名空间中每个容器允许的所有网络连接、使用Redis协议的网络连接以及每个容器允许的进程和文件活动。您可以通过在部署应用程序之前将它们部署到NeuVector中来提前准备安全规则。这允许应用程序在开始运行时激活相应的安全属性。请参考以下命令来部署您的安全策略:NeuVector会解析新创建的自定义资源中的安全策略,并继续调用NeuVectorControllerRESTAPI。Controller通过根据需要在NeuVector中创建规则和配置来实施策略。securitypolicyascode的用例我个人认为:CRD和securitypolicyascode的定义能力应该能够给DevOps、DevSecOps和开发团队带来更好的安全性。我们可以从以下四个方面进行实践:尽早将开发和测试检查表导入应用生命周期通过为应用创建部署和安全检查表,开发者可以尽早使用CRD,确保早期安全的发展。在完成镜像构建、自动化漏洞扫描和DevOpsReview之后,DevOps人员可以通过测试这两个checklist来为开发者提供有效的安全反馈。因此,一个有效的安全策略伴随着一个新的应用程序从一开始直到它被部署到生产中。使用行为学习来创建安全策略。DevOps团队可以在测试环境中使用NeuVector的行为学习功能来定义安全策略并为NeuVectorCRD创建YAML格式文件。通过以下工作流程(从图的右下角开始),DevOps和QA团队可以顺利地将应用程序部署到测试和QA环境中。即应用会在这里完成所有行为相关的配置文件,包括:生成合适的网络、进程、文件访问的安全规则等。在部署到生产环境之前,开发者可以将新创建??的规则导出为YAML格式进行检查、编辑和DevOps相关的测试。定义全局安全策略值得注意的是,通过启用全局安全策略的定义,NeuVectorCRD可以将未连接到任何特定应用程序的负载分组,或者不针对集群中的特定负载。例如,安全、合规或运营团队可能需要为网络出口和入口定义全局安全规则,以防止某些进程跨越容器,或允许某些进程监控和诊断整个集群。因此,通过结合使用全局策略和特定于应用程序的策略,整个团队可以制定组织真正需要的精确规则。如下图所示,我们使用以下规则来拒绝来自容器的SSH连接。将政策从研发转向生产。通过使用NeuVectorCRD,您可以自动将研发阶段的所有或部分选定的安全策略迁移到生产环境。在NeuVector控制台中,您可以通过配置“新服务模式”来发现、监控或保护各种设置。通过选择“监控”或“保护”,您可以确保所有新部署或更新的服务必须包含所需的安全规则才能被激活。综上所述,通过使用KubernetesCRD和安全策略即代码,开发团队和DevOps团队可以确保安全自动化从开发开始到生产部署都能得到“加持”,从而为应用程序提供更好的保护。原标题:HowtoAutomateContainerSecuritybyUsingCRDstoGetSecurityPolicyasCode,作者:NiteenKole
