Proteger los metadatos del clúster


Google Kubernetes Engine (GKE) usa metadatos de instancia para configurar las máquinas virtuales (VMs) de los nodos, pero algunos de estos metadatos pueden ser sensibles y deben protegerse de las cargas de trabajo que se ejecutan en el clúster.

Antes de empezar

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

  • Habilita la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Si quieres usar Google Cloud CLI para esta tarea, instálala y, a continuación, inicialízala. Si ya has instalado la gcloud CLI, obtén la versión más reciente ejecutando gcloud components update.

Configurar la cuenta de servicio del nodo

Las credenciales de la cuenta de servicio de cada nodo siguen expuestas a las cargas de trabajo. De forma predeterminada, los nodos usan la cuenta de servicio predeterminada de Compute Engine. Debes configurar una cuenta de servicio con el número mínimo de privilegios necesarios para tus nodos, en lugar de usar la cuenta de servicio predeterminada de Compute Engine. A continuación, asocia esta cuenta de servicio a tus nodos para que un atacante no pueda eludir las protecciones de metadatos de GKE usando la API de Compute Engine para acceder directamente a las instancias de VM subyacentes.

Para obtener más información, consulta Usar cuentas de servicio de nodos con el mínimo de privilegios.

Para crear una cuenta de servicio de nodo con el número mínimo de privilegios necesarios, sigue estos pasos:

  1. Crea una cuenta de servicio de gestión de identidades y accesos (IAM) y guarda la dirección de correo en una variable de entorno:

    gcloud iam service-accounts create NODE_SA_NAME \
        --display-name="DISPLAY_NAME"
    export NODE_SA_EMAIL=$(gcloud iam service-accounts list --format='value(email)' \
        --filter='displayName:DISPLAY_NAME')
    

    Haz los cambios siguientes:

    • NODE_SA_NAME: el nombre de tu nueva cuenta de servicio de nodo.
    • DISPLAY_NAME: el nombre visible de la nueva cuenta de servicio.

    La dirección de correo de la cuenta de servicio del nodo tiene el formato NODE_SA_NAME@PROJECT_ID.iam.gserviceaccount.com.

  2. Configura tu cuenta de servicio con los roles y permisos mínimos para ejecutar tus nodos de GKE:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:$NODE_SA_EMAIL \
        --role=roles/monitoring.metricWriter
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:$NODE_SA_EMAIL \
        --role=roles/monitoring.viewer
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:$NODE_SA_EMAIL \
        --role=roles/logging.logWriter
    

    Sustituye PROJECT_ID por el ID de tu proyecto. Google Cloud

    Además, si tu clúster extrae imágenes privadas de Artifact Registry, añade el rol roles/artifactregistry.reader:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:$NODE_SA_EMAIL \
        --role=roles/artifactregistry.reader
    

Ocultación de metadatos

La ocultación de metadatos de GKE impide que los pods de usuario accedan a kube-env, que contiene las credenciales de kubelet, y al token de identidad de la instancia de la VM.

Los cortafuegos de ocultación de metadatos dirigen el tráfico de los pods de usuario (pods que no se ejecutan en HostNetwork) al servidor de metadatos del clúster, lo que permite solo las consultas seguras. El firewall impide que los pods de usuario utilicen las credenciales de kubelet para llevar a cabo ataques de apropiación de privilegios o que utilicen la identidad de la VM para llevar a cabo ataques de apropiación de instancias.

La federación de identidades de carga de trabajo para GKE sustituye la necesidad de usar el encubrimiento de metadatos y amplía las protecciones que ofrece. En todas las situaciones, debes usar Workload Identity Federation for GKE en lugar de ocultar los metadatos. Para obtener más información, consulta Acerca de Workload Identity Federation para GKE.

Para habilitar la ocultación de metadatos, usa la opción --workload-metadata=SECURE obsoleta en el comando gcloud beta container clusters create o en el comando gcloud beta container node-pools create.

Limitaciones

La ocultación de metadatos tiene limitaciones como las siguientes:

  • La ocultación de metadatos solo protege el acceso a kube-env y al token de identidad de instancia del nodo.
  • La ocultación de metadatos no restringe el acceso a la cuenta de servicio del nodo.
  • La ocultación de metadatos no restringe el acceso a otros metadatos de instancias relacionadas.
  • La ocultación de metadatos no restringe el acceso a otras APIs de metadatos antiguas.
  • El ocultamiento de metadatos no restringe el tráfico de los pods que se ejecutan en la red del host (hostNetwork: true en la especificación del pod).

Inhabilitar las APIs de metadatos antiguas y cambiar a las nuevas

Los endpoints del servidor de metadatos de Compute Engine v0.1 y v1beta1 se retiraron y se cerraron el 30 de septiembre del 2020.

Para consultar el calendario de cierre, consulta el artículo Desactivación de los endpoints del servidor de metadatos v0.1 y v1beta1.

Siguientes pasos