Migra desde niveles de acceso heredados

En esta página, se explican los cambios en los niveles de acceso de los clústeres que ejecutan la versión 1.10 de Kubernetes y versiones posteriores. Estos cambios solo afectan las interacciones de tus clústeres con Cloud Storage y Compute Engine.

¿Qué son los niveles de acceso?

Los niveles de acceso son el método heredado para 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 los clústeres que ejecutan versiones de Kubernetes anteriores a la 1.10, se le otorgó un conjunto de alcances de acceso predeterminados a la cuenta de servicio predeterminada del clúster. gcloud y Google Cloud Platform Console otorgaron los niveles de acceso compute-rw y storage-ro a estos clústeres:

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

Cambios en los niveles de acceso

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

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 permiso para interactuar con Compute Engine o Cloud Storage, es posible que tus cargas de trabajo se vean afectadas. Recomendamos crear una cuenta de servicio personalizada con las funciones equivalentes de Cloud Identity and Access Management.

Si anulas los alcances 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 alcance storage-ro.

De manera alternativa, para replicar el comportamiento de clústeres anteriores a la versión 1.10, consulta la página sobre cómo 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 tienen 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"

Configura una cuenta de servicios personalizada para las cargas de trabajo

Cloud Identity and Access Management es el sistema de control de acceso para otorgar funciones autorizadas a usuarios y cuentas de servicio dentro del proyecto de GCP. Una cuenta de servicio es una Cuenta de Google especial que realiza tareas, como la implementación de aplicaciones, en tu nombre. Puedes usar Cloud IAM para crear una cuenta de servicio y, luego, usar las vinculaciones de políticas de Cloud IAM a fin de proteger la cuenta.

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

Crea 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'`

Otorga 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 el 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

Consulta la página sobre funciones mínimas para obtener más información.

Otorga funciones adicionales

Para otorgar a la cuenta de servicio la función [Compute Engine Admin][gce_a], 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 de Visualizador de objetos de almacenamiento, haz lo siguiente:

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 privadas almacenadas en Container Registry, consulta la página sobre cómo 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, usa esto:

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

Revierte a los niveles de acceso heredados

Si aún deseas usar los niveles de acceso heredados en clústeres que ejecutan la versión 1.10 de Kubernetes y versiones superiores, debes agregar los alcances de forma manual.

Console

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

  1. Dirígete al menú Google Kubernetes Engine en GCP Console.

    Ir al menú 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 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, usa esto:

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

Enviar comentarios sobre...

Documentación de Kubernetes Engine