mcpField
G
gke-workload-security

gke-workload-security

github.com/googlecloudplatform安全16948 次安装3 天前更新
代码仓库

关于 gke-workload-security

面向 GKE 运维人员的工作负载安全指南,涵盖安全审计、Workload Identity、网络策略、节点防护和密钥管理,并附有配置步骤与示例。

主要功能

  1. 01审计集群安全配置
  2. 02配置 Workload Identity
  3. 03实施网络策略与默认拒绝
  4. 04启用 Shielded Nodes 和 GKE Sandbox
  5. 05执行 Pod Security Standards
  6. 06通过 CSI Driver 挂载 Secret Manager 密钥

适用场景

  1. 01检查集群身份与节点安全设置
  2. 02限制 Pod 间网络流量
  3. 03隔离不可信工作负载
  4. 04将 Secret Manager 密钥挂载到 Pod

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/googlecloudplatform/gke-mcp --skill gke-workload-security

安装后在 Claude Code 中输入/gke-workload-security确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

assets/
default-deny-netpol.yaml
workload-identity-pod.yaml
scripts/
audit_cluster.sh

详细介绍

GKE 工作负载安全

此技能提供用于保护 GKE 工作负载的工作流和最佳实践。 涵盖安全审计、身份和访问管理(Workload Identity)、网络安全(Network Policies)和节点安全。

工作流

1. 安全审计

使用提供的审计脚本评估集群当前的安全状况。

功能:

  • 检查是否启用了 Workload Identity。
  • 验证是否启用了 Network Policy。
  • 检查是否启用了 Shielded Nodes。
  • 检查是否启用了 Binary Authorization。
  • 检查是否配置了 Private Cluster。

命令:

./scripts/audit_cluster.sh <cluster-name> <region> <project-id>
2. 配置 Workload Identity

Workload Identity 允许 Kubernetes 服务账号(KSA)模拟 Google 服务账号(GSA)。这是工作负载访问 Google Cloud API 的推荐方式。

步骤:

  1. 创建命名空间和 KSA:

    kubectl create namespace workload-identity-test-ns
    kubectl create serviceaccount <ksa-name> \
        --namespace workload-identity-test-ns
    
  2. 将 KSA 绑定到 GSA:

    gcloud iam service-accounts add-iam-policy-binding <gsa-name>@<project-id>.iam.gserviceaccount.com \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:<project-id>.svc.id.goog[workload-identity-test-ns/<ksa-name>]"
    
  3. 为 KSA 添加注解:

    kubectl annotate serviceaccount <ksa-name> \
        --namespace workload-identity-test-ns \
        iam.gke.io/gcp-service-account=<gsa-name>@<project-id>.iam.gserviceaccount.com
    
  4. 验证示例 Pod: 使用现有资源 assets/workload-identity-pod.yaml 测试配置。先更新文件中的 <ksa-name>。

    kubectl apply -f ./assets/workload-identity-pod.yaml -n workload-identity-test-ns
    
3. 实施 Network Policies

使用 Network Policies 控制 Pod 之间的流量。默认情况下,所有流量都允许通过。

启用 Network Policy 强制执行:

gcloud container clusters update <cluster-name> \
    --update-addons=NetworkPolicy=ENABLED \
    --region <region>

说明

如果集群使用 Dataplane V2(--enable-dataplane-v2),则内置了 Network Policy 强制执行功能,无需执行此步骤(并且此步骤可能会失败)。

应用默认拒绝策略: 通过默认拒绝所有入站和出站流量来隔离命名空间。

将 替换为要隔离的命名空间。

kubectl apply -f ./assets/default-deny-netpol.yaml -n <target-namespace>
4. 启用 Shielded Nodes

确保节点运行时的完整性可验证。

命令:

gcloud container clusters update <cluster-name> \
    --enable-shielded-nodes \
    --region <region>
5. GKE Sandbox(gVisor)

在沙箱中运行不受信任的工作负载,以增强隔离。

启用 GKE Sandbox:

gcloud container clusters update <cluster-name> \
    --enable-gke-sandbox \
    --region <region>

运行沙箱 Pod: 在 Pod 规范中添加 runtimeClassName: gvisor。

6. Pod 安全标准

使用标签在命名空间上强制实施安全策略。

强制执行 Restricted 配置文件:

kubectl label --overwrite ns <namespace> \
    pod-security.kubernetes.io/enforce=restricted \
    pod-security.kubernetes.io/enforce-version=latest

说明

使用 latest 可确保采用与集群当前版本相对应的策略。你可以将其固定为特定版本(例如 v1.30),使命名空间始终使用某个特定版本的策略。

7. Secret Manager 集成(CSI Driver)

将 Google Cloud Secret Manager 中的密钥直接挂载为 Pod 中的卷。

前提条件:必须在集群上启用 Secret Manager CSI driver。

SecretProviderClass 示例:

apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: my-secret-provider
spec:
  provider: gcp
  parameters:
    secrets: |
      - resourceName: "projects/<project-id>/secrets/my-secret/versions/latest"
        fileName: "my-secret-file"

Pod 规范摘录示例:

spec:
  containers:
    - name: my-app
      volumeMounts:
        - name: secrets-store-inline
          mountPath: "/mnt/secrets"
          readOnly: true
  volumes:
    - name: secrets-store-inline
      csi:
        driver: secrets-store.csi.k8s.io
        readOnly: true
        volumeAttributes:
          secretProviderClass: "my-secret-provider"
8. 启用 Network Policy 日志记录

如果使用 GKE Dataplane V2,可以记录允许和拒绝的连接。

步骤:

  1. 配置 NetworkLogging 自定义资源。

NetworkLogging 清单示例:

apiVersion: networking.gke.io/v1alpha1
kind: NetworkLogging
metadata:
  name: default
spec:
  cluster:
    allow:
      log: true
      delegate: true
    deny:
      log: true
      delegate: true

这会将连接详情记录到 Cloud Logging。

最佳实践

  1. 最小权限: 始终使用 Workload Identity,并仅分配最低限度的 IAM 角色。避免使用节点默认服务账号。
  2. 网络隔离: 使用 Network Policies 限制 Pod 之间的通信。启用 Network Policy 日志记录,以便查看流量情况。
  3. 镜像安全: 使用 Binary Authorization,确保只部署受信任的镜像。
  4. 密钥管理:对于敏感数据,使用 Secret Manager CSI driver,而不是默认的 Kubernetes 密钥。
  5. Pod 安全: 在所有非系统命名空间上强制执行 baseline 或 restricted Pod 安全标准。
  6. 策略强制执行: 考虑使用 Policy Controller(Gatekeeper)在集群范围内强制执行自定义安全和合规策略。

评论

支持 Markdown