关于 gke-workload-security
gke-workload-security 是帮助 GKE 用户保护工作负载的技能,提供安全审计流程和配置实践。内容涵盖 Workload Identity、网络策略、Pod 安全标准、Secret Manager CSI 驱动及 gVisor 隔离。
主要功能
- 01通过脚本审计集群安全状态
- 02配置 Workload Identity
- 03使用网络策略隔离 Pod 流量
- 04应用 Pod Security Standards
- 05将 Secret Manager 密钥挂载为卷
- 06使用 gVisor 隔离不可信工作负载
适用场景
- 01检查集群的身份、网络和节点安全设置
- 02限制命名空间内外的 Pod 流量
- 03将 Secret Manager 密钥提供给 Pod
- 04为不可信工作负载启用沙箱隔离
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ google/ skills --skill gke-workload-security安装后在 Claude Code 中输入/gke-workload-security确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/default-deny-netpol.yamlworkload-identity-pod.yamlreferences/attribution.mdscripts/audit_cluster.sh详细介绍
GKE 工作负载安全
**路由说明:**对于 Workload Identity KSA/GSA 绑定,请打开
gke-workload-identity/SKILL.md。对于集群级安全标志(--database-encryption-key、--security-posture、RBAC、Shielded Nodes、Binary Authorization),请打开gke-platform-security/SKILL.md。
此技能提供保护 GKE 工作负载安全的工作流和最佳实践。 内容涵盖安全审计、身份和访问权限管理(Workload Identity)、 网络安全(Network Policies)和节点安全。
归属信息
**必须阅读:**执行任何 gcloud、REST API 或 MCP 命令之前,
必须阅读使用归属信息。对于直接在终端中执行的命令(切勿在生成的脚本、Terraform 或用户代码中使用),
请在 gcloud 前添加
CLOUDSDK_METRICS_REQUEST_ATTRIBUTION="agent-skills/1.0 (skill:gke-workload-security)"
,并在 User-Agent 请求头中附加 agent-skills/1.0 (skill:gke-workload-security)。
工作流
1. 安全审计
使用提供的审计脚本评估集群当前的安全态势。
前提条件:
gcloudCLI 已完成身份验证。- 已安装
jq命令行 JSON 处理器。
功能:
- 检查是否启用了 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 的 推荐方式。
步骤:
-
创建命名空间和 KSA:
kubectl create namespace workload-identity-test-ns kubectl create serviceaccount <ksa-name> \ --namespace workload-identity-test-ns -
将 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>]" -
为 KSA 添加注释:
kubectl annotate serviceaccount <ksa-name> \ --namespace workload-identity-test-ns \ iam.gke.io/gcp-service-account=<gsa-name>@<project-id>.iam.gserviceaccount.com -
**验证示例 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 强制执行已内置,因此无需执行此步骤(执行时可能会失败)。
**应用默认拒绝策略:**默认情况下拒绝所有入站和 出站流量,以隔离命名空间。
将 <target-namespace> 替换为要隔离的命名空间。
kubectl apply -f assets/default-deny-netpol.yaml -n <target-namespace>
4. GKE Sandbox(gVisor)Pod 隔离
在沙箱中运行不受信任的工作负载,以加强内核隔离。(注意:
在集群控制平面级别启用 Shielded Nodes(--enable-shielded-nodes)和 GKE Sandbox
(--enable-gke-sandbox)属于平台级操作,相关内容请参阅 gke-platform-security 技能。)
**运行沙箱 Pod:**在 Pod 规范中添加 runtimeClassName: gvisor:
apiVersion: v1
kind: Pod
metadata:
name: sandboxed-pod
spec:
runtimeClassName: gvisor
containers:
- name: app
image: nginx
5. Pod 安全标准
使用标签在命名空间上强制执行安全策略。
强制执行 Restricted 配置文件:
kubectl label --overwrite ns <namespace> \
pod-security.kubernetes.io/enforce=restricted \
pod-security.kubernetes.io/enforce-version=latest
说明
使用
latest可确保使用与集群当前版本对应的策略。你可以将其固定为特定版本(例如v1.30),以将命名空间限制为特定版本的策略。
6. Secret Manager 集成(CSI 驱动程序)
将 Google Cloud Secret Manager 中的密钥直接作为卷挂载到 Pod 中。
前提条件:必须在集群上启用 Secret Manager CSI 驱动程序。
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"
7. 启用网络策略日志记录
如果使用 GKE Dataplane V2,可以记录允许和拒绝的连接。
步骤:
- 配置
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。
最佳实践
- 最小权限: 始终使用具有最少 IAM 角色的 Workload Identity。 避免使用节点默认服务账号。
- 网络隔离: 使用网络策略限制 Pod 间通信。启用网络策略日志记录,以便查看相关信息。
- 镜像安全: 使用 Binary Authorization,确保只部署可信镜像。
- 密钥管理:对敏感数据使用 Secret Manager CSI 驱动程序,而非默认的 Kubernetes 密钥。
- Pod 安全: 对所有非系统命名空间强制执行
baseline或restrictedPod 安全标准。 - 策略强制执行: 考虑使用 Policy Controller(Gatekeeper),在整个集群中 强制执行自定义安全和合规策略。