Usa la federación de identidades para cargas de trabajo para GKE

En este documento, se muestra cómo habilitar y configurar la federación de identidades para cargas de trabajo para GKE en los clústeres de Google Kubernetes Engine (GKE). La federación de identidades para cargas de trabajo para GKE permite que las cargas de trabajo de los clústeres de GKE actúen en nombre de las cuentas de servicio de Identity and Access Management (IAM) para acceder a los servicios de Google Cloud. Para obtener más información sobre cómo funciona la federación de identidades para cargas de trabajo para GKE, así como las limitaciones, consulta Federación de identidades para cargas de trabajo para GKE.

Antes de comenzar

Antes de comenzar, asegúrate de haber realizado las siguientes tareas:

  • Habilita la API de Kubernetes Engine de Google.
  • Habilitar la API de Kubernetes Engine de Google
  • Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta gcloud components update para obtener la versión más reciente.

Habilita la federación de identidades para cargas de trabajo para GKE

Puedes habilitar la federación de identidades para cargas de trabajo para GKE en clústeres y grupos de nodos mediante Google Cloud CLI o la consola de Google Cloud. La federación de identidades para cargas de trabajo para GKE debe habilitarse a nivel de clúster antes de poder habilitar la federación de identidades para cargas de trabajo para GKE en grupos de nodos.

Los clústeres de Autopilot habilitan la federación de identidades para cargas de trabajo para GKE de forma predeterminada. Si deseas configurar los Pods de Autopilot a fin de que usen la federación de identidades para cargas de trabajo para GKE, ve a Configura aplicaciones para que usen la federación de identidades para cargas de trabajo para GKE.

Crea un clúster nuevo

Puedes habilitar la federación de identidades para cargas de trabajo para GKE en un clúster de Standard nuevo mediante gcloud CLI o la consola de Google Cloud.

gcloud

  1. En la consola de Google Cloud, activa Cloud Shell.

    Activar Cloud Shell

    En la parte inferior de la consola de Google Cloud, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

  2. A fin de habilitar la federación de identidades para cargas de trabajo para GKE en un clúster nuevo, ejecuta el siguiente comando:

    gcloud container clusters create CLUSTER_NAME \
        --region=COMPUTE_REGION \
        --workload-pool=PROJECT_ID.svc.id.goog
    

    Reemplaza lo siguiente:

    • CLUSTER_NAME: Es el nombre del clúster nuevo.
    • COMPUTE_REGION: La región de Compute Engine del clúster. Para los clústeres zonales, usa --zone=COMPUTE_ZONE.
    • PROJECT_ID: Es el ID de tu proyecto de Google Cloud.

Console

A fin de habilitar la federación de identidades para cargas de trabajo para GKE en un clúster nuevo, haz lo siguiente:

  1. Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.

    Ir a Google Kubernetes Engine

  2. Haz clic en Crear.

  3. En el diálogo Crear clúster, para GKE Standard, haz clic en Configurar.

  4. En el menú de navegación, en la sección Clúster, haz clic en Seguridad.

  5. Selecciona la casilla de verificación Habilitar Workload Identity.

  6. Continúa con la configuración del clúster y, luego, haz clic en Crear.

Actualiza un clúster existente

Puedes habilitar la federación de identidades para cargas de trabajo para GKE en un clúster de Standard existente con gcloud CLI o la consola de Google Cloud. Los grupos de nodos existentes no se verán afectados, pero todos los grupos de nodos nuevos en el clúster usarán la federación de identidades para cargas de trabajo para GKE.

gcloud

  1. En la consola de Google Cloud, activa Cloud Shell.

    Activar Cloud Shell

    En la parte inferior de la consola de Google Cloud, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

  2. A fin de habilitar la federación de identidades para cargas de trabajo para GKE en un clúster existente, ejecuta el siguiente comando:

    gcloud container clusters update CLUSTER_NAME \
        --region=COMPUTE_REGION \
        --workload-pool=PROJECT_ID.svc.id.goog
    

    Reemplaza lo siguiente:

    • CLUSTER_NAME: Es el nombre del clúster existente.
    • COMPUTE_REGION: La región de Compute Engine del clúster. Para los clústeres zonales, usa --zone=COMPUTE_ZONE.
    • PROJECT_ID: Es el ID de tu proyecto de Google Cloud.

Console

A fin de habilitar la federación de identidades para cargas de trabajo para GKE en un clúster existente, haz lo siguiente:

  1. Ve a la página de Google Kubernetes Engine en la consola de Google Cloud:

    Ir a Google Kubernetes Engine

  2. En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.

  3. En la página de detalles del clúster, en la sección Seguridad, haz clic en Editar la federación de identidades para cargas de trabajo para GKE.

  4. En el cuadro de diálogo Editar Workload Identity, selecciona la casilla de verificación Habilitar Workload Identity.

  5. Haz clic en Guardar cambios.

Migra las cargas de trabajo existentes a la federación de identidades para cargas de trabajo para GKE

Después de habilitar la federación de identidades para cargas de trabajo para GKE en un clúster existente, es posible que desees migrar tus cargas de trabajo en ejecución a fin de usar la federación de identidades para cargas de trabajo para GKE. Selecciona la estrategia de migración ideal para tu entorno. Puedes crear grupos de nodos nuevos con la federación de identidades para cargas de trabajo para GKE habilitada o actualizar los grupos de nodos existentes a fin de habilitar la federación de identidades para cargas de trabajo para GKE.

Te recomendamos crear grupos de nodos nuevos si también necesitas modificar tus aplicaciones a fin de que sean compatibles con la federación de identidades para cargas de trabajo para GKE.

Todos los grupos de nodos nuevos que crees de forma predeterminada usarán la federación de identidades para cargas de trabajo para GKE si el clúster tiene habilitada la federación de identidades para cargas de trabajo para GKE. A fin de crear un grupo de nodos nuevo con la federación de identidades para cargas de trabajo para GKE habilitada, ejecuta el siguiente comando:

gcloud container node-pools create NODEPOOL_NAME \
    --cluster=CLUSTER_NAME \
    --region=COMPUTE_REGION \
    --workload-metadata=GKE_METADATA

Reemplaza lo siguiente:

  • NODEPOOL_NAME: el nombre del grupo de nodos nuevo
  • CLUSTER_NAME: El nombre del clúster existente que tiene habilitada la federación de identidades para cargas de trabajo para GKE.

La marca --workload-metadata=GKE_METADATA configura el grupo de nodos para usar el servidor de metadatos de GKE. Te recomendamos que incluyas la marca a fin de que la creación del grupo de nodos falle si la federación de identidades para cargas de trabajo para GKE no está habilitada en el clúster.

Actualiza un grupo de nodos existente

Puedes habilitar de forma manual la federación de identidades para cargas de trabajo para GKE en los grupos de nodos existentes después de habilitar la federación de identidades para cargas de trabajo para GKE en el clúster.

gcloud

  1. En la consola de Google Cloud, activa Cloud Shell.

    Activar Cloud Shell

    En la parte inferior de la consola de Google Cloud, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

  2. A fin de modificar un grupo de nodos existente para usar la federación de identidades para cargas de trabajo para GKE, ejecuta el siguiente comando:

    gcloud container node-pools update NODEPOOL_NAME \
        --cluster=CLUSTER_NAME \
        --region=COMPUTE_REGION \
        --workload-metadata=GKE_METADATA
    

    Si un clúster tiene la federación de identidades para cargas de trabajo para GKE habilitada, puedes inhabilitarla de forma selectiva en un grupo de nodos en particular si especificas --workload-metadata=GCE_METADATA explícitamente. Para obtener más información, consulta Protege metadatos del clúster.

Console

A fin de modificar un grupo de nodos existente para usar la federación de identidades para cargas de trabajo para GKE, sigue estos pasos:

  1. Ve a la página de Google Kubernetes Engine en la consola de Google Cloud:

    Ir a Google Kubernetes Engine

  2. En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.

  3. Haz clic en la pestaña Nodos.

  4. En la sección Grupos de nodos, haz clic en el nombre del grupo de nodos al que quieres modificar.

  5. En la página Detalles del grupo de nodos, haz clic en Editar.

  6. En la página Editar grupo de nodos, en la sección Seguridad, selecciona la casilla de verificación Habilitar servidor de metadatos de GKE.

  7. Haz clic en Guardar.

Configura aplicaciones a fin de usar la federación de identidades para cargas de trabajo para GKE

Después de habilitar la federación de identidades para cargas de trabajo para GKE, debes configurar las aplicaciones a fin de que se autentiquen en Google Cloud mediante la federación de identidades para cargas de trabajo para GKE antes de migrar las aplicaciones a los grupos de nodos nuevos.

Debes asignar una cuenta de servicio de Kubernetes a la aplicación y configurarla para que actúe como una cuenta de servicio de IAM.

En los siguientes pasos, se muestra cómo configurar las aplicaciones a fin de que usen la federación de identidades para cargas de trabajo para GKE si está habilitada en el clúster.

  1. Obtén credenciales para el clúster:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --region=COMPUTE_REGION
    

    Reemplaza lo siguiente:

    • CLUSTER_NAME: el nombre del clúster que tiene habilitada la federación de identidades para cargas de trabajo para GKE.
    • COMPUTE_REGION: la región de Compute Engine del clúster.
  2. Crea un espacio de nombres para usar en la cuenta de servicio de Kubernetes. También puedes usar el espacio de nombres predeterminado o cualquier espacio de nombres existente.

    kubectl create namespace NAMESPACE
    
  3. Crea una cuenta de servicio de Kubernetes para que tu aplicación use: También puedes usar cualquier cuenta de servicio de Kubernetes existente en cualquier espacio de nombres, incluida la cuenta de servicio default.

    kubectl create serviceaccount KSA_NAME \
        --namespace NAMESPACE
    

    Reemplaza lo siguiente:

    • KSA_NAME: Es el nombre de tu cuenta de servicio de Kubernetes nueva.
    • NAMESPACE es el nombre del espacio de nombres de Kubernetes para la cuenta de servicio.
  4. Crea una cuenta de servicio de IAM para tu aplicación o usa una cuenta de servicio de IAM existente en su lugar. Puedes usar cualquier cuenta de servicio de IAM en cualquier proyecto de tu organización. En Config Connector, aplica el objeto IAMServiceAccount para la cuenta de servicio elegida.

    gcloud

    1. En la consola de Google Cloud, activa Cloud Shell.

      Activar Cloud Shell

      En la parte inferior de la consola de Google Cloud, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

    2. Para crear una nueva cuenta de servicio de IAM con la CLI de gcloud, ejecuta el siguiente comando.

      gcloud iam service-accounts create GSA_NAME \
          --project=GSA_PROJECT
      

      Reemplaza lo siguiente:

      • GSA_NAME: El nombre de la cuenta de servicio de IAM nueva.
      • GSA_PROJECT: El ID del proyecto de Google Cloud para tu cuenta de servicio de IAM.

    Config Connector

    Para usar una cuenta de servicio de IAM nueva o existente con Config Connector, aplica el siguiente archivo de configuración.

    Nota: En este paso, se necesita Config Connector. Sigue las instrucciones de instalación para instalar Config Connector en el clúster.

    apiVersion: iam.cnrm.cloud.google.com/v1beta1
    kind: IAMServiceAccount
    metadata:
      name: [GSA_NAME]
    spec:
      displayName: [DISPLAY_NAME]
    Para implementar este manifiesto, descárgalo en tu equipo como service-account.yaml.

    Usa kubectl para aplicar el manifiesto:

    kubectl apply -f service-account.yaml
    

    Para obtener información sobre la autorización de cuentas de servicio de IAM a fin de acceder a las API de Google Cloud, consulta la página Comprende las cuentas de servicio.

  5. Asegúrate de que tu cuenta de servicio de IAM tenga las funciones que necesitas. Puedes otorgar funciones adicionales con el siguiente comando:

    gcloud projects add-iam-policy-binding GSA_PROJECT \
        --member "serviceAccount:GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com" \
        --role "ROLE_NAME"
    

    Reemplaza lo siguiente:

    • GSA_PROJECT: El ID del proyecto de Google Cloud de la cuenta de servicio de IAM.
    • GSA_NAME: El nombre de tu cuenta de servicio de IAM.
    • ROLE_NAME: es la función de IAM que se asignará a la cuenta de servicio, como roles/spanner.viewer.
  6. Para permitir que la cuenta de servicio de Kubernetes actúe en nombre de la cuenta de servicio de IAM, agrega una vinculación de política de IAM entre las dos. Esta vinculación permite que la cuenta de servicio de Kubernetes actúe como la cuenta de servicio de IAM.

    gcloud

    1. En la consola de Google Cloud, activa Cloud Shell.

      Activar Cloud Shell

      En la parte inferior de la consola de Google Cloud, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

    2. En tu entorno de desarrollo, ejecuta el siguiente comando:

      gcloud iam service-accounts add-iam-policy-binding GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE/KSA_NAME]"
      

    Config Connector

    Nota: En este paso, se necesita Config Connector. Sigue las instrucciones de instalación para instalar Config Connector en el clúster.

    apiVersion: iam.cnrm.cloud.google.com/v1beta1
    kind: IAMPolicy
    metadata:
      name: iampolicy-workload-identity-sample
    spec:
      resourceRef:
        apiVersion: iam.cnrm.cloud.google.com/v1beta1
        kind: IAMServiceAccount
        name: [GSA_NAME]
      bindings:
        - role: roles/iam.workloadIdentityUser
          members:
            - serviceAccount:[PROJECT_ID].svc.id.goog[[K8S_NAMESPACE]/[KSA_NAME]]
    Para implementar este manifiesto, descárgalo en tu equipo como policy-binding.yaml. Reemplaza GSA_NAME, PROJECT_ID, NAMESPACE y KSA_NAME por los valores para tu entorno. Luego, ejecuta lo siguiente:

    kubectl apply -f policy-binding.yaml
    
  7. Anota la cuenta de servicio de Kubernetes con la dirección de correo electrónico de la cuenta de servicio de IAM.

    kubectl

    1. En la consola de Google Cloud, activa Cloud Shell.

      Activar Cloud Shell

      En la parte inferior de la consola de Google Cloud, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

    2. En tu entorno de desarrollo, ejecuta el siguiente comando:

      kubectl annotate serviceaccount KSA_NAME \
          --namespace NAMESPACE \
          iam.gke.io/gcp-service-account=GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com
      

    yaml

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      annotations:
        iam.gke.io/gcp-service-account: GSA_NAME@PROJECT_ID.iam.gserviceaccount.com
      name: KSA_NAME
      namespace: NAMESPACE
    
  8. Actualiza las especificaciones de tu pod a fin de programar las cargas de trabajo en nodos que usan la federación de identidades para cargas de trabajo para GKE y usar la cuenta de servicio de Kubernetes anotada.

    spec:
      serviceAccountName: KSA_NAME
      nodeSelector:
        iam.gke.io/gke-metadata-server-enabled: "true"
    
  9. Aplica la configuración actualizada al clúster:

    kubectl apply -f DEPLOYMENT_FILE
    

    Reemplaza DEPLOYMENT_FILE por la ruta a la especificación del pod actualizado.

Verifica la configuración de la federación de identidades para cargas de trabajo para GKE

Para verificar que las cuentas de servicio estén configuradas de forma correcta, crea un Pod con la cuenta de servicio de Kubernetes que ejecute la imagen de contenedor específica del SO y, a continuación, conéctate a ella con una sesión interactiva.

Linux

Crea un pod que use la cuenta de servicio de Kubernetes anotada y aplica curl al extremo service-accounts.

  1. Guarda la siguiente configuración como wi-test.yaml.

    apiVersion: v1
    kind: Pod
    metadata:
      name: workload-identity-test
      namespace: NAMESPACE
    spec:
      containers:
      - image: google/cloud-sdk:slim
        name: workload-identity-test
        command: ["sleep","infinity"]
      serviceAccountName: KSA_NAME
      nodeSelector:
        iam.gke.io/gke-metadata-server-enabled: "true"
    

    La imagen google/cloud-sdk incluye la CLI de Google Cloud, que es una forma conveniente de usar las API de Google Cloud. La descarga de la imagen puede tomar un tiempo.

  2. Crea el Pod:

    kubectl apply -f wi-test.yaml
    
  3. Abre una sesión interactiva en el Pod:

    kubectl exec -it workload-identity-test \
      --namespace NAMESPACE \
      -- /bin/bash
    
  4. Ejecuta el siguiente comando dentro del Pod para obtener el correo electrónico de la cuenta de servicio:

    curl -H "Metadata-Flavor: Google" http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/email
    

    Si las cuentas de servicio están configuradas de forma correcta, la dirección de correo electrónico de la cuenta de servicio de IAM aparece como la identidad activa (y única). Esto demuestra que, de forma predeterminada, el pod actúa como la autoridad de la cuenta de servicio de IAM cuando se llama a las APIs de Google Cloud.

  5. Ejecuta el siguiente comando dentro del Pod para obtener un token:

    curl -H "Metadata-Flavor: Google" http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token
    

    Si muestra algún error, consulta Solución de problemas.

Windows

Crea un Pod con la cuenta de servicio de Kubernetes que ejecuta la imagen de contenedor servercore.

  1. Guarda el siguiente manifiesto:

    apiVersion: v1
    kind: Pod
    metadata:
      name: workload-identity-test
      namespace: NAMESPACE
    spec:
      containers:
      - image: IMAGE_NAME
        name: workload-identity-test
        command: ["powershell.exe", "sleep", "3600"]
      serviceAccountName: KSA_NAME
      nodeSelector:
        kubernetes.io/os: windows
        cloud.google.com/gke-os-distribution: windows_ltsc
        iam.gke.io/gke-metadata-server-enabled: "true"
    

    Reemplaza IMAGE_NAME por uno de los siguientes valores de imagen de contenedor servercore:

    Imagen de nodo de Windows Server Imagen de contenedor servercore
    WINDOWS_LTSC,
    WINDOWS_LTSC_CONTAINERD
    mcr.microsoft.com/windows/servercore:ltsc2019
    WINDOWS_SAC,
    WINDOWS_SAC_CONTAINERD

    Verifica la asignación de versiones entre la versión de nodo de GKE y la versión de Windows SAC. En la versión 1909 de Windows Server, especifica mcr.microsoft.com/windows/servercore:1909. De lo contrario, especifica mcr.microsoft.com/windows/servercore:20H2.

  2. Abre una sesión interactiva en el Pod:

    kubectl exec -it workload-identity-test \
      --namespace NAMESPACE -- powershell
    
  3. Ejecuta el siguiente comando de PowerShell dentro del Pod para obtener el correo electrónico de la cuenta de servicio:

    Invoke-WebRequest  -Headers @{"Metadata-Flavor"="Google"} -Uri  http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/email  -UseBasicParsing
    

    Si las cuentas de servicio están configuradas de forma correcta, la dirección de correo electrónico de la cuenta de servicio de IAM aparece como la identidad activa (y única). Esto demuestra que, de forma predeterminada, el Pod usa la autoridad de la cuenta de servicio de IAM cuando llama a las APIs de Google Cloud.

  4. Ejecuta el siguiente comando dentro del Pod para obtener un token:

    Invoke-WebRequest  -Headers @{"Metadata-Flavor"="Google"} -Uri  http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token  -UseBasicParsing
    

    Si muestra algún error, consulta Solución de problemas.

Usa la federación de identidades para cargas de trabajo para GKE desde tu código

La autenticación en los servicios de Google Cloud desde tu código es el mismo proceso que la autenticación mediante el servidor de metadatos de Compute Engine. Cuando usas la federación de identidades para cargas de trabajo para GKE, las solicitudes al servidor de metadatos de la instancia se enrutan al servidor de metadatos de GKE. El código existente que se autentica mediante el servidor de metadatos de la instancia (como el código que usa las bibliotecas cliente de Google Cloud) debería funcionar sin modificaciones.

Usa la cuota de un proyecto diferente con la federación de identidades para cargas de trabajo para GKE

En los clústeres que ejecutan la versión 1.24 o posterior de GKE, puedes configurar tu cuenta de servicio de Kubernetes para que use la cuota de un proyecto diferente de Google Cloud cuando se realicen llamadas a los métodos GenerateAccessToken y GenerateIdToken. API de Service Account Credentials de IAM. Esto te permite evitar el uso de la cuota completa en tu proyecto principal y, en su lugar, usar la cuota de otros proyectos para estos servicios en tu clúster.

A fin de configurar un proyecto de cuota con la federación de identidades para cargas de trabajo para GKE, haz lo siguiente:

  1. Otorga el permiso serviceusage.services.use en el proyecto de cuota a la cuenta de servicio de Kubernetes.

    gcloud projects add-iam-policy-binding \
    --role=roles/serviceusage.serviceUsageConsumer \
    --member=serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE/KSA_NAME] \
    QUOTA_PROJECT_ID
    

    Reemplaza QUOTA_PROJECT_ID por el ID del proyecto de cuota.

  2. Anota la cuenta de servicio de Kubernetes con el proyecto de cuota:

    kubectl annotate serviceaccount KSA_NAME \
    --namespace NAMESPACE \
    iam.gke.io/credential-quota-project=QUOTA_PROJECT_ID
    

Para verificar que la configuración funcione correctamente, haz lo siguiente:

  1. Crea un Pod y, luego, inicia una sesión de shell mediante las instrucciones que se indican en Verifica la federación de identidades para cargas de trabajo para la configuración de GKE.

  2. Realiza una solicitud de token de cuenta de servicio:

    curl -H "Metadata-Flavor: Google" http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token
    
  3. Ve a la página API de Service Account Credentials de IAM en la consola de Google Cloud para ver el proyecto de cuota:

    Ir a las API

  4. Verifica los cambios en el tráfico.

Limpia

Si deseas dejar de usar la federación de identidades para cargas de trabajo para GKE, revoca el acceso a la cuenta de servicio de IAM y, luego, inhabilita la federación de identidades para cargas de trabajo para GKE en el clúster.

Revocar el acceso

  1. Revoca el acceso a la cuenta de servicio de IAM:

    gcloud

    1. En la consola de Google Cloud, activa Cloud Shell.

      Activar Cloud Shell

      En la parte inferior de la consola de Google Cloud, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

    2. En tu entorno de desarrollo, ejecuta el siguiente comando:

      gcloud iam service-accounts remove-iam-policy-binding GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE/KSA_NAME]"
      

      Reemplaza lo siguiente:

      • PROJECT_ID: Es el ID del proyecto del clúster de GKE.
      • NAMESPACE: El nombre del espacio de nombres de Kubernetes en el que se encuentra la cuenta de servicio de Kubernetes.
      • KSA_NAME: El nombre de la cuenta de servicio de Kubernetes a la que se le revocará el acceso.
      • GSA_NAME: Es el nombre de la cuenta de servicio de IAM.
      • GSA_PROJECT: Es el ID del proyecto de la cuenta de servicio de IAM.

    Config Connector

    Si usaste Config Connector para crear la cuenta de servicio, borra la cuenta de servicio con kubectl.

    kubectl delete -f service-account.yaml
    

    Los tokens almacenados en caché pueden tardar hasta 30 minutos en caducar. Puedes verificar si los tokens almacenados en caché caducaron con este comando:

    gcloud auth list
    

    Los tokens almacenados en caché caducaron si la salida de ese comando ya no incluye GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com.

  2. Quita la anotación de la cuenta de servicio de Kubernetes. Este paso es opcional porque IAM revocó el acceso.

    kubectl annotate serviceaccount KSA_NAME \
        --namespace NAMESPACE iam.gke.io/gcp-service-account-
    

Inhabilita la federación de identidades para cargas de trabajo para GKE

Solo puedes inhabilitar la federación de identidades para cargas de trabajo para GKE en los clústeres de GKE Standard.

gcloud

  1. En la consola de Google Cloud, activa Cloud Shell.

    Activar Cloud Shell

    En la parte inferior de la consola de Google Cloud, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

  2. Inhabilita la federación de identidades para cargas de trabajo para GKE en cada grupo de nodos:

    gcloud container node-pools update NODEPOOL_NAME \
        --cluster=CLUSTER_NAME \
        --workload-metadata=GCE_METADATA
    

    Repite este comando para cada grupo de nodos del clúster.

  3. Inhabilita la federación de identidades para cargas de trabajo para GKE en el clúster:

    gcloud container clusters update CLUSTER_NAME \
        --disable-workload-identity
    

Console

  1. Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.

    Ir a Google Kubernetes Engine

  2. En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.

  3. Haz clic en la pestaña Nodos.

  4. A fin de inhabilitar la federación de identidades para cargas de trabajo para GKE en cada grupo de nodos, haz lo siguiente para cada grupo de nodos en la sección Grupos de nodos:

    1. Haz clic en el nombre del grupo de nodos que deseas modificar.
    2. En la página Detalles del grupo de nodos, haz clic en Editar.
    3. En la página Editar grupo de nodos, en la sección Seguridad, desmarca la selección de la casilla de verificación Habilitar servidor de metadatos de GKE.
    4. Haz clic en Guardar.
  5. A fin de inhabilitar la federación de identidades para cargas de trabajo para GKE en el clúster, haz lo siguiente:

    1. Haga clic en la pestaña Detalles.
    2. En la sección Seguridad, junto a Workload Identity, haz clic en Editar.
    3. En el cuadro de diálogo Editar Workload Identity, desmarca la casilla de verificación Habilitar Workload Identity.
    4. Haz clic en Guardar cambios.

Inhabilita la federación de identidades para cargas de trabajo para GKE en la organización

Desde la perspectiva de seguridad, la federación de identidades para cargas de trabajo para GKE permite confirmar las identidades de las cuentas de servicio de Kubernetes que se pueden autenticar y autorizar en los recursos de Google Cloud. Si eres administrador y realizaste acciones para aislar las cargas de trabajo de los recursos de Google Cloud, como inhabilitar la creación de cuentas de servicio o inhabilitar la creación de claves de cuentas de servicio, también puedes inhabilitar la federación de identidades para cargas de trabajo para GKE en tu organización.

Consulta estas instrucciones a fin de inhabilitar la federación de identidades para cargas de trabajo para GKE en tu organización.

Soluciona problemas

Si deseas obtener información sobre la solución de problemas, consulta Soluciona problemas de la federación de identidades para cargas de trabajo para GKE.

¿Qué sigue?