Gke Workload Security

by google55b4e13eba6dNo licenseListed Oct 8, 2026Updated Oct 8, 2026

Audits, configures, and hardens workload-level security controls for Google Kubernetes Engine (GKE) applications and namespaces. Covers running security audits (`audit_cluster.sh`), enforcing Network Policies (default-deny and Dataplane V2 logging), isolating high-risk pods inside GKE Sandbox (`gVisor`), enforcing Pod Security Standards (`restricted` labeling) and pod securityContext, and mounting Secret Manager secrets via CSI (`SecretProviderClass`). Use when auditing workload security posture, isolating namespaces, applying pod security standards, or configuring network policies and secret volume mounts. Don't use for Workload Identity (use gke-workload-identity), cluster-wide control plane security, RBAC hardening, Binary Authorization, Shielded Nodes, or enabling platform-level GKE add-ons (use gke-platform-security instead).

FeaturedIncludes scriptsSecurityDevOps & Cloud
AI-generated overview

Audits and hardens GKE workload security: network policies, sandbox isolation, pod security standards and secret mounts.

What it does
Provides workflows and manifests for securing Google Kubernetes Engine workloads, including a cluster audit script that checks Workload Identity, network policy, Shielded Nodes, Binary Authorization and private cluster settings. It also covers applying default-deny network policies, running pods in GKE Sandbox (gVisor), enforcing Pod Security Standards labels, mounting Secret Manager secrets via the CSI driver, and enabling Dataplane V2 network logging. It ships an audit shell script and example YAML assets for network policy and workload identity pods.
When to use it
Use when auditing or hardening workload-level security posture in GKE, isolating namespaces with network policies, applying pod security standards, sandboxing untrusted pods, or configuring secret volume mounts. It is not intended for Workload Identity bindings, cluster control plane security, RBAC hardening, Binary Authorization or platform-level add-ons.
Requirements
Requires the gcloud CLI authenticated to a GKE project and the jq JSON processor for the audit script; kubectl is needed to apply the manifests. Cluster-side features such as the Secret Manager CSI driver and Dataplane V2 must already be enabled. Ships an executable audit script and YAML assets.

GKE Workload Security

Routing Note: For Workload Identity KSA/GSA bindings, open gke-workload-identity/SKILL.md. For cluster-level security flags (--database-encryption-key, --security-posture, RBAC, Shielded Nodes, Binary Authorization), open gke-platform-security/SKILL.md.

This skill provides workflows and best practices for securing GKE workloads. It covers security auditing, Identity and Access Management (Workload Identity), Network Security (Network Policies), and Node Security.

Workflows

1. Security Audit

Assess the current security posture of your cluster using the provided audit script.

Prerequisites:

  • gcloud CLI authenticated.
  • jq command-line JSON processor installed.

Capabilities:

  • Checks for Workload Identity.
  • Verifies Network Policy is enabled.
  • Checks if Shielded Nodes are enabled.
  • Checks if Binary Authorization is enabled.
  • Checks for Private Cluster configuration.

Command:

bash
scripts/audit_cluster.sh <cluster-name> <region> <project-id>

2. Configure Workload Identity

Workload Identity allows Kubernetes Service Accounts (KSAs) to impersonate Google Service Accounts (GSAs). This is the recommended method for workloads to access Google Cloud APIs.

Steps:

  1. Create Namespace and KSA:

    bash
    kubectl create namespace workload-identity-test-nskubectl create serviceaccount <ksa-name> \    --namespace workload-identity-test-ns
  2. Bind KSA to GSA:

    bash
    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. Annotate KSA:

    bash
    kubectl annotate serviceaccount <ksa-name> \    --namespace workload-identity-test-ns \    iam.gke.io/gcp-service-account=<gsa-name>@<project-id>.iam.gserviceaccount.com
  4. Verify Example Pod: Use existing asset assets/workload-identity-pod.yaml to test the configuration. Update the <ksa-name> in the file first.

    bash
    kubectl apply -f assets/workload-identity-pod.yaml -n workload-identity-test-ns

3. Implement Network Policies

Control traffic flow between Pods using Network Policies. By default, all traffic is allowed.

Enable Network Policy Enforcement:

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

[!NOTE] If your cluster uses Dataplane V2 (--enable-dataplane-v2), Network Policy enforcement is built-in and this step is not required (and may fail).

Apply Default Deny Policy: Isolate namespaces by denying all ingress and egress traffic by default.

Replace <target-namespace> with the namespace you want to isolate.

bash
kubectl apply -f assets/default-deny-netpol.yaml -n <target-namespace>

4. GKE Sandbox (gVisor) Pod Isolation

Run untrusted workloads in a sandbox for extra kernel isolation. (Note: Enabling Shielded Nodes (--enable-shielded-nodes) and GKE Sandbox (--enable-gke-sandbox) at the cluster control plane level are platform-level actions covered in the gke-platform-security skill.)

Run a Sandboxed Pod: Add runtimeClassName: gvisor to your Pod spec:

yaml
apiVersion: v1kind: Podmetadata:  name: sandboxed-podspec:  runtimeClassName: gvisor  containers:  - name: app    image: nginx

5. Pod Security Standards

Enforce security policies on namespaces using labels.

Enforce Restricted Profile:

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

[!NOTE] Using latest ensures you use the policies corresponding to the cluster's current version. You can pin it to a specific version (e.g., v1.30) to lock down the namespace to policies of a specific release.

6. Secret Manager Integration (CSI Driver)

Mount secrets from Google Cloud Secret Manager directly as volumes in your pods.

Prerequisites: Secret Manager CSI driver must be enabled on the cluster.

Example SecretProviderClass:

yaml
apiVersion: secrets-store.csi.x-k8s.io/v1kind: SecretProviderClassmetadata:  name: my-secret-providerspec:  provider: gcp  parameters:    secrets: |      - resourceName: "projects/<project-id>/secrets/my-secret/versions/latest"        fileName: "my-secret-file"

Example Pod Spec excerpt:

yaml
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. Enable Network Policy Logging

If using GKE Dataplane V2, you can log allowed and denied connections.

Steps:

  1. Configure the NetworkLogging custom resource.

Example NetworkLogging Manifest:

yaml
apiVersion: networking.gke.io/v1alpha1kind: NetworkLoggingmetadata:  name: defaultspec:  cluster:    allow:      log: true      delegate: true    deny:      log: true      delegate: true

This will log connection details to Cloud Logging.

Best Practices

  1. Least Privilege: Always use Workload Identity with minimal IAM roles. Avoid using Node default service accounts.
  2. Network Isolation: Use Network Policies to restrict Pod-to-Pod communication. Enable Network Policy Logging for visibility.
  3. Image Security: Use Binary Authorization to ensure only trusted images are deployed.
  4. Secret Management: Use Secret Manager CSI driver instead of default Kubernetes secrets for sensitive data.
  5. Pod Security: Enforce baseline or restricted Pod Security Standards on all non-system namespaces.
  6. Policy Enforcement: Consider using Policy Controller (Gatekeeper) to enforce custom security and compliance policies across the cluster.

Resources

Source and attribution

Source:google/skillsinskills/cloud/gke-workload-securityat commit55b4e13

License: No license

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal

More from google/skills

Dpop Adoption

google

Featured

Implement and debug OAuth 2.0 DPoP (RFC 9449) refresh token sender-constraining for WebCrypto, Node.js ES6, and browser runtimes integrating with Google's OAuth platform. Use when configuring non-extractable asymmetric key pairs (P-256), generating DPoP Proof JWTs for authorization code exchange and token refresh, or handling 400 use_dpop_nonce challenge retry loops at oauth2.googleapis.com/token. Don't use for unconstrained OAuth 2.0 flows (where refresh tokens are not bound to a client key pair), or for Google Cloud IAM / service account authentication.

Awaiting classificationOct 8, 2026

Finding Google Skills

google

Featured

Google platform decision and setup guidance, loaded on demand from Google's skill catalog. Use when a developer is choosing or setting up part of their stack, such as where to run a service, a database, storage, messaging, authentication, analytics, ads, or AI model serving, and a Google product is a reasonable candidate - whether or not a vendor is named - or when a request names a Google product or API. Brings in the matching Google skill so the answer can weigh Google options, their trade-offs, and when they are not the right fit. Skip when the stack is already settled on another provider and no Google product is named, or the task involves no platform choice.

Awaiting classificationOct 8, 2026

Spanner Basics

google

Featured

Assists in provisioning instances and databases, designing performant schemas, and querying data in Spanner. Use when designing primary keys, writing SQL queries or client library code, or diagnosing performance issues.

Awaiting classificationOct 8, 2026

Secops Triage

google

Featured

Guides SOC analysts through triaging Google SecOps security alerts, from investigation to closure or escalation.

SecurityOct 8, 2026

Secops Investigate

google

Featured

Guides SOC analysts through deep security incident and entity investigations in Google SecOps using UDM queries and timelines.

SecurityOct 8, 2026

Secops Hunt

google

Featured

Expert guidance for proactive threat hunting in Google SecOps. Use when proactively hunting for threats, retroactively analyzing indicators of compromise (IoCs), performing prevalence searches across enterprise events, hunting for MITRE ATT&CK techniques, or detecting behavioral and statistical outliers using UDM queries. Don't use for incoming alert triage (use secops-triage), active incident response and timeline deep-dives on a known breach (use secops-investigate), or detection rule authoring (use secops-detection-engineering).

Awaiting classificationOct 8, 2026