怎样使用 Trivy-Operator 保护 Kubernetes 部署

网络攻击通过利用不安全的代码和薄弱的网络流量安全性来渗透 Kubernetes 集群和容器。 必须对 Kubernetes 应用程序进行扫描和审计,以检测在安全漏洞期间可以让网络攻击者访问的漏洞。 在 Kubernetes 生产阶段运行的应用程序称为工作负载。 必须不惜一切代价保护这些工作负载,因为它们的安全性和功能性能决定了您品牌的成功。

我们必须假设明天将发生数据泄露并实施所有必要的安全措施。 今后,必须定期安装和使用 Kubernetes 工作负载扫描器和审计器(例如 Trivy-Operator),以确保工作负载配置清单在工作负载部署到生产阶段之前是安全的。 Kubernetes 体现了集群灾难或成功。 Trivy-Operator 是免费和开源的,它可以在所有三个操作系统中使用:Windows、macOS 和 Linux,作为一个插件。

在本文中,您将了解怎样保护工作负载的不同方法,并了解怎样在 Windows 上安装 Trivy-Operator。 此外,您将学习怎样使用 Trivy-Operator 审核您的工作负载。

先决条件

你需要 kubectl 和一个 运行集群.

怎样防止部署安全问题

保持 Kubernetes 集群安全的关键是考虑潜在威胁并实施安全措施来减轻这些威胁。 这将帮助您保护您的集群免受可能试图闯入您的集群的恶意用户和黑客的攻击。 安全的 Kubernetes 部署始于为 Kubernetes 节点选择安全硬件。 如果您还保护了进出集群和 Kubernetes 集群本身的网络通信,那将是最好的。 以下是可用于部署安全问题的技术列表:

  1. 更新 Kubernetes: 确保您的环境和基础架构始终使用最新的 Kubernetes 版本。 这些更新始终包含重要的安全补丁。 使用旧软件版本会使您面临安全漏洞的风险。

  2. 不使用容器升级权限: 为您的 pod 创建一个不同的服务帐户以添加最低权限。 默认服务帐户的问题在于它具有许多 pod 和应用程序可以访问的更多权限。 这增加了安全漏洞的影响,因为攻击者可以访问主机。

  3. 保护图像: 镜像是容器生命周期的开始。 安全的镜像给你的应用程序更多的生命,而不安全的镜像给你的容器带来灾难。 不安全的图像在公共存储库中很流行。 第三方组件造成的漏洞很难被发现。 必须仅从以下平台下载官方和受信任的图像,例如 码头工人中心神器中心. 此外,定期扫描和审核映像对于确保部署安全也很重要。

  4. 政策就是规则 消除不适当的配置和任务。 实施策略将自动使您能够阻止没有 livenessProbe 财产。 这个属性非常重要,因为它告诉 kubelet 您的 pod 的状态,以便它可以在 pod 死机时执行必要的措施。

  5. 日志包含关键证据 这可以帮助您捕获安全漏洞。 定期日志审计会发现对集群的恶意 Kube API 调用。 设置日志管理系统将帮助您轻松识别漏洞的根本原因。

  6. 未设置 liveProbe 和 readinessProbe 可能导致配置错误; 因为这两个属性将 Pod 的健康状况与 Kubelet 通信,Kubelet 负责替换死掉的 Pod。 另一方面, readinessProbe 将告诉您 Pod 是否已准备好部署,因为它保存了 Pod 的状态,即 Pod 何时准备好建立连接。 如果您在不知道其就绪状态的情况下部署 pod,您的应用程序可能会面临停机。

  7. 资源限制是关键组成部分 确保您的工作负载不会缺乏资源。 请记住,资源匮乏的容器最终会使应用程序任务窒息。 必须公平委派资源,以确保所有容器都有足够的资源。 此外,在生产阶段进行负载测试很重要,这样您就可以知道您的应用程序是否能够为所有客户提供服务,以及它是否大部分时间都可用。 负载测试还将使用 JMeter 等工具为您提供响应时间指标。

  8. 加密已经证明 随着时间的推移,成为保护敏感信息的最佳方式之一。 多年来,网络攻击者破解了加密算法,网络安全专家通过在长度和模式方面加强加密算法来应对。 仅使用最新和最强的加密,例如 Blowfish 加密算法,来加密您的秘密。

怎样使用 Kubectl 安装 Trivy-Operator

Trivy-Operator 可以使用 Kubectl 安装在每个操作系统上。 按照以下说明安装 Trivy-Operator 插件。

使用 Kubectl 安装 Trivy-Operator 插件:

$ kubectl apply -f https://raw.githubusercontent.com/aquasecurity/trivy-operator/v0.1.9/deploy/static/trivy-operator.yaml

您将获得以下输出:

role.rbac.authorization.k8s.io/trivy-operator created

rolebinding.rbac.authorization.k8s.io/trivy-operator created

service/trivy-operator created

检查 Trivy-Operator 插件是否安装成功:

$ kubectl get deployment -n trivy-system

您将获得以下输出,表明 Trivy-Operator 插件已安装。

NAME             READY   UP-TO-DATE   AVAILABLE   AGE

trivy-operator   1/1     1            1           2m3s

怎样使用 Trivy-Operator 评估您的部署

测试并查看 Trivy-Operator 插件的工作原理。 创建将使用 Trivy-Operator 扫描的部署资源。 创建一个 deployment.yaml 文件并添加以下内容:

    apiVersion: apps/v1

    kind: Deployment

    metadata:

      name: boemo

      namespace: earthly

      labels:

        app: boemo-app

    spec:

      replicas: 1

      selector:

        matchLabels:

          app: boemo-app

      template:

        metadata:

          labels:

            app: boemo-app

        spec:

          containers:

          - name: server

            image: nginx:1.17

            volumeMounts:

              - name: boemo-app

                mountPath: /usr/share/nginx/html

            ports:

            - containerPort: 80

              protocol: TCP

            resources:

              requests:

                cpu: 100m

                memory: "128M"

              limits:

                cpu: 100m

                memory: "256M"

            env:

            - name: LOG_LEVEL

              value: "DEBUG"

          volumes:

          - name: boemo-app

            configMap:

              name: boemo-app

              items:

              - key: body

                path: index.html

使用以下命令应用上述部署:

    $ kubectl apply -f deployment.yaml

创建部署资源后,Trivy-Operator 插件会自动检测部署并创建配置审计报告。 Trivy-Operator 仅扫描工作负载。 使用以下命令列出所有检测到和可用的配置审计报告:

    $ kubectl get configauditreports -o wide

您将获得以下显示可用配置报告的输出。 由于您之前只创建了一个部署,因此您只会看到一个名为的配置报告 replicaset-boemo-59d4567b6b

    NAME                                  SCANNER   AGE  CRITICAL HIGH  MEDIUM LOW

    replicaset-boemo-59d4567b6b   Trivy      11s          0            0            2        6

使用以下命令检索特定工作负载的配置审计结果:

    $ kubectl describe configauditreport replicaset-boemo-59d4567b6b

您将获得以下输出,为您提供详细的配置扫描结果。 结果将指定检测到的漏洞的严重性。 严重性等级为:

  • 高的

  • 中等的

  • 低的

所有被归类为高的漏洞必须尽快解决,以防止任何漏洞导致生产环境混乱。 标题字段说明检测到的漏洞的名称。 描述字段向您展示了解决检测到的漏洞必须采取的措施:

    Severity:     HIGH

        Success:      true

        Title:        Access to host network

        Category:     Kubernetes Security Check

        Check ID:     KSV003

        Description:  The container should drop all default capabilities and add only those that are needed for its execution.

        Messages:

          Container 'server' of ReplicaSet 'boemo-59d4567b6b' should add 'ALL' to 'securityContext.capabilities.drop'

        Severity:     LOW

        Success:      false

        Title:        Default capabilities not dropped

        Category:     Kubernetes Security Check

        Check ID:     KSV002

        Description:  A program inside the container can bypass AppArmor protection policies.

        Messages:

学到更多

要了解有关 Trivy-Operator 的更多信息,请参阅 项目文件.

文章标题 名称(可选) 电子邮件(可选) 描述

发送建议

注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com