配置 Kubernetes 审计指南Prisma SaaS.
Symptom
- 请参阅Kubernates 审计文档
- 导航至“配置API服务器" 参考提供的步骤配置审计 webhook 后端
- 在计算控制台上,导航到防御 > 访问 > Kubernetes >前往设置
- 请注意,在控制台上,单击“前往设置" 用于查找配置所需的 webhook url 的选项,设置为空,并且那里没有 webhook url。 参考下图相关解释:
Environment
- Prisma Cloud 计算(SaaS 部署)
- Kubernetes(谷歌 Kubernetes 引擎)
- Kubernetes(弹性 Kubernetes 服务和 Azure Kubernetes 服务)
Cause
- 根据发行说明Prisma Cloud计算版本 21.08.514
- 删除了对 Kubernetes 动态审计配置的支持,这在 Kubernetes 1.19 中已弃用。 动态审计配置以前用于Prisma CloudKubernetes 审计。 Prisma CloudKubernetes 审计现在使用常规 webhook 后端.
Resolution
配置 Kubernetes 审计的步骤如下:
您需要以下信息
- 控制台路径'URL (计算/管理/系统/实用程序)
- 导出控制台=API令牌(计算/管理/系统/实用程序)
- 导出令牌= <API代币>
- 需要安装以下实用程序:
- 卷曲
- jq
- 打开SSL
- kubectl
- 火狐
- A 支持更新 kube-apiserver 清单的方法。 这通常是通过在主节点上编辑 /etc/kubernetes/manifests/kube-apiserver.manifest 来完成的,但可能依赖于 Linux/K8s 发行版。
TASK FLOW:
- 验证 Kubernetes 审核已启用Prisma Cloud计算
- 生成 Webhook URL
- 下载证书链并转换为 base64
- 生成 audit-webhook.yaml
- 添加网络钩子和policy配置到所有主节点
- 更新所有主节点上的 kube-apiserver 清单
- 测试以验证设置是否正常工作
第 1 步:验证 Kubernetes 审计是否已启用Prisma Cloud计算。
浏览到 Compute / Access / Kubernetes 并验证 Kubernetes 审计是否已启用并且具有您将要测试的规则(执行或附加到 pod 是最简单的)
第 2 步:生成 WebhookURL
为了生成 webhookURL ,您需要生成一个 webhook 后缀并将其附加到 '/api/v1/kubernetes/webhook/' 端点
运行以下命令创建一个 webhook 变量:
第 3 步:下载证书链并转换为 base64
下载证书链并导出为base64
- 打开 Firefox 并浏览到“控制台路径” URL
- 单击证书图标,然后单击工具栏中的连接安全箭头:
- 单击更多信息
- 单击查看证书
- 向下滚动到杂项并下载PEM链
- 在您的终端中,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.
针对其中一个默认规则执行测试以验证其是否正常工作。
- 在容器中运行 exec 以测试其中一个默认规则:
kubectl exec <pod> -it -- /bin/sh
- 检查Prisma Cloud计算/监控/事件/Kubernetes 审计中的控制台
Additional Information
故障排除
如果 kube-apiserver pod 无法重新启动,通常这意味着您的清单文件存在问题。 您需要对此进行故障排除,但该过程取决于 kubernetes 分布。 A 几种可能的方法是:
- journalctl --unit kubelet
- docker 日志 <容器>
- crictl 日志 <容器>
如果Prisma Cloud控制台无法显示审计日志,通常 kube-apiserver 日志会提供线索:
- kubectl 记录 kube-apiserver-<rest of pod name>
相关信息