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 permisos de acceso son el método heredado para especificar los permisos de los nodos y de 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 permisos de acceso predeterminados a la cuenta de servicio predeterminada del clúster. gcloud y Google Cloud Console otorgaron los siguientes permisos de acceso 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 que se almacenan en Container Registry.

Cambios en los permisos de acceso

A partir de la versión 1.10 de Kubernetes, gcloud y Cloud 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 (Cloud IAM).

Si anulas los alcances y tus cargas de trabajo requieren permiso para interactuar con Cloud Storage (o extraer imágenes de 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 IAM es el sistema de control de acceso que se usa para otorgar funciones autorizadas a usuarios y a cuentas de servicio dentro de tu 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:GKE Node Service Account'`

Otorga funciones mínimas

A fin de configurar la cuenta de servicio con las funciones y los permisos mínimos necesarios para que funcione el nodo de GKE, ejecuta los siguientes comandos, en los que $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

Otorga funciones adicionales

Para otorgar la función de 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 de Visualizador de objetos de almacenamiento, ejecuta el siguiente comando:

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

Para obtener información sobre cómo otorgar a las cuentas de servicio acceso a imágenes privadas almacenadas en Container Registry, consulta Otorga permisos de Cloud IAM.

Crea un clúster o grupo de nodos con la cuenta de servicio 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 posteriores, debes agregar los alcances de forma manual.

Console

Para crear un clúster mediante Cloud Console, sigue estos pasos:

  1. Visita el menú Google Kubernetes Engine en Cloud Console.

    Ir al menú Google Kubernetes Engine

  2. Haz clic en el botón Crear clúster.

  3. En Versión principal, selecciona una versión de Kubernetes.

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

  5. En el panel de navegación, en default-pool, haz clic en Seguridad.

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

  7. En Compute Engine, selecciona Lectura/escritura. Para Almacenamiento, debería ser Solo lectura de forma predeterminada.

  8. 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 este comando:

gcloud container node-pools create example-pool --scopes compute-rw,gke-default