Error:
An unexpected error occurred. Please click Reload to try again.
Error:
An unexpected error occurred. Please click Reload to try again.
配置 Kubernetes 审计指南Prisma SaaS. - Knowledge Base - Palo Alto Networks

配置 Kubernetes 审计指南Prisma SaaS.

9072
Created On 01/25/22 17:53 PM - Last Modified 06/20/23 19:51 PM


Symptom


  • 请参阅Kubernates 审计文档
  • 导航至“配置API服务器" 参考提供的步骤配置审计 webhook 后端
  • 在计算控制台上,导航到防御 > 访问 > Kubernetes >前往设置
  • 请注意,在控制台上,单击“前往设置" 用于查找配置所需的 webhook url 的选项,设置为空,并且那里没有 webhook url。 参考下图相关解释:
 

屏幕截图 2022-01-25 在 11.43.47AM .png



Environment


  • Prisma Cloud 计算(SaaS 部署)
  • Kubernetes(谷歌 Kubernetes 引擎)
  • Kubernetes(弹性 Kubernetes 服务和 Azure Kubernetes 服务)

屏幕截图 2022-01-25 在 11.50.50AM .png



Cause


 



Resolution


配置 Kubernetes 审计的步骤如下:

您需要以下信息
  • 控制台路径'URL (计算/管理/系统/实用程序)
  • 导出控制台=API令牌(计算/管理/系统/实用程序)
  • 导出令牌= <API代币>
  • 需要安装以下实用程序:
    • 卷曲
    • jq
    • 打开SSL
    • kubectl
    • 火狐
    • A 支持更新 kube-apiserver 清单的方法。 这通常是通过在主节点上编辑 /etc/kubernetes/manifests/kube-apiserver.manifest 来完成的,但可能依赖于 Linux/K8s 发行版。

 

TASK FLOW:

  1. 验证 Kubernetes 审核已启用Prisma Cloud计算
  2. 生成 Webhook URL
  3. 下载证书链并转换为 base64
  4. 生成 audit-webhook.yaml
  5. 添加网络钩子和policy配置到所有主节点
  6. 更新所有主节点上的 kube-apiserver 清单
  7. 测试以验证设置是否正常工作

 

第 1 步:验证 Kubernetes 审计是否已启用Prisma Cloud计算。
浏览到 Compute / Access / Kubernetes 并验证 Kubernetes 审计是否已启用并且具有您将要测试的规则(执行或附加到 pod 是最简单的)

屏幕截图 2022-01-25 在 12.48.30PM .png


第 2 步:生成 WebhookURL

为了生成 webhookURL ,您需要生成一个 webhook 后缀并将其附加到 '/api/v1/kubernetes/webhook/' 端点

运行以下命令创建一个 webhook 变量:

屏幕截图 2022-01-25 在 12.54.11PM .png
 

第 3 步:下载证书链并转换为 base64

下载证书链并导出为base64

  • 打开 Firefox 并浏览到“控制台路径” URL
  • 单击证书图标,然后单击工具栏中的连接安全箭头:
屏幕截图 2022-01-25 在 12.58.19PM .png
  • 单击更多信息
2022 年 12 月 59 日的屏幕截图 2022-01-25PM .png
  • 单击查看证书
屏幕截图 2022-01-26 在 11.42.57AM .png
  • 向下滚动到杂项并下载PEM链

屏幕截图 2022-01-26 在 11.46.40AM .png

  • 在您的终端中,cd 到文件夹PEM链被下载到。
  • 运行以下命令保存PEM作为 base64 编码变量的链:
export cacerts=$(openssl base64 -in cloud-twistlock-com-chain.pem -A)


第四步:生成audit-webhook.yaml

生成 audit-webhook.yaml 和 audit-policy将审计事件发送到所需的 .yaml 文件 Prisma Cloud

  • 运行以下命令生成 audit-webhook.yaml:
    cat <<EOF > audit-webhook.yaml
    
    apiVersion: v1
    kind: Config
    preferences: {}
    clusters:
    - name: audit-cluster
      cluster:
        server: $webhookurl
        certificate-authority-data: $cacerts
    contexts:
    - name: webhook
      context:
        cluster: audit-cluster
        user: kube-apiserver
    current-context: webhook
    EOF
    • 运行以下命令生成默认审计policy:
    cat <<EOF > audit-policy.yaml
    
    apiVersion: audit.k8s.io/v1 # This is required.
    kind: Policy
    # Generate audit events only for ResponseComplete or panic stages of a request.
    omitStages:
      - "RequestReceived"
      - "ResponseStarted"
    rules:
      # Audit on pod exec/attach events
      - level: Request
        resources:
        - group: ""
          resources: ["pods/exec", "pods/attach"]
    
      # Audit on pod creation events
      - level: Request
        resources:
        - group: ""
          resources: ["pods"]
        verbs: ["create"]
    
      # Audit on changes to the twistlock namespace (defender daemonset)
      - level: Request
        verbs: ["create", "update", "patch", "delete"]
        namespaces: ["twistlock"]
    
      # Default catch all rule
      - level: None
    EOF
    


    第 5 步:添加 webhook 和policy配置到所有主节点

    然后,您需要将审计文件添加到 kube-apiserver 可访问的文件中的所有主节点。

    • 运行以下命令查看 kube-apiserver 可访问的主机卷:
    kubectl get pods -n kube-system kube-apiserver-<rest of pod name> -o jsonpath='{range .spec.volumes[*]}{.hostPath.path}{"\n"}{end}'
    
    • 记下最适合您放置的路径YAML之前生成的文件。 例如,这为我返回了以下路径:
    /var/log/kube-apiserver.log
    /etc/ssl
    /etc/pki/tls
    /etc/pki/ca-trust
    /usr/share/ssl
    /usr/ssl
    /usr/lib/ssl
    /usr/local/openssl
    /var/ssl
    /etc/openssl
    /etc/kubernetes/in-tree-cloud.config
    /srv/kubernetes/ca.crt
    /srv/kubernetes/kube-apiserver
    /srv/sshproxy
    /etc/kubernetes/kube-apiserver-healthcheck/secrets

    I 确定 /srv/kubernetes/kube-apiserver 路径对我来说最有意义。

    • SCP audit-webhook.yaml 和 audit-policy .yaml 到您选择的路径中的每个主节点(在我的例子中是 /srv/kubernetes/kube-apiserver)。

    第 6 步:更新所有主节点上的 kube-apiserver 清单

    此步骤将根据 k8s 发行版而有所不同,因此在继续之前与供应商/文档确认这是正确的方法。

    • 找到 kube-apiserver.manifest 文件
    • 在文本编辑器中打开 kube-apiserver.manifest 并找到与此类似的部分:
    spec:
    
      containers:
      - command:
        - kube-apiserver
        - --admission-control-config-file=/etc/kubernetes/extra-config/admission-control-config.yaml
        - --advertise-address=X.X.X.X
        - --allow-privileged=true
        - --audit-log-maxage=30
        - --audit-log-maxbackup=10
        - --audit-log-maxsize=100
        - --audit-log-path=/var/log/kubernetes/kube-apiserver.log
    • 将以下选项添加到“-kube-apiserver”下的命令列表中,并确保将红色路径更新为您之前选择的路径。
    --audit-policy-file=/srv/kubernetes/kube-apiserver/audit-policy.yaml
    --audit-webhook-config-file=/srv/kubernetes/kube-apiserver/audit-webhook.yaml
    
    • 完成后,更新 kube-apiserver.manifest 应该如下所示:
    spec:
    
      containers:
      - command:
        - kube-apiserver
        - --admission-control-config-file=/etc/kubernetes/extra-config/admission-control-config.yaml
        - --advertise-address=X.X.X.X
        - --allow-privileged=true
        - --audit-log-maxage=30
        - --audit-log-maxbackup=10
        - --audit-log-maxsize=100
        - --audit-policy-file=/srv/kubernetes/kube-apiserver/audit-policy.yaml
        - --audit-webhook-config-file=/srv/kubernetes/kube-apiserver/audit-webhook.yaml
        - --audit-log-path=/var/log/kubernetes/kube-apiserver.log
    • 注意:您的 kube-apiserver 清单文件MUST启用 audit-log-path 选项以打开审计日志记录。
    • 保存清单文件后,它应该会导致 kube-apiserver 重新启动——这可能需要大约 30 秒才能完成,您可能会暂时失去对API.
     
    第 7 步:测试以验证设置是否正常工作
    • 针对其中一个默认规则执行测试以验证其是否正常工作。

    • 在容器中运行 exec 以测试其中一个默认规则:
    kubectl exec <pod> -it -- /bin/sh
    • 检查Prisma Cloud计算/监控/事件/Kubernetes 审计中的控制台

    屏幕截图 2022-01-26 在 11.56.44AM .png



    Additional Information


    故障排除

    如果 kube-apiserver pod 无法重新启动,通常这意味着您的清单文件存在问题。 您需要对此进行故障排除,但该过程取决于 kubernetes 分布。 A 几种可能的方法是:

    • journalctl --unit kubelet
    • docker 日志 <容器>
    • crictl 日志 <容器>
     

    如果Prisma Cloud控制台无法显示审计日志,通常 kube-apiserver 日志会提供线索:

    • kubectl 记录 kube-apiserver-<rest of pod name>

    相关信息


      Actions
      • Print
      • Copy Link

        https://knowledgebase.paloaltonetworks.com/KCSArticleDetail?id=kA14u000000oN4GCAU&lang=zh_CN&refURL=http%3A%2F%2Fknowledgebase.paloaltonetworks.com%2FKCSArticleDetail

      Choose Language