opción
HogarHogar Skill Seguridad gke-security

gke-security

google/skills google/skills

Refuerza la seguridad de los clústeres de Google Kubernetes Engine (GKE) mediante Workload Identity, Secret Manager, RBAC, autorización de binarios, políticas de red y estándares de seguridad de pods.

...Expandir todo
16
Tiempo actualizado 3 de septiembre de 2026

Seguridad de GKE

Esta guía aborda la configuración de seguridad para los clústeres de GKE. La ruta recomendada aplica de forma predeterminada una política de seguridad reforzada.

Herramientas MCP: get_cluster, check_k8s_auth, get_k8s_resource, apply_k8s_manifest, update_cluster

Valores predeterminados de seguridad de la ruta óptima

Parámetro Valor de la ruta óptima Día 0/1 Notas
workloadIdentityConfig.workloadPool .svc.id.goog Día 0 Federación de identidades de cargas de trabajo para pods
secretManagerConfig.enabled true Día 1 Integración con Google Secret Manager
secretManagerConfig.rotationConfig habilitado: true, intervalo de rotación: 120s Día 1 Rotación automática de secretos
rbacBindingConfig.enableInsecureBindingSystemAuthenticated false Día 0 Bloquea los enlaces «system:authenticated» del sistema heredado
rbacBindingConfig.enableInsecureBindingSystemUnauthenticated false Día 0 Bloquea el sistema heredado : enlaces no autenticados
nodeConfig.shieldedInstanceConfig.enableSecureBoot true Día 0 Integridad de arranque verificable
nodeConfig.shieldedInstanceConfig.enableIntegrityMonitoring true Día 0 Comprobaciones de integridad en tiempo de ejecución
nodeConfig.workloadMetadataConfig.mode GKE_METADATA Día 0 Bloquea la API de metadatos heredada y aplica la identidad de la carga de trabajo
Configuración de clúster privado + Dataplane V2 Consulta la habilidad gke-networking Día 0 Nodos privados, aplicación de puntos de conexión privados, ADVANCED_DATAPATH

Federación de Workload Identity

La identidad de carga de trabajo es la forma recomendada para que los pods accedan a las API de Google Cloud. Elimina la necesidad de claves de cuenta de servicio estáticas.

Configuración

# 1. Crear una cuenta de servicio de Google (GSA)
gcloud iam service-accounts create  \
  --project  \
  --display-name "Workload Identity SA" \
  --quiet

# 2. Otorgar roles de IAM a la GSA
gcloud projects add-iam-policy-binding  \
  --member "serviceAccount:@.iam.gserviceaccount.com" \
  --role "" \
  --quiet

# 3. Crear una cuenta de servicio de Kubernetes (KSA)
kubectl create namespace 
kubectl create serviceaccount  --namespace 

# 4. Vincular la KSA a la GSA
gcloud iam service-accounts add-iam-policy-binding \
  @.iam.gserviceaccount.com \
  --role roles/iam.workloadIdentityUser \
  --member "serviceAccount:.svc.id.goog[/]" \
  --quiet

# 5. Añadir anotaciones a la cuenta de servicio (KSA)
kubectl annotate serviceaccount  \
  --namespace  \
  iam.gke.io/gcp-service-account=@.iam.gserviceaccount.com

Consulte assets/workload-identity-pod.yaml para ver un pod de prueba.

Verificación

kubectl run workload-identity-test \
  --image=gcr.io/google.com/cloudsdktool/cloud-sdk:slim \
  --serviceaccount= --namespace= \
  --rm -it -- gcloud auth list --quiet

Integración con Secret Manager

La ruta recomendada habilita Secret Manager con rotación automática. Los secretos se sincronizan con los secretos de Kubernetes.

# Comprueba que Secret Manager esté habilitado en el clúster
gcloud container clusters describe  --region  \
  --format="value(secretManagerConfig.enabled)" \
  --quiet

# Actívalo si aún no está habilitado (cambio del día 1)
gcloud container clusters update  --region  \
  --enable-secret-manager \
  --secret-manager-rotation-interval=120s \
  --quiet

Montaje de secretos mediante un volumen CSI (ejemplo de implementación)

Una vez habilitado el complemento Secret Manager, las cargas de trabajo pueden montar secretos como volúmenes utilizando el controlador CSI de Secrets Store. Para ello, hay que seguir dos pasos:

  1. Definir una clase `SecretProviderClass` para especificar qué secretos se deben recuperar de Secret Manager.
  2. Montar el volumen en un Deployment haciendo referencia a esa clase.

[!IMPORTANTE] Práctica recomendada en producción: Demuestra siempre las integraciones de cargas de trabajo (como Secret Manager CSI) utilizando manifiestosde despliegue que cumplan los estándares de producción, en lugar de manifiestos de pod sin procesar.

Paso 1: Crear la clase SecretProviderClass

apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: app-secrets-provider
  namespace: default
spec:
  provider: gke  # Identifica el proveedor gestionado por GKE
  parameters:
    secrets: |
      - resourceName: "projects//secrets/db-password/versions/latest"
        fileName: "db-password.txt"

Paso 2: Montar el secreto en un Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: secure-app
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: secure-app
  template:
    metadata:
      labels:
        app: secure-app
    spec:
      serviceAccountName: secure-ksa  # Debe estar vinculado a una cuenta de servicio de Google (GSA) con el rol «Secret Accessor» de Secret Manager
      containers:
      - name: app
        image: 
        volumeMounts:
        - name: secrets-volume
          mountPath: "/var/secrets"
          readOnly: true
      volumes:
      - name: secrets-volume
        csi:
          driver: secrets-store.csi.k8s.io
          readOnly: true
          volumeAttributes:
            secretProviderClass: "app-secrets-provider"

Fortalecimiento de RBAC

La ruta recomendada desactiva los enlaces RBAC heredados e inseguros que conceden un amplio acceso a los grupos «system:authenticated » y «system:unauthenticated ».

# Comprueba que los enlaces inseguros estén desactivados
gcloud container clusters describe  --region  \
  --format="yaml(rbacBindingConfig)" \
  --quiet

Prácticas recomendadas para RBAC:

  • Utiliza roles con ámbito de espacio de nombres en lugar de ClusterRoles para todo el clúster
  • Realice enlaces a grupos o cuentas de servicio específicos, nunca a «system:authenticated»
  • Audita los permisos a través de MCP: check_k8s_auth(parent="...", verb="list", resourceType="pods", namespace="...") (o kubectl auth can-i --list --as=)
  • Revisa las vinculaciones mediante MCP: get_k8s_resource(parent="...", resourceType="clusterrolebinding") (o kubectl get clusterrolebindings,rolebindings --all-namespaces)

Consulta la habilidad gke-multitenancy para la planificación de RBAC empresarial y https://docs.cloud.google.com/kubernetes-engine/docs/best-practices/rbac.md.txt

Autorización binaria

No está habilitada de forma predeterminada en la ruta estándar, pero se recomienda para la procedencia de imágenes de producción:

# Habilitar la autorización binaria
gcloud container clusters update  --region  \
  --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \
  --quiet

Políticas de red

Dataplane V2 (ruta principal) ofrece la aplicación integrada de políticas de red. Aplicar denegación por defecto por espacio de nombres:

# MCP (recomendado)
apply_k8s_manifest(parent="...", yamlManifest="")

# Alternativa con kubectl
kubectl apply -f ./assets/default-deny-netpol.yaml -n 

Entorno aislado de GKE (gVisor)

Para ejecutar cargas de trabajo no confiables en un entorno aislado:

# Habilitar en el clúster (clústeres estándar)
gcloud container clusters update  --region  --enable-gke-sandbox --quiet

# Usar en la especificación del pod
# Añadir: runtimeClassName: gvisor

Normas de seguridad de los pods (ruta dorada)

Los estándares de seguridad de los pods definen tres perfiles que restringen lo que pueden hacer los pods. El perfil«restricted» es el valor predeterminado de la ruta dorada para los espacios de nombres de producción.

Perfil Nivel Caso de uso
privilegiado Sin restricciones Espacios de nombres del sistema (kube-system),
: : : controladores de infraestructura :
línea de base Mínimamente restrictivo Espacios de nombres compartidos/dev, aplicaciones heredadas
: : : en proceso de migración :
restringido Ruta óptima Cargas de trabajo de producción: bloquea
: : : escalada de privilegios, acceso al host, :
: : : root :

Aplicación mediante etiquetas de espacio de nombres (admisión de seguridad de pods):

apiVersion: v1
kind: Namespace
metadata:
  name: producción
  labels:
    pod-security.kubernetes.io/enforce: restringido
    pod-security.kubernetes.io/warn: restringido
    pod-security.kubernetes.io/audit: restringido

Estrategia de implementación gradual:

  1. Empezar con alertas y auditorías en los espacios de nombres existentes para identificar infracciones
  2. Corregir las cargas de trabajo no conformes (eliminar privilegios, hostNetwork, usuario root, etc.)
  3. Habilitar la aplicación una vez que todas las cargas de trabajo superen la comprobación

bloquesrestringidos: ejecución como root, escalada de privilegios, red del host/PID/IPC, volúmenes de ruta del host y la mayoría de las capacidades. El archivo de referencia workload-identity-pod.yaml ya cumple con los requisitos.

Registro de políticas de red (recomendado)

Con Dataplane V2 (ruta óptima), puedes habilitar el registro de decisiones de políticas de red. No es un valor predeterminado de la ruta óptima, pero se recomienda para auditorías de seguridad.

gcloud container clusters update  --region  \
  --enable-network-policy-logging \
  --quiet

Esto registra las conexiones permitidas y denegadas, lo cual resulta útil para solucionar problemas relacionados con las reglas de la política de red y auditar los flujos de tráfico.

Roles comunes de IAM

Los cinco roles de IAM predefinidos más comunes para GKE:

Rol Finalidad Cuándo utilizarla
roles/container.admin Control total sobre los administradores del equipo de la plataforma
: : clústeres y : gestión de clústeres :
: : Kubernetes : ciclo de vida :
: : recursos : :
roles/container.clusterAdmin Gestionan clústeres, pero los operadores de clúster
: : no a nivel de proyecto : que crean/eliminan :
: : IAM : clústeres :
roles/container.developer Implementar cargas de trabajo Aplicación
: : (pods, servicios, : desarrolladores que implementan :
: : implementaciones) : en clústeres existentes :
roles/container.viewer Acceso de solo lectura a la monitorización,
: : clústeres y : auditoría, o :
: : Kubernetes : paneles de control de solo lectura :
: : recursos : :
roles/container.clusterViewer Listar y obtener pipelines de CI/CD que
: : detalles del clúster : necesitan el clúster :
: : únicamente : metadatos :

Principio del mínimo privilegio: Empiece con roles/container.viewer o roles/container.developer y amplíe los privilegios solo cuando sea necesario. Evite conceder roles/container.admin de forma generalizada.

Cuentas de servicio y agentes

  • Agente de servicio de GKE (service-@container-engine-robot.iam.gserviceaccount.com): Se crea automáticamente. Gestiona los nodos, las redes y las operaciones del clúster en tu nombre. No elimines ni modifiques sus permisos.
  • Cuenta de servicio del nodo: por defecto, los nodos utilizan la cuenta de servicio predeterminada de Compute Engine. Para el entorno de producción, crea una cuenta de servicio dedicada con permisos mínimos y asígnala mediante la configuración del grupo de nodos.
  • Identidad de carga de trabajo: la forma recomendada para que los pods accedan a las API de Google Cloud. Asigna una cuenta de servicio de Kubernetes a una cuenta de servicio de Google IAM; consulta la configuración de la identidad de carga de trabajo más arriba.

Patrones de autenticación entre servicios

Patrones comunes para conceder a las cargas de trabajo de GKE acceso a otros servicios de Google Cloud :

# Conceder acceso a Cloud Storage a una carga de trabajo de GKE
gcloud projects add-iam-policy-binding  \
  --member "serviceAccount:@.iam.gserviceaccount.com" \
  --role "roles/storage.objectViewer" \
  --quiet

# Conceder acceso a Cloud SQL a una carga de trabajo de GKE
gcloud projects add-iam-policy-binding  \
  --member "serviceAccount:@.iam.gserviceaccount.com" \
  --role "roles/cloudsql.client" \
  --quiet

# Conceder acceso a Pub/Sub a una carga de trabajo de GKE
gcloud projects add-iam-policy-binding  \
  --member "serviceAccount:@.iam.gserviceaccount.com" \
  --role "roles/pubsub.subscriber" \
  --quiet

En todos los casos, la GSA debe estar vinculada a una KSA a través de Workload Identity (véase la configuración anterior). A continuación, el pod utiliza la KSA para autenticarse como la GSA.

Ver en GitHub
---
name: gke-security
description: Hardens Google Kubernetes Engine (GKE) clusters with Workload Identity, Secret Manager, RBAC, Binary Authorization, Network Policies, and Pod Security Standards.
---

# GKE Security

This reference covers security configuration for GKE clusters. The golden path
enforces a hardened security posture by default.

> **MCP Tools:** `get_cluster`, `check_k8s_auth`, `get_k8s_resource`,
> `apply_k8s_manifest`, `update_cluster`

## Golden Path Security Defaults

Setting                                                        | Golden Path Value                       | Day-0/1 | Notes
-------------------------------------------------------------- | --------------------------------------- | ------- | -----
`workloadIdentityConfig.workloadPool`                          | `<PROJECT>.svc.id.goog`                 | Day-0   | Workload Identity Federation for Pods
`secretManagerConfig.enabled`                                  | `true`                                  | Day-1   | Google Secret Manager integration
`secretManagerConfig.rotationConfig`                           | `enabled: true, rotationInterval: 120s` | Day-1   | Automatic secret rotation
`rbacBindingConfig.enableInsecureBindingSystemAuthenticated`   | `false`                                 | Day-0   | Blocks legacy `system:authenticated` bindings
`rbacBindingConfig.enableInsecureBindingSystemUnauthenticated` | `false`                                 | Day-0   | Blocks legacy `system:unauthenticated` bindings
`nodeConfig.shieldedInstanceConfig.enableSecureBoot`           | `true`                                  | Day-0   | Verifiable boot integrity
`nodeConfig.shieldedInstanceConfig.enableIntegrityMonitoring`  | `true`                                  | Day-0   | Runtime integrity checks
`nodeConfig.workloadMetadataConfig.mode`                       | `GKE_METADATA`                          | Day-0   | Blocks legacy metadata API, enforces Workload Identity
Private cluster + Dataplane V2 settings                        | See the `gke-networking` skill          | Day-0   | Private nodes, private endpoint enforcement, ADVANCED_DATAPATH

## Workload Identity Federation

Workload Identity is the recommended way for pods to access Google Cloud APIs.
It eliminates the need for static service account keys.

### Setup

```bash
# 1. Create a Google Service Account (GSA)
gcloud iam service-accounts create <GSA_NAME> \
  --project <PROJECT_ID> \
  --display-name "Workload Identity SA" \
  --quiet

# 2. Grant IAM roles to the GSA
gcloud projects add-iam-policy-binding <PROJECT_ID> \
  --member "serviceAccount:<GSA_NAME>@<PROJECT_ID>.iam.gserviceaccount.com" \
  --role "<ROLE>" \
  --quiet

# 3. Create Kubernetes Service Account (KSA)
kubectl create namespace <NAMESPACE>
kubectl create serviceaccount <KSA_NAME> --namespace <NAMESPACE>

# 4. Bind KSA to 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[<NAMESPACE>/<KSA_NAME>]" \
  --quiet

# 5. Annotate KSA
kubectl annotate serviceaccount <KSA_NAME> \
  --namespace <NAMESPACE> \
  iam.gke.io/gcp-service-account=<GSA_NAME>@<PROJECT_ID>.iam.gserviceaccount.com
```

> See [assets/workload-identity-pod.yaml](./assets/workload-identity-pod.yaml)
> for a test pod.

### Verification

```bash
kubectl run workload-identity-test \
  --image=gcr.io/google.com/cloudsdktool/cloud-sdk:slim \
  --serviceaccount=<KSA_NAME> --namespace=<NAMESPACE> \
  --rm -it -- gcloud auth list --quiet
```

## Secret Manager Integration

The golden path enables Secret Manager with automatic rotation. Secrets are
synced to Kubernetes Secrets.

```bash
# Verify Secret Manager is enabled on cluster
gcloud container clusters describe <CLUSTER_NAME> --region <REGION> \
  --format="value(secretManagerConfig.enabled)" \
  --quiet

# Enable if not already (Day-1 change)
gcloud container clusters update <CLUSTER_NAME> --region <REGION> \
  --enable-secret-manager \
  --secret-manager-rotation-interval=120s \
  --quiet
```

### Mounting Secrets via CSI Volume (Deployment Example)

Once the Secret Manager add-on is enabled, workloads can mount secrets as
volumes using the Secrets Store CSI driver. This requires two steps:

1.  **Define a `SecretProviderClass`** to specify which secrets to retrieve from
    Secret Manager.
2.  **Mount the volume in a `Deployment`** referencing that class.

> [!IMPORTANT] **Production Best Practice**: Always demonstrate workload
> integrations (like Secret Manager CSI) using production-standard
> **`Deployment`** manifests rather than raw `Pod` manifests.

#### Step 1: Create the SecretProviderClass

```yaml
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: app-secrets-provider
  namespace: default
spec:
  provider: gke  # Identifies GKE managed provider
  parameters:
    secrets: |
      - resourceName: "projects/<PROJECT_ID>/secrets/db-password/versions/latest"
        fileName: "db-password.txt"
```

#### Step 2: Mount the secret in a Deployment

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: secure-app
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: secure-app
  template:
    metadata:
      labels:
        app: secure-app
    spec:
      serviceAccountName: secure-ksa  # Must be bound to GSA with Secret Manager Secret Accessor role
      containers:
      - name: app
        image: <IMAGE>
        volumeMounts:
        - name: secrets-volume
          mountPath: "/var/secrets"
          readOnly: true
      volumes:
      - name: secrets-volume
        csi:
          driver: secrets-store.csi.k8s.io
          readOnly: true
          volumeAttributes:
            secretProviderClass: "app-secrets-provider"
```

## RBAC Hardening

The golden path disables insecure legacy RBAC bindings that grant broad access
to `system:authenticated` and `system:unauthenticated` groups.

```bash
# Verify insecure bindings are disabled
gcloud container clusters describe <CLUSTER_NAME> --region <REGION> \
  --format="yaml(rbacBindingConfig)" \
  --quiet
```

**Best practices for RBAC:**

-   Use namespace-scoped Roles over cluster-wide ClusterRoles
-   Bind to specific Groups or ServiceAccounts, never to `system:authenticated`
-   Audit permissions via MCP: `check_k8s_auth(parent="...", verb="list",
    resourceType="pods", namespace="...")` (or `kubectl auth can-i --list
    --as=<user>`)
-   Review bindings via MCP: `get_k8s_resource(parent="...",
    resourceType="clusterrolebinding")` (or `kubectl get
    clusterrolebindings,rolebindings --all-namespaces`)

> See the `gke-multitenancy` skill for enterprise RBAC planning and
> https://docs.cloud.google.com/kubernetes-engine/docs/best-practices/rbac.md.txt

## Binary Authorization

Not enabled in golden path by default but recommended for production image
provenance:

```bash
# Enable Binary Authorization
gcloud container clusters update <CLUSTER_NAME> --region <REGION> \
  --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \
  --quiet
```

## Network Policies

Dataplane V2 (golden path) provides built-in Network Policy enforcement. Apply
default-deny per namespace:

```
# MCP (preferred)
apply_k8s_manifest(parent="...", yamlManifest="<contents of default-deny-netpol.yaml>")

# kubectl fallback
kubectl apply -f ./assets/default-deny-netpol.yaml -n <NAMESPACE>
```

## GKE Sandbox (gVisor)

For running untrusted workloads in an isolated sandbox:

```bash
# Enable on cluster (Standard clusters)
gcloud container clusters update <CLUSTER_NAME> --region <REGION> --enable-gke-sandbox --quiet

# Use in pod spec
# Add: runtimeClassName: gvisor
```

## Pod Security Standards (Golden Path)

Pod Security Standards define three profiles that restrict what pods can do. The
**`restricted` profile is the golden path default** for production namespaces.

| Profile      | Level                 | Use Case                           |
| ------------ | --------------------- | ---------------------------------- |
| `privileged` | Unrestricted          | System namespaces (`kube-system`), |
:              :                       : infrastructure controllers         :
| `baseline`   | Minimally restrictive | Shared/dev namespaces, legacy apps |
:              :                       : being migrated                     :
| `restricted` | **Golden path**       | Production workloads -- blocks     |
:              :                       : privilege escalation, host access, :
:              :                       : root                               :

**Enforce via namespace labels (Pod Security Admission):**

```yaml
apiVersion: v1
kind: Namespace
metadata:
  name: production
  labels:
    pod-security.kubernetes.io/enforce: restricted
    pod-security.kubernetes.io/warn: restricted
    pod-security.kubernetes.io/audit: restricted
```

**Gradual rollout strategy:**

1.  Start with `warn` + `audit` on existing namespaces to identify violations
2.  Fix non-compliant workloads (remove `privileged`, `hostNetwork`, root user,
    etc.)
3.  Enable `enforce` once all workloads pass

`restricted` blocks: running as root, privilege escalation, host
networking/PID/IPC, host path volumes, and most capabilities. The golden path
`workload-identity-pod.yaml` already complies.

## Network Policy Logging (Recommended)

With Dataplane V2 (golden path), you can enable logging for Network Policy
decisions. **Not a golden path default** -- recommended for security auditing.

```bash
gcloud container clusters update <CLUSTER_NAME> --region <REGION> \
  --enable-network-policy-logging \
  --quiet
```

This logs allowed and denied connections, useful for troubleshooting Network
Policy rules and auditing traffic flows.

## Common IAM Roles

The five most common predefined IAM roles for GKE:

| Role                            | Purpose             | When to Use          |
| ------------------------------- | ------------------- | -------------------- |
| `roles/container.admin`         | Full control over   | Platform team admins |
:                                 : clusters and        : managing cluster     :
:                                 : Kubernetes          : lifecycle            :
:                                 : resources           :                      :
| `roles/container.clusterAdmin`  | Manage clusters but | Cluster operators    |
:                                 : not project-level   : who create/delete    :
:                                 : IAM                 : clusters             :
| `roles/container.developer`     | Deploy workloads    | Application          |
:                                 : (pods, services,    : developers deploying :
:                                 : deployments)        : to existing clusters :
| `roles/container.viewer`        | Read-only access to | Monitoring,          |
:                                 : clusters and        : auditing, or         :
:                                 : Kubernetes          : read-only dashboards :
:                                 : resources           :                      :
| `roles/container.clusterViewer` | List and get        | CI/CD pipelines that |
:                                 : cluster details     : need cluster         :
:                                 : only                : metadata             :

> **Principle of least privilege**: Start with `roles/container.viewer` or
> `roles/container.developer` and escalate only as needed. Avoid granting
> `roles/container.admin` broadly.

## Service Accounts & Agents

-   **GKE Service Agent**
    (`service-<PROJECT_NUMBER>@container-engine-robot.iam.gserviceaccount.com`):
    Automatically created. Manages nodes, networking, and cluster operations on
    your behalf. Do not remove or modify its permissions.
-   **Node Service Account**: By default, nodes use the Compute Engine default
    service account. For production, create a dedicated SA with minimal
    permissions and assign it via node pool config.
-   **Workload Identity**: The recommended way for pods to access Google Cloud
    APIs. Maps a Kubernetes ServiceAccount to a Google IAM ServiceAccount — see
    [Workload Identity setup](#workload-identity-federation) above.

## Cross-Service Authentication Patterns

Common patterns for granting GKE workloads access to other Google Cloud
services:

```bash
# Grant a GKE workload access to Cloud Storage
gcloud projects add-iam-policy-binding <PROJECT_ID> \
  --member "serviceAccount:<GSA_NAME>@<PROJECT_ID>.iam.gserviceaccount.com" \
  --role "roles/storage.objectViewer" \
  --quiet

# Grant a GKE workload access to Cloud SQL
gcloud projects add-iam-policy-binding <PROJECT_ID> \
  --member "serviceAccount:<GSA_NAME>@<PROJECT_ID>.iam.gserviceaccount.com" \
  --role "roles/cloudsql.client" \
  --quiet

# Grant a GKE workload access to Pub/Sub
gcloud projects add-iam-policy-binding <PROJECT_ID> \
  --member "serviceAccount:<GSA_NAME>@<PROJECT_ID>.iam.gserviceaccount.com" \
  --role "roles/pubsub.subscriber" \
  --quiet
```

In all cases, the GSA must be bound to a KSA via Workload Identity (see setup
above). The pod then uses the KSA to authenticate as the GSA.

Todos los archivos

0 archivos

Instalar gke-security

Descarga y descomprime los archivos de habilidades en tu directorio .claude/skills/.

Descargar ZIP

Clona el repositorio y copia los archivos de la habilidad a tu proyecto.

git clone https://github.com/google/skills/tree/main/skills/cloud/gke-security # Copy SKILL.md to your .claude/skills/ directory

Copiar Copiar
Configuración rápida: Copia la carpeta de la habilidad en .claude/skills/ Claude detectará y utilizará automáticamente la habilidad
Repositorio google/skills

Habilidades relacionadas

gmgn-portfolio
Tiempo actualizado 1 de julio de 2026
zeroize-audit
Tiempo actualizado 1 de julio de 2026
device-integrity
Tiempo actualizado 29 de junio de 2026
flutter-use-http-package
Tiempo actualizado 30 de junio de 2026
OR