Descripción general de IAM

En esta página, se describe cómo funciona el sistema de Identity and Access Management (IAM) de Google Cloud y cómo puedes usarlo para administrar el acceso en Google Cloud.

IAM te permite otorgar acceso detallado a recursos específicos de Google Cloud y ayuda a evitar el acceso a otros recursos. IAM te permite adoptar el principio de seguridad de privilegio mínimo, que indica que nadie debe tener más permisos que los que realmente necesita.

Cómo funciona IAM

Para administrar el control de acceso con la IAM, define quién (identidad) tiene qué acceso (función) a qué recurso. Por ejemplo, las instancias de máquinas virtuales de Compute Engine, los clústeres de Google Kubernetes Engine (GKE) y los depósitos de Cloud Storage son recursos de Google Cloud. Las organizaciones, las carpetas y los proyectos que usas para organizar tus recursos también son recursos.

En IAM, el permiso para acceder a un recurso no se otorga directamente al usuario final. En su lugar, los permisos se agrupan en funciones, y las funciones se otorgan a las principales autenticadas. (Antes, IAM se refería a las principales como miembros. Algunas API aún usan este término).

Una política de permisos, también conocida como política de IAM, define y aplica qué roles se otorgan a qué principales. Cada política de permisos se adjunta a un recurso. Cuando una principal autenticada intenta acceder a un recurso, IAM verifica la política de permisos del recurso para determinar si la acción está permitida.

En el siguiente diagrama, se ilustra la administración de permisos en IAM.

Una política de permisos con dos vinculaciones de roles. Las vinculaciones de roles asocian a miembros específicos con roles específicos.

Este modelo de administración de acceso tiene tres partes principales:

  • Principal Una principal puede ser una Cuenta de Google (para usuarios finales), una cuenta de servicio (para aplicaciones y cargas de trabajo de procesamiento), un Grupo de Google, una cuenta de Google Workspace o un dominio de Cloud Identity que pueden acceder a un recurso. La identidad de una principal es una dirección de correo electrónico asociada a un usuario, una cuenta de servicio o un Grupo de Google, o es un nombre de dominio asociado a una cuenta de Google Workspace o un dominio de Cloud Identity.
  • Función. Una función es un grupo de permisos. Los permisos determinan qué operaciones están permitidas en un recurso. Cuando otorgas una principal a un miembro, otorgas todos los permisos que la función contiene.
  • Política. La política de permisos es un conjunto de vinculaciones de roles que se asignan a una o más principales con roles individuales. Cuando desees definir quién (principal) tiene qué tipo de acceso (rol) en un recurso, debes crear una política de permisos y vincularla al recurso.

En el diagrama anterior, por ejemplo, la política de permisos vincula a las principales, como user@example.com, con roles, como App Engine Admin (roles/appengine.appAdmin). Si la política de permisos se vincula con un proyecto, las principales obtienen los roles especificados dentro del proyecto.

En el resto de esta página, se describen estos conceptos con más detalle.

En IAM, otorgas acceso a las principales. Las principales pueden pertenecer a los siguientes tipos:

  • Cuenta de Google
  • Cuenta de servicio
  • Grupo de Google
  • Cuenta de Google Workspace
  • Dominio de Cloud Identity
  • Todos los usuarios autenticados
  • Todos los usuarios

Cuenta de Google

Una Cuenta de Google representa a un desarrollador, un administrador o cualquier otra persona que interactúe con Google Cloud. Cualquier dirección de correo electrónico asociada a una Cuenta de Google puede ser una identidad, incluidos gmail.com y otros dominios. Los usuarios nuevos pueden registrarse para obtener una Cuenta de Google en la página de registro de Cuentas de Google.

Cuenta de servicio

Una cuenta de servicio es una cuenta para una aplicación o una carga de trabajo de procesamiento en lugar de un usuario final individual. Cuando ejecutas código alojado en Google Cloud, el código se ejecuta como la cuenta que especifiques. Puedes crear tantas cuentas de servicio como sea necesario para representar los diferentes componentes lógicos de tu aplicación. Para obtener más información sobre el uso de una cuenta de servicio en tu aplicación, consulta Comenzar a usar la autenticación.

Grupo de Google

Un Grupo de Google es una colección de Cuentas de Google y cuentas de servicio que posee un nombre. Cada Grupo de Google tiene una dirección de correo electrónico única asociada con el grupo. Para encontrar la dirección de correo electrónico asociada con un Grupo de Google, haz clic en Acerca de en la página principal de cualquier Grupo de Google. Para obtener más información sobre los Grupos de Google, consulta la página principal de Grupos de Google.

Los Grupos de Google son una forma conveniente de aplicar controles de acceso a un grupo de usuarios. Puedes otorgar y cambiar los controles de acceso para un grupo completo de una sola vez, en lugar de hacerlo para usuarios individuales o cuentas de servicio uno por uno. También puedes agregar o quitar principales de un Grupo de Google con facilidad, en lugar de actualizar una política de permisos para agregar o quitar usuarios.

Los Grupos de Google no tienen credenciales de acceso y no puedes usarlos para establecer la identidad a fin de solicitar acceso a un recurso.

Cuenta de Google Workspace

Una cuenta de Google Workspace representa un grupo virtual de todas las Cuentas de Google que contiene. Las cuentas de Google Workspace se asocian al nombre de dominio de Internet de tu organización, como example.com. Cuando creas una Cuenta de Google para un usuario nuevo, como username@example.com, esa Cuenta de Google se agrega al grupo virtual de tu cuenta de Google Workspace.

Al igual que los Grupos de Google, no se pueden usar las cuentas de Google Workspace para establecer la identidad, pero permiten la administración conveniente de permisos.

Dominio de Cloud Identity

Un dominio de Cloud Identity es como una cuenta de Google Workspace porque representa un grupo virtual de todas las Cuentas de Google en una organización. Sin embargo, los usuarios del dominio de Cloud Identity no tienen acceso a las aplicaciones y las funciones de Google Workspace. Para obtener más información, consulta Acerca de Cloud Identity.

Todos los usuarios autenticados

El valor allAuthenticatedUsers es un identificador especial que representa a todas las cuentas de servicio y a todos los usuarios de Internet que se autenticaron con una Cuenta de Google. Este identificador incluye cuentas que no están conectadas a una cuenta de Google Workspace o a un dominio de Cloud Identity, como Cuentas de Gmail personales. Los usuarios que no están autenticados, como los visitantes anónimos, no están incluidos.

Algunos tipos de recursos no admiten este tipo de principal.

Todos los usuarios

El valor allUsers es un identificador especial que representa a cualquier persona que esté en Internet, incluidos los usuarios autenticados y no autenticados.

Algunos tipos de recursos no admiten este tipo de principal.

Cuando una principal autenticada intenta acceder a un recurso, IAM verifica la política de permisos del recurso para determinar si la acción está permitida.

En esta sección, se describen las entidades y conceptos involucrados en el proceso de autorización.

Recurso

Si un usuario necesita acceder a un recurso específico de Google Cloud, puedes otorgar al usuario una función para ese recurso. Algunos de estos recursos son los proyectos, las instancias de Compute Engine y los depósitos de Cloud Storage.

Algunos servicios permiten que se otorguen permisos de IAM con un nivel de detalle mayor que el nivel de proyecto. Por ejemplo, puedes otorgar la función de administrador de almacenamiento (roles/storage.admin) a un usuario para un bucket de Cloud Storage específico o puedes otorgar la función de administrador de instancias de Compute (roles/compute.instanceAdmin) a un usuario para una instancia específica de Compute Engine.

En otros casos, puedes otorgar permisos de IAM a nivel de proyecto. Así, todos los recursos dentro de ese proyecto heredan los permisos. Por ejemplo, para otorgar acceso a todos los bucket s de Cloud Storage en un proyecto, otorga acceso al proyecto en lugar de a cada bucket individual. Para otorgar acceso a todas las instancias de Compute Engine en un proyecto, otorga acceso al proyecto en lugar de a cada instancia individual.

Si quieres obtener información sobre qué funciones se pueden otorgar en qué recursos, dirígete a Funciones predefinidas y consulta la columna Recurso más bajo para una función determinada.

Permisos

Los permisos determinan qué operaciones están permitidas en un recurso. En el mundo de IAM, los permisos se representan en la forma de service.resource.verb, por ejemplo, pubsub.subscriptions.consume.

Los permisos suelen coincidir uno a uno con los métodos de la API de REST. Es decir, cada servicio de Google Cloud tiene un conjunto de permisos asociado para cada método de la API de REST que expone. El emisor de ese método necesita esos permisos para la llamada. Por ejemplo, si usas Pub/Sub y necesitas llamar al método topics.publish(), debes tener el permiso pubsub.topics.publish para ese tema.

No otorgas permisos a los usuarios directamente. En su lugar, identificas las funciones que contienen los permisos adecuados y, luego, otorgas esas funciones al usuario. Para obtener una lista de todos los permisos disponibles y las funciones que los contienen, consulta la referencia de permisos.

Funciones

Una función es un grupo de permisos. No puedes otorgar un permiso directamente al usuario. En su lugar, les otorgas una función. Cuando otorgas una función a un usuario, le otorgas todos los permisos que contiene esa función.

Permiso para la asignación de roles.

Existen varios tipos de funciones en IAM:

  • Roles básicos: son los roles que siempre estuvieron disponibles en Google Cloud Console. Son las funciones de propietario, editor y visualizador.

  • Funciones predefinidas: Son las funciones que brindan un control de acceso más detallado que las funciones básicas. Por ejemplo, la función predefinida de publicador de Pub/Sub (roles/pubsub.publisher) proporciona acceso solo para publicar mensajes en un tema de Pub/Sub.

  • Funciones personalizadas: Son funciones que creas para adaptar los permisos a las necesidades de tu organización cuando las funciones predefinidas no las satisfacen.

Si deseas obtener más información sobre las funciones, consulta los siguientes recursos:

Política de permisos

Puedes otorgar roles a los usuarios mediante la creación de una política de permisos, que es una colección de declaraciones que definen quién tiene qué tipo de acceso. Una política de permisos se adjunta a un recurso y se usa para aplicar el control de acceso cada vez que se accede a ese recurso.

Política de IAM.

Una política de permisos consiste en una lista de vinculaciones de roles. Una vinculación de rol une una lista de principales con un rol.

  • role: La función que deseas otorgar a la principal. role se especifica con la forma roles/service.roleName. Por ejemplo, Cloud Storage proporciona las funciones roles/storage.objectAdmin, roles/storage.objectCreator y roles/storage.objectViewer, entre otras.

  • members: Es una lista de una o más principales, como se describe en la sección Conceptos relacionados con la identidad de este documento. Cada tipo de principal se identifica con un prefijo, como una Cuenta de Google (user:), una cuenta de servicio (serviceAccount:), un Grupo de Google (group:), una cuenta de Google Workspace o un dominio de Cloud Identity (domain:). En el siguiente fragmento de código de ejemplo, se otorga la función de storage.objectAdmin a las siguientes principales mediante el prefijo adecuado: user:ali@example.com , serviceAccount:my-other-app@appspot.gserviceaccount.com, group:admins@example.com y domain:google.com. Se otorga la función objectViewer a user:maria@example.com.

En el siguiente fragmento de código, se muestra la estructura de una política de permisos.

{
  "bindings": [
    {
      "role": "roles/storage.objectAdmin",
       "members": [
         "user:ali@example.com",
         "serviceAccount:my-other-app@appspot.gserviceaccount.com",
         "group:admins@example.com",
         "domain:google.com"
       ]
    },
    {
      "role": "roles/storage.objectViewer",
      "members": [
        "user:maria@example.com"
      ]
    }
  ]
}

API de IAM y de políticas

IAM proporciona un conjunto de métodos que puedes usar para crear y administrar políticas de permisos en los recursos de Google Cloud. Los servicios que son compatibles con IAM exponen estos métodos. Por ejemplo, Resource Manager, Pub/Sub y la API de Cloud Life Sciences exponen los métodos de IAM, por nombrar algunos.

A continuación, se describen los métodos de IAM:

  • setIamPolicy(): Configura políticas de permisos en tus recursos.
  • getIamPolicy(): Obtiene una política de permisos que se configuró con anterioridad.
  • testIamPermissions(): Comprueba si el emisor tiene los permisos especificados para un recurso.

Puedes encontrar los temas de referencia de la API para estos métodos en la documentación de cada servicio que admite IAM.

Jerarquía de recursos

Los recursos de Google Cloud están organizados de forma jerárquica de la siguiente manera:

  • La organización es el nodo raíz de la jerarquía.
  • Las carpetas son elementos secundarios de la organización.
  • Los proyectos son elementos secundarios de la organización o de una carpeta.
  • Los recursos de cada servicio son descendientes de proyectos.

Cada recurso tiene exactamente un elemento superior. Para obtener más información, consulta Jerarquía de recursos.

El siguiente diagrama es un ejemplo de una jerarquía de recursos de Google Cloud.

Jerarquía para los recursos de IAM.

Puedes establecer una política de permisos en cualquier nivel de la jerarquía de recursos: el nivel de organización, de carpeta, de proyecto o de recurso. Los recursos heredan las políticas de permisos de todos sus recursos superiores. La política de permiso efectiva para un recurso es la unión de la política de permisos establecida en ese recurso y las políticas de permisos heredadas desde una jerarquía superior.

Esta herencia de políticas es transitiva; en otras palabras, los recursos heredan las políticas de permisos del proyecto, que heredan políticas de permisos de las carpetas, que heredan políticas de permisos de la organización. Por lo tanto, las políticas de permisos del nivel de organización también se aplican al nivel de recursos.

Por ejemplo: en el diagrama anterior, topic_a es un recurso de Pub/Sub que reside en el proyecto example-prod. Si otorgas la función de editor a micah@example.com en example-prod y la función de publicador a song@example.com en topic_a, lo que haces es otorgar la función de editor en topic_a a micah@example.com y la función de publicador a song@example.com.

Las políticas de permisos para recursos secundarios se heredan de las políticas de permisos en sus recursos superiores. Por ejemplo, si otorgas a un usuario el rol de editor para un proyecto y el de visualizador para un recurso secundario, el usuario tendrá el rol de editor para ese recurso. Si cambias la jerarquía de recursos, también se cambia la herencia de políticas. Por ejemplo, mover un proyecto a una organización hace que este herede de la política de permisos de la organización.

Compatibilidad de IAM con los servicios de Google Cloud

Con IAM, se verifica cada método de API en todos los servicios de Google Cloud a fin de garantizar que la cuenta que realiza la solicitud a la API tenga el permiso adecuado para usar el recurso.

Los servicios de Google Cloud ofrecen funciones predefinidas que proporcionan un control de acceso detallado. Por ejemplo, Compute Engine ofrece funciones como administrador de instancias de Compute y administrador de red de Compute. A su vez, App Engine ofrece funciones como administrador de App Engine y administrador de servicios de App Engine.

Las funciones predefinidas están disponibles para la mayoría de los servicios de Google Cloud. Para obtener más información, consulta la lista de todas las funciones predefinidas. Si necesitas aún más control sobre los permisos, considera crear una función personalizada.

Puedes otorgar a los usuarios ciertas funciones para acceder a los recursos con un nivel de detalle mayor que el nivel de proyecto. Por ejemplo, puedes crear una política de permisos que otorgue a un usuario el rol de suscriptor para un tema de Pub/Sub en particular. La lista de todas las funciones predefinidas muestra el nivel más bajo, o el tipo más detallado, de recurso que acepta cada función.

Modelo de coherencia para la API de IAM

Cuando lees datos de la API de IAM, cada lectura tiene coherencia eventual. En otras palabras, si escribes datos con la API de IAM y luego los lees de inmediato, la operación de lectura podría mostrar una versión anterior de los datos. Después de un breve retraso, puedes leer la nueva versión de los datos. Por lo general, esta demora se mide en segundos, no en minutos.

Por el contrario, la escritura de datos en la API de IAM tiene coherencia secuencial. En otras palabras, las operaciones de escritura siempre se procesan en el orden en que se recibieron.

Estos modelos de coherencia afectan el funcionamiento de la API de IAM. Por ejemplo, si creas una cuenta de servicio y, luego, haces referencia a ella de inmediato en otra solicitud, la API de IAM podría decir que no se pudo encontrar la cuenta. Este comportamiento sucede porque las operaciones de lectura tienen coherencia eventual. Es posible que la nueva cuenta de servicio tarde un poco más en ser visible.

Para lidiar con este comportamiento, la aplicación puede reintentar la solicitud con una retirada exponencial truncada.

¿Qué sigue?

Pruébalo tú mismo

Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.

Comenzar gratis