我们将向您展示如何使用Kubernetes CRD自动化安全性并保护您的应用程序。翻译来自杂志Tomorrow Cloudy Mail.ru Cloud Solutions团队。资料来源:Niteen Kole如何使用CRD通过附加代码获取安全策略作为代码来自动化容器安全。为什么需要CRD
长期以来,安全一直是DevOps团队的头疼问题。现有的软件工具成功地解决了自动化组装和推出应用程序的问题-基于容器的自动推出应用程序已成为标准。同时,安全设置的自动化也很落后。您可以实现自动漏洞扫描,但是为应用程序安全性手动配置策略的需求变得令人头疼。Kubernetes自定义资源定义(CRD)的引入将有助于解决在应用程序组装和推出的初始阶段将安全策略定义为代码的问题,并在将应用程序推广到生产环境时自动使用它们。CRD可用于实施全局安全策略,这些策略定义应用程序行为并配置所使用的多个Kubernetes集群的安全性。使用CRD进行自动化并将安全设置集中定义为代码,您可以同时加强安全设置并简化其应用。最终,这将导致应用程序变得更加高效,错误更少,最重要的是更加安全。CRD如何工作?
为了定义安全策略,我们将在NeuVector容器平台内使用NeuVector CRD 。 NeuVector在容器安全方面的替代方案:AquaSec,StackRox,Sysdig Secure,Twistlock。NeuVector CRD包含的策略首先收集正常应用程序行为的完整档案。收集到的行为会添加到白名单,包括所有网络规则,进程,协议和文件操作。所有这些共同构成了一组标准应用程序操作。然后,应用安全设置,仅允许在组成应用程序的容器内进行已确认的网络连接。这些连接是在检查OSI模型层7(应用程序协议层)期间识别的。因此,将防止任何未经授权的外部连接尝试。安全策略将阻止攻击者使用容器外部或内部的通信来将应用程序用于自己的目的。CRD允许您分别定义全局规则和每个服务的规则。CRD还与Kubernetes RBAC兼容,允许您使用服务帐户和Kubernetes角色来实施安全策略。另外,版本控制可用于为应用程序的每个版本创建其自己的策略;支持与安全策略管理工具(如Open Policy Agent)集成。可以在Mail.ru云解决方案云中免费测试Kubernetes现成的群集,该群集具有基于Prometheus和Grafana以及TLS和RBAC的经过特殊调整的监控系统,用于管理访问权限和标准化分布式团队中的开发。创建NeuVector CRD
NeuVector CRD允许您使用本机YAML Kubernetes文件创建安全规则。创建一个包含NeuVector CRD描述的nvsecurityrule.yaml文件。该文件控制NvSecurityRule
与性质namespaced
和NvClusterSecurityRule
群集有关的内容。apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
name: nvsecurityrules.neuvector.com
spec:
group: neuvector.com
names:
kind: NvSecurityRule
listKind: NvSecurityRuleList
plural: nvsecurityrules
singular: nvsecurityrule
scope: Namespaced
version: v1
versions:
— name: v1
served: true
storage: true
---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
name: nvclustersecurityrules.neuvector.com
spec:
group: neuvector.com
names:
kind: NvClusterSecurityRule
listKind: NvClusterSecurityRuleList
plural: nvclustersecurityrules
singular: nvclustersecurityrule
scope: Cluster
version: v1
versions:
— name: v1
served: true
storage: true
要创建CRD,请运行:$ kubectl create -f nvsecurityrule.yaml
只要NeuVector CRD被创建,所有资源后与参数创建kind
:NvSecurityRule
将由该CRD处理。因此,您可以使用连接的安全策略来创建自己的资源。在做任何事情之前,建议先学习NeuVector文档并添加必要的clusterroles
和clusterrolebindings
。另外,使用此CRD在Kubernetes群集中应用NeuVector安全策略需要正确的权限设置(RBAC)。 CRD为任何名称空间定义的安全策略只能由有权部署到指定名称空间的用户应用。将安全策略应用于群集需要群集管理员权限。以下是来自demo-security-v1.yaml的一段测试代码,该代码通过仅通过HTTP提供对相同名称空间的其他容器的访问来限制nginx-pod
名称空间中demo
的容器。apiVersion: v1
items:
- apiVersion: neuvector.com/v1
kind: NvSecurityRule
metadata:
name: nv.nginx-pod.demo
spec:
egress:
— Selector:
criteria:
— key: service
op: =
value: node-pod.demo
— key: domain
op: =
value: demo
name: nv.node-pod.demo
action: allow
applications:
- HTTP
name: nv.node-pod.demo-egress-0
ports: any
— Selector:
criteria:
— key: service
op: =
片段下方应是对名称空间中的容器所允许的所有网络连接的描述demo
,例如,与服务器的连接redis
以及每个容器所允许的进程和磁盘活动。不要忘记先部署NeuVector安全策略,然后再部署应用程序。因此,安全策略将从应用程序启动的那一刻起生效。要应用安全策略:$ kubectl create -f demo-security-v1.yaml
NeuVector读取创建的资源中的安全策略,并使用REST API与NeuVector控制器联系,后者根据传输的安全策略创建规则和配置。将安全策略作为代码应用的选项
将安全策略用作代码为DevOps / DevSecOps命令和程序员都提供了很多机会。这里有些例子。在建筑应用程序的初始阶段开发和测试安全清单
开发人员可以在开发的早期阶段使用CRD使应用程序更安全。他们可以同时制作用于部署和应用安全策略的清单。构建映像,自动检查漏洞并得到DevOps团队的批准后,DevOps可以验证这两个清单,并从安全的角度向开发团队提供建议。从最初的部署到生产,新的应用程序将与有效的安全策略一起部署。
使用行为分析来创建安全策略
DevOps团队可以在测试环境中使用NeuVector行为分析功能来开发安全策略并创建适用于NeuVector CRD的Yaml文件。下图从该图的右下角开始,显示了您的DevOps团队如何将应用程序部署到测试环境,在该环境中对应用程序的行为进行了完整的分析,并形成了网络,文件活动和流程的安全配置文件。这些规则将导出并传递给进行必要调整的开发人员和DevOps,后者在将其用于生产之前对其进行测试。
全球安全政策
NeuVector CRD允许您定义不与特定应用程序或群集中的一组应用程序绑定的全局安全性策略。例如,您的安全或实施团队可能会定义全局网络规则,以阻止所有容器中的任何连接或配置对群集中所有进程的监视访问。
结合使用通用安全策略和应用程序安全策略,您可以构建组织所需的复杂而精确的安全设置。以下是禁止从容器到外部的ssh连接的示例:- apiVersion: neuvector.com/v1
kind: NvClusterSecurityRule
metadata:
name: containers
namespace: default
spec:
egress: []
file: []
ingress:
— Selector:
criteria: []
name: external
action: deny
applications:
- SSH
name: containers-ingress-0
ports: tcp/22
process:
— action: deny
name: ssh
path: /bin/ssh
target:
Selector:
criteria:
— key: container
op: =
value: '*'
name: containers
policymode: null
version: v1
将安全策略从测试迁移到生产
借助NeuVector CRD,您可以控制从测试环境到生产环境的安全策略(全部或仅所需策略)的自动迁移。在NeuVector控制台中,您可以配置新服务的模式以进行检测,监视或保护。选择监视或保护模式意味着任何部署或服务更新都必须包含您定义的安全策略设置。因此,仅在应用安全策略后,服务才会进入活动状态。使用Kubernetes CRD和安全策略的功能作为代码,您的开发人员和DevOps将能够为应用程序应用安全策略的自动化,并确保在从开发开始到投入生产的各个阶段,都更好地保护了应用程序。