Migrar desde niveles de acceso heredados

En esta página se explican los cambios en el nivel de acceso para los clústeres que ejecutan Kubernetes versión 1.10.

¿Qué son los niveles de acceso?

Cuando creas un clúster que ejecuta Kubernetes versión 1.9 o una versión anterior, su cuenta de servicio predeterminada posee un nivel de acceso predeterminado. Los niveles de acceso son el método heredado de especificar los permisos de tus nodos y las cargas de trabajo que se ejecutan en ellos, en caso de que estas usen las credenciales predeterminadas de la aplicación (ADC).

En Google Kubernetes Engine, para la versión 1.9 y anteriores, los clústeres reciben los niveles de acceso compute-rw y storage-ro de gcloud y Google Cloud Platform Console:

  • compute-rw otorga acceso completo a todos los métodos de la API de Google Compute Engine
  • storage-ro otorga acceso de solo lectura a todos los recursos de Google Cloud Storage, incluidas las imágenes privadas almacenadas en Google Container Registry

Cambios en los niveles de acceso

A partir de Kubernetes versión 1.10, gcloud y GCP Console no otorgan el nivel de acceso compute-rw a los clústeres y grupos de nodos nuevos de forma predeterminada. Además, si --scopes se especifica en gcloud container create, gcloud ya no agrega de forma silenciosa compute-rw ni storage-ro.

Estos cambios garantizan que tu cuenta de servicio predeterminada solo tenga los permisos necesarios para ejecutar tu clúster, lo que mejora la seguridad de tu proyecto.

¿Se ven afectadas mis cargas de trabajo?

Si tus cargas de trabajo no requieren llamar a las API a las que se les otorga acceso, no es necesario hacer nada.

Sin embargo, si tus cargas de trabajo requieren permisos para interactuar con Compute Engine, es posible que se vean afectadas. Recomendamos crear una cuenta de servicio personalizada con las funciones equivalentes de Cloud Identity & Access Management.

Si anulas los niveles y tus cargas de trabajo requieren permiso para interactuar con Cloud Storage (o extraer imágenes del contenedor privado de Container Registry), también se debe incluir el nivel storage-ro.

De manera alternativa, para replicar el comportamiento de clústeres anteriores a la versión 1.10, consulta Revertir a los niveles de acceso heredados.

Impacto

Compute Engine y Cloud Storage muestran errores 403 a las aplicaciones que se ejecutan en clústeres de Kubernetes 1.10 y que no tengan el nivel de permisos necesario.

Además, en la respuesta a una solicitud con este problema, se incluye un encabezado HTTP que detalla el nivel de permisos necesario. Por ejemplo:

WWW-Authenticate: Bearer realm="https://accounts.google.com/", error=insufficient_scope, scope="https://www.googleapis.com/auth/compute.readonly"

Configurar una cuenta de servicios predeterminada para las cargas de trabajo

Cloud Identity & Access Management (Cloud IAM) es el sistema de control de acceso para otorgar funciones autorizadas a cuentas de servicio y usuarios de tu proyecto de GCP. Una cuenta de servicio es una cuenta especial de Google que ejecuta tareas por ti, como implementar aplicaciones en tu nombre. Puedes usar Cloud IAM para crear una cuenta de servicio y, luego, usar la vinculación de una política de Cloud IAM para proteger la cuenta.

Si tus cargas de trabajo requieren acceso a Compute Engine, otórgale la función Administrador de Compute Engine a la cuenta de servicio. Si tus cargas de trabajo necesitan extraer imágenes de Container Registry, otórgales la función Storage ObjectViewer.

Crear una cuenta de servicio

Para crear una cuenta de servicio personalizada llamada kubernetes-engine-node-sa, ejecuta los siguientes comandos:

export NODE_SA_NAME=kubernetes-engine-node-sa
gcloud iam service-accounts create $NODE_SA_NAME \
  --display-name "GKE Node Service Account"
export NODE_SA_EMAIL=`gcloud iam service-accounts list --format='value(email)' \
  --filter='displayName:Node Service Account'`

Otorgar funciones mínimas

Para configurar la cuenta de servicio con la cantidad mínima de funciones y permisos que se requieren para GKE, ejecuta los siguientes comandos. $PROJECT es tu ID del proyecto

export PROJECT=`gcloud config get-value project`
gcloud projects add-iam-policy-binding $PROJECT \
  --member serviceAccount:$NODE_SA_EMAIL \
  --role roles/monitoring.metricWriter
gcloud projects add-iam-policy-binding $PROJECT \
  --member serviceAccount:$NODE_SA_EMAIL \
  --role roles/monitoring.viewer
gcloud projects add-iam-policy-binding $PROJECT \
  --member serviceAccount:$NODE_SA_EMAIL \
  --role roles/logging.logWriter

Otorgar funciones adicionales

Para otorgar la función Administrador de Compute Engine a la cuenta de servicio, ejecuta el siguiente comando:

gcloud projects add-iam-policy-binding $PROJECT \
  --member serviceAccount:$NODE_SA_EMAIL \
  --role roles/compute.admin

Para otorgar la función Storage ObjectViewer:

gcloud projects add-iam-policy-binding $PROJECT \
  --member serviceAccount:$NODE_SA_EMAIL \
  --role roles/storage.objectviewer

Para aprender a otorgar acceso a las cuentas de servicio a las imágenes almacenadas en Container Registry, consulta Otorgar acceso a un registro a los usuarios y otros proyectos.

Crear un clúster o grupo de nodos con la cuenta de servicios personalizada

Para crear un clúster que use la cuenta de servicio personalizada, ejecuta el siguiente comando:

gcloud container clusters create --service-account=$NODE_SA_EMAIL

Para crear un grupo de nodos en un clúster existente:

gcloud container node-pools create --service-account=$NODE_SA_EMAIL

Revertir a los niveles de acceso heredados

Si deseas seguir usando los niveles de acceso heredados en clústeres que ejecutan Kubernetes versión 1.10, debes agregarlos manualmente.

Console

Para crear un clúster con GCP Console, realiza los siguientes pasos:

  1. Ve al menú de Google Kubernetes Engine en GCP Console.

    Visitar el menú de Google Kubernetes Engine

  2. Haz clic en Crear clúster.

  3. En Versión principal selecciona Kubernetes 1.10.

  4. Configura el clúster como quieras. Aún no hagas clic en Crear.

  5. Haz clic en Edición avanzada para el grupo de nodos predeterminado.

  6. En la sección Niveles de acceso, selecciona Configurar acceso para cada API.

  7. En Compute Engine, selecciona Lectura/escritura. De forma predeterminada, el almacenamiento debería ser de solo lectura.

  8. Haz clic en Guardar para salir de la Edición avanzada.

  9. Haz clic en Crear.

gcloud

Para crear un clúster, ejecuta el siguiente comando.

gcloud container clusters create example-cluster --scopes compute-rw,gke-default

Para crear un grupo de nodos en un clúster existente:

gcloud container node-pools create example-pool --scopes compute-rw,gke-default
¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...