Google Kubernetes Engine (GKE) usa metadatos de instancia para configurar máquinas virtuales (VM) de nodo. Sin embargo, algunos de estos metadatos pueden ser sensibles y se deben proteger de las cargas de trabajo que se ejecutan en el clúster.
Antes de comenzar
Antes de comenzar, asegúrate de haber realizado las siguientes tareas:
- Habilita la API de Google Kubernetes Engine. Habilitar la API de Google Kubernetes Engine
- Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta el comando
gcloud components update
para obtener la versión más reciente. Es posible que las versiones anteriores de gcloud CLI no admitan la ejecución de los comandos que se describen en este documento.
Configura una cuenta de servicio de nodo
Las credenciales de la cuenta de servicio de cada nodo continúan expuestas a las cargas de trabajo. De forma predeterminada, tus nodos usan la cuenta de servicio predeterminada de Compute Engine. Debes configurar una cuenta de servicio con privilegios mínimos para que tus nodos la usen, en lugar de la cuenta de servicio predeterminada de Compute Engine. Luego, adjunta esta cuenta de servicio a tus nodos para que un atacante no pueda eludir las protecciones de metadatos de GKE mediante la API de Compute Engine a fin de acceder directamente a las instancias de VM subyacentes.
Para obtener más información, consulta Usa las cuentas de servicio de nodo con privilegios mínimos.
Para crear una cuenta de servicio de nodo con privilegios mínimos, realiza los siguientes pasos:
Crea una cuenta de servicio de administración de identidades y accesos (IAM) nueva y guarda la dirección de correo electrónico 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')
Reemplaza lo siguiente:
NODE_SA_NAME
: El nombre de tu cuenta de servicio de nodo nueva.DISPLAY_NAME
: Es el nombre visible de la cuenta de servicio nueva.
La dirección de correo electrónico de la cuenta de servicio de nodo tiene el formato
NODE_SA_NAME@PROJECT_ID.iam.gserviceaccount.com
.Configura tu cuenta de servicio con las funciones 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
Reemplaza
PROJECT_ID
por el Google Cloud ID del proyecto.Además, si tu clúster extrae imágenes privadas de Artifact Registry, debes agregar la función
roles/artifactregistry.reader
:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$NODE_SA_EMAIL \ --role=roles/artifactregistry.reader
Ocultamiento de metadatos
El ocultamiento de metadatos de GKE evita que los Pods de usuario accedan a kube-env
, que contiene las credenciales de kubelet, y al token de identidad de instancia de la VM.
Los metadatos ocultan el tráfico del firewall de los pods de usuario (pods que no se ejecutan en HostNetwork
) al servidor de metadatos del clúster, lo que solo permite consultas seguras. El firewall evita que los pods de usuario usen las credenciales de Kubelet para los ataques de elevación de privilegios o que usen la identidad de VM para los ataques de elevación de instancia.
La federación de identidades para cargas de trabajo para GKE reemplaza la necesidad de usar ocultamiento de metadatos y amplía las protecciones que ofrece el ocultamiento de metadatos. En todas las situaciones, debes usar la federación de identidades para cargas de trabajo para GKE en lugar del ocultamiento de metadatos. Si deseas obtener más información, consulta Acerca de la federación de identidades para cargas de trabajo para GKE.
Para habilitar el ocultamiento de metadatos, usa la opción --workload-metadata=SECURE
en desuso en tu comando gcloud beta container clusters create
o en tu comando gcloud beta container node-pools create
.
Limitaciones
El ocultamiento de metadatos tiene limitaciones, como las siguientes:
- El ocultamiento de metadatos solo protege el acceso a
kube-env
y al token de identidad de la instancia del nodo. - El ocultamiento de metadatos no restringe el acceso a la cuenta de servicio del nodo.
- El ocultamiento de metadatos no restringe el acceso a otros metadatos de instancia relacionados.
- El ocultamiento de metadatos no restringe el acceso a otras API de metadatos heredados.
- 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).
Inhabilita y realiza la transición desde la API de metadatos heredados
Los extremos del servidor de metadatos de Compute Engine v0.1
y v1beta1
quedaron obsoletos y se cerraron el 30 de septiembre de 2020.
Para ver el programa de baja, consulta Baja de los extremos del servidor de metadatos v0.1
y v1beta1
.