Crea políticas de IAM

En esta página, se explica cómo crear políticas de administración de identidades y accesos (IAM) para la autorización en Google Kubernetes Engine (GKE).

Descripción general

Cada llamada a la API de Google Cloud, GKE y Kubernetes requiere que la cuenta con la que se realiza la solicitud tenga los permisos necesarios. De forma predeterminada, nadie excepto tú puede acceder a tu proyecto o sus recursos. Puedes usar IAM a fin de administrar quién tiene acceso a tu proyecto y qué puede hacer. Los permisos de IAM funcionan junto con RBAC de Kubernetes, que proporciona controles de acceso detallados para objetos específicos dentro de un clúster o un espacio de nombres. IAM se enfoca más en los permisos a nivel de proyecto y de la organización, aunque proporciona varias funciones predefinidas específicas a GKE.

Para otorgar a los usuarios y a las cuentas de servicio acceso a tu proyecto de Google Cloud, debes agregarlos como miembros del equipo del proyecto y, luego, asignar funciones a los miembros del equipo. Las funciones definen a qué recursos de Google Cloud puede acceder una cuenta y qué operaciones puede realizar.

En GKE, también puedes usar IAM para administrar qué usuarios y cuentas de servicio tienen acceso y pueden realizar operaciones en tus clústeres.

Antes de comenzar

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

  • Asegúrate de que habilitaste la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Asegúrate de que instalaste el SDK de Cloud.
  • Establece la configuración predeterminada de la herramienta de línea de comandos de gcloud para tu proyecto mediante uno de los siguientes métodos:
    • Usa gcloud init si deseas ver una explicación sobre cómo configurar los valores predeterminados del proyecto.
    • Usa gcloud config para configurar el ID, la zona y la región del proyecto de manera individual.

    gcloud init

    1. Ejecuta gcloud init y sigue las instrucciones:

      gcloud init

      Si usas SSH en un servidor remoto, usa la marca --console-only para evitar que el comando abra un navegador:

      gcloud init --console-only
    2. Sigue las instrucciones para autorizar a la herramienta de gcloud a usar tu cuenta de Google Cloud.
    3. Crea una configuración nueva o selecciona una existente.
    4. Elige un proyecto de Google Cloud.
    5. Elige una zona de Compute Engine predeterminada.
    6. Elige una región de Compute Engine predeterminada.

    gcloud config

    1. Establece tu ID del proyecto predeterminado:
      gcloud config set project PROJECT_ID
    2. Configura la región de Compute Engine predeterminada (por ejemplo, us-central1):
      gcloud config set compute/region COMPUTE_REGION
    3. Configura la zona de Compute Engine predeterminada (por ejemplo, us-central1-c):
      gcloud config set compute/zone COMPUTE_ZONE
    4. Actualiza gcloud a la versión más reciente:
      gcloud components update

    Cuando configuras las ubicaciones predeterminadas, puedes evitar errores en la herramienta gcloud como el siguiente: One of [--zone, --region] must be supplied: Please specify location.

Interacción con RBAC de Kubernetes

El sistema de control de acceso basado en funciones (RBAC) de Kubernetes también administra el acceso a los recursos en el clúster. RBAC controla el acceso en el nivel de clúster y espacio de nombres, mientras que IAM funciona a nivel de proyecto.

IAM y RBAC pueden trabajar en conjunto. Una entidad debe tener suficientes permisos de RBAC y de IAM para trabajar con recursos en tu clúster.

Funciones de IAM

En las siguientes secciones, se describen las funciones de IAM disponibles en Google Cloud.

Funciones predefinidas de GKE

IAM proporciona funciones predefinidas que otorgan acceso a recursos específicos de Google Cloud y evitan el acceso no autorizado a otros recursos.

IAM ofrece las siguientes funciones predefinidas para GKE.

Role Title Description Lowest resource
roles/container.admin Kubernetes Engine Admin

Provides access to full management of clusters and their Kubernetes API objects.

To set a service account on nodes, you must also have the Service Account User role (roles/iam.serviceAccountUser) on the user-managed service account that your nodes will use.

  • Project
roles/container.clusterAdmin Kubernetes Engine Cluster Admin

Provides access to management of clusters.

To set a service account on nodes, you must also have the Service Account User role (roles/iam.serviceAccountUser) on the user-managed service account that your nodes will use.

  • Project
roles/container.clusterViewer Kubernetes Engine Cluster Viewer

Provides access to get and list GKE clusters.

roles/container.developer Kubernetes Engine Developer

Provides access to Kubernetes API objects inside clusters.

  • Project
roles/container.hostServiceAgentUser Kubernetes Engine Host Service Agent User

Allows the Kubernetes Engine service account in the host project to configure shared network resources for cluster management. Also gives access to inspect the firewall rules in the host project.

roles/container.viewer Kubernetes Engine Viewer

Provides read-only access to resources within GKE clusters, such as nodes, pods, and GKE API objects.

  • Project

Para obtener una lista completa de los permisos individuales en cada función, consulta Funciones de Google Kubernetes Engine. También puedes ver los permisos en cada función de IAM mediante la herramienta de gcloud o Cloud Console. Para obtener instrucciones, consulta Visualiza los permisos que otorgan las funciones de IAM.

Funciones de IAM básicas

Las funciones de IAM básicas permiten que los usuarios tengan acceso global a nivel de proyecto a todos los recursos de Google Cloud. Para mantener tu proyecto y tus clústeres seguros, usa las funciones predefinidas siempre que sea posible.

Si deseas obtener más información sobre las funciones básicas, consulta Funciones básicas en la documentación de IAM.

Función de usuario de cuenta de servicio

La función de usuario de cuenta de servicio otorga a una cuenta de usuario de Google Cloud el permiso para realizar acciones como si lo hiciera una cuenta de servicio.

  • Si se otorga la función iam.serviceAccountUser a un usuario para un proyecto, se le concederán todas las funciones otorgadas a todas las cuentas de servicio del proyecto, incluidas las cuentas de servicio que puedan crearse en el futuro.

  • Si se otorga la función iam.serviceAccountUser a un usuario para una cuenta de servicio específica, se le concederán todas las funciones otorgadas a esa cuenta de servicio.

Esta función incluye los siguientes permisos:

  • iam.serviceAccounts.actAs
  • iam.serviceAccounts.get
  • iam.serviceAccounts.list
  • resourcemanager.projects.get
  • resourcemanager.projects.list

Para obtener más información sobre la función ServiceAccountUser, consulta ServiceAccountUser en la documentación de IAM.

En el siguiente comando, se muestra la sintaxis para otorgar la función Usuario de cuentas de servicio:

gcloud iam service-accounts add-iam-policy-binding \
  SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
  --member=user:USER \
  --role=roles/iam.serviceAccountUser

Reemplaza lo siguiente:

  • SA_NAME: Es el nombre de la cuenta de servicio.
  • PROJECT_ID: El ID del proyecto de Google Cloud.
  • USER: Es la dirección de correo electrónico del usuario.

Función de usuario de agente de servicios de host

La función de usuario de agente de servicio del host solo se usa en clústeres de VPC compartida. Esta función incluye los siguientes permisos:

  • compute.firewalls.get
  • container.hostServiceAgent.*
  • dns.networks.bindDNSResponsePolicy
  • dns.networks.bindPrivateDNSPolicy
  • dns.networks.bindPrivateDNSZone

Funciones personalizadas

Si las funciones predefinidas no satisfacen tus necesidades, puedes crear funciones personalizadas con los permisos que definas.

Para obtener más información sobre cómo crear y asignar funciones personalizadas, consulta Crea y administra funciones personalizadas.

Visualiza los permisos que otorgan las funciones de IAM

Puedes ver los permisos otorgados por cada función mediante la herramienta de gcloud o Cloud Console.

gcloud

Para ver los permisos que otorga una función específica, ejecuta el siguiente comando:

gcloud iam roles describe roles/ROLE

Reemplaza ROLE por cualquier función de IAM. Las funciones de GKE tienen el prefijo roles/container, como gcloud iam roles describe roles/container.admin.

Console

Para ver los permisos otorgados por una función específica, sigue estos pasos:

  1. Ve a la sección Funciones de la página IAM y administración en Cloud Console.

    Ir a IAM y administración

  2. Para ver las funciones de GKE, en el campo Filtrar tabla, ingresa Kubernetes Engine.

  3. Selecciona la función que deseas ver. Se muestran la descripción de la función y una lista de los permisos asignados.

Administra funciones de IAM

Si deseas obtener más información a fin de administrar las funciones y los permisos de IAM para usuarios, consulta Otorga, cambia y revoca el acceso de los miembros al proyecto en la documentación de IAM.

Para las cuentas de servicio, consulta Asigna funciones a las cuentas de servicio.

Ejemplos

A continuación, se muestran algunos ejemplos de cómo funciona IAM con GKE:

  • Un nuevo empleado se une a una empresa. Es necesario agregarlo al proyecto de Google Cloud, pero solo necesita ver los clústeres del proyecto y otros recursos de Google Cloud. El propietario del proyecto le asigna la función de Visualizador de Compute a nivel de proyecto. Esta función proporciona acceso de solo lectura a los nodos de visualización y enumeración, que son recursos de Compute Engine.
  • El empleado está trabajando en operaciones y necesita actualizar un clúster con gcloud o Google Cloud Console. Para esta operación, se requiere el permiso container.clusters.update, por lo que el propietario del proyecto le asigna la función de Administrador de clúster de Kubernetes Engine. Ahora, el empleado tiene los permisos que otorgan las funciones de Administrador de clúster de Kubernetes Engine y Visualizador de Compute.
  • El empleado debe investigar por qué una implementación está teniendo problemas. Debe ejecutar kubectl get pods para ver los pods que se ejecutan en el clúster. Ya tiene la función de Visualizador de Compute, que no es suficiente para ver los pods. El empleado necesita la función de visualizador de Kubernetes Engine.
  • El empleado necesita crear un nuevo clúster. El propietario del proyecto otorga al empleado la función de Usuario de cuenta de servicio para la cuenta de servicio PROJECT_NUMBER-compute@developer.gserviceaccount.com, de modo que, con la cuenta del empleado, se pueda acceder a la cuenta de servicio predeterminada de Compute Engine. Esta cuenta de servicio tiene la función de Editor, que proporciona un amplio conjunto de permisos.

¿Qué sigue?