Comprende las funciones personalizadas de IAM

Cloud Identity and Access Management (Cloud IAM) proporciona funciones predefinidas que brindan acceso detallado a recursos específicos de Google Cloud y evitan el acceso no deseado a otros recursos.

Cloud IAM también proporciona la capacidad de crear funciones personalizadas de Cloud IAM. Puedes crear una función personalizada de Cloud IAM con uno o más permisos y, luego, otorgar esa función personalizada a los usuarios. Cloud IAM proporciona una IU y una API para crear y administrar funciones personalizadas.

En este tema, no se proporciona una lista completa de todos los permisos de Cloud IAM que puedes incluir en tus funciones personalizadas. A fin de verificar si un permiso es compatible con las funciones personalizadas, consulta Nivel de compatibilidad de los permisos en funciones personalizadas.

Antes de comenzar

Conceptos básicos

En Cloud IAM, no otorgas permisos a los usuarios de manera directa. En su lugar, les otorgas funciones, que agrupan uno o más permisos. Existen tres tipos de funciones en Cloud IAM: funciones básicas, funciones predefinidas y funciones personalizadas.

Las funciones básicas incluyen tres funciones que existían antes de la introducción de Cloud IAM: propietario, editor y visualizador.

Google crea y mantiene las funciones predefinidas. Sus permisos se actualizan de forma automática según sea necesario, por ejemplo, cuando se agregan funciones o servicios nuevos a Google Cloud.

Las funciones personalizadas están definidas por el usuario y te permiten agrupar uno o más permisos compatibles para satisfacer tus necesidades específicas. Google no mantiene las funciones personalizadas. Cuando se agregan permisos, funciones o servicios nuevos a Google Cloud, las funciones personalizadas no se actualizan de forma automática.

Cuando creas una función personalizada, debes elegir una organización o un proyecto en el cual crearla. Luego, puedes otorgar la función personalizada en la organización o el proyecto, así como cualquier recurso dentro de esa organización o proyecto.

Puedes crear una función personalizada si combinas uno o más permisos de Cloud IAM disponibles. Los permisos permiten a los usuarios realizar acciones específicas en los recursos de Google Cloud. En el mundo de Cloud IAM, los permisos se representan de la siguiente forma:

service.resource.verb

Por ejemplo, el permiso compute.instances.list permite que un usuario enumere las instancias de Google Compute Engine que le pertenecen, mientras que compute.instances.stop permite que un usuario detenga una VM.

En general, los permisos se corresponden 1:1 con los métodos REST. Es decir, cada servicio de Google Cloud cuenta con un permiso asociado a cada método de REST que tenga. Para llamar a un método, el emisor necesita ese permiso. Por ejemplo, el emisor de una llamada a topic.publish() necesita el permiso pubsub.topics.publish.

Solo puedes otorgar una función personalizada dentro del proyecto o la organización en la que la creaste. No puedes otorgar funciones personalizadas en otros proyectos ni organizaciones o en recursos dentro de organizaciones o proyectos diferentes.

Funciones y permisos obligatorios

Para crear una función personalizada, el emisor debe tener el permiso iam.roles.create.

A los usuarios que no sean propietarios, incluidos los administradores de la organización, se les debe asignar la función de administrador de funciones de la organización (roles/iam.organizationRoleAdmin) o la función de administrador de funciones de IAM (roles/iam.roleAdmin). La función de revisor de seguridad de IAM (roles/iam.securityReviewer) permite ver funciones personalizadas, pero no administrarlas. Para obtener información sobre cómo otorgar estas funciones, consulta Otorga, cambia y revoca el acceso.

La interfaz de usuario de las funciones personalizadas se encuentra en Funciones de IAM, dentro de Google Cloud Console. Solo está disponible para los usuarios que tienen permisos de crear o administrar funciones personalizadas. Por configuración predeterminada, solo los propietarios de los proyectos pueden crear funciones nuevas. Los propietarios de los proyectos pueden controlar el acceso a esta característica cuando les otorgan la función de administrador de funciones de IAM a otros en el mismo proyecto; para las organizaciones, solo los administradores de la organización pueden otorgar la función de administrador de funciones de la organización.

A continuación, se describen las funciones administrativas de manera más detallada.

Función de administrador de la función de organización

Si tienes una organización asociada a tu cuenta de GCP, la función de administrador de la función de organización te permite administrar todas las funciones personalizadas de tu organización. Esta función solo se puede otorgar en el nivel de organización. Solo los administradores de la organización pueden otorgar la función de administrador de la función de organización.

En la tabla siguiente, se enumeran los permisos en la función de administrador de la función de organización:

Función Permisos
roles/iam.organizationRoleAdmin iam.roles.create
iam.roles.delete
iam.roles.undelete
iam.roles.get
iam.roles.list
iam.roles.update
resourcemanager.projects.get
resourcemanager.projects.getIamPolicy
resourcemanager.projects.list
resourcemanager.organizations.get
resourcemanager.organizations.getIamPolicy

Función de administrador de funciones

La función de administrador de funciones te permite administrar todas las funciones personalizadas de un proyecto. Usa esta función si no tienes una organización. Solo los propietarios de la organización o del proyecto pueden otorgar esta función a nivel de proyecto.

En la tabla siguiente, se enumeran los permisos en la función de administrador de funciones:

Función Permisos
roles/iam.roleAdmin iam.roles.create
iam.roles.delete
iam.roles.undelete
iam.roles.get
iam.roles.list
iam.roles.update
resourcemanager.projects.get
resourcemanager.projects.getIamPolicy

Ciclo de vida de las funciones personalizadas

Hay algunos conceptos que aplican al momento de decidir cómo modelar, crear y administrar tus funciones personalizadas.

Creación

Antes de optar por la creación de una función personalizada, comprueba si el servicio tiene una función predefinida (o una combinación de varias funciones predefinidas) que satisfaga tus necesidades. Para obtener una lista completa de las funciones predefinidas, junto con los permisos que se incluyen en cada una de ellas, consulta la documentación sobre funciones predefinidas.

Si no existe una función predefinida (o una combinación de funciones predefinidas) que satisfaga tus necesidades, puedes crear una función personalizada que incluya solo los permisos que necesitas otorgar. Para obtener más información, consulta Crea y administra funciones personalizadas.

Permisos no compatibles o no disponibles

Es posible que algunos permisos no estén visibles para ti o no se puedan usar en una función personalizada. Por ejemplo, puede que el uso de un permiso no esté habilitado en funciones personalizadas si el servicio está en versión Beta o si no habilitaste la API para el servicio.

Para verificar si puedes usar un permiso específico en las funciones personalizadas, consulta Nivel de compatibilidad de los permisos en funciones personalizadas. Para verificar qué permisos puedes usar con un recurso específico, consulta Visualiza los permisos disponibles para un recurso.

Dependencias de permisos

Algunos permisos son efectivos solo si se otorgan en pares. Por ejemplo, para actualizar una política de Cloud IAM, debes usar el patrón lectura-modificación-escritura. Como resultado, a fin de actualizar una política, casi siempre necesitas el permiso getIamPolicy para ese servicio y tipo de recurso, además del permiso setIamPolicy.

Para asegurarte de que tus funciones personalizadas sean eficaces, puedes crear funciones personalizadas basadas en funciones predefinidas con permisos similares. Las funciones predefinidas pueden ayudarte a ver qué permisos se suelen usar en combinación.

Para aprender a crear una función personalizada basada en una función predefinida, consulta Crea y administra funciones personalizadas.

Nombra la función

Las funciones tienen un ID y un nombre. El ID de la función es un identificador único para la función. El nombre de la función aparece en la lista de funciones en Cloud Console.

Los ID de la función deben ser únicos dentro del proyecto o la organización en la que creaste la función. Esto garantiza que el ID completo de la función, que incluye su proyecto o la organización, sea único. Los ID de la función pueden tener hasta 64 caracteres y pueden contener caracteres alfanuméricos en mayúscula y minúscula, guiones bajos y puntos.

No puedes cambiar los ID de las funciones, por lo que debes elegirlos con cuidado. Puedes borrar una función personalizada, pero no puedes crear una nueva con el mismo ID completo hasta que se complete el proceso de eliminación de 37 días. Para obtener más información sobre el proceso de eliminación, consulta Borra una función personalizada.

El nombre de una función personalizada no tiene que ser único. Por lo tanto, Cloud Console puede mostrar más de una función personalizada con el mismo nombre. A fin de evitar confusiones, usa nombres únicos y descriptivos para tus funciones personalizadas. Además, considera indicar en el nombre de la función si la función es a nivel de la organización o a nivel del proyecto.

Los nombres de las funciones pueden tener hasta 100 bytes y contener símbolos y caracteres alfanuméricos en mayúscula y minúscula. Puedes cambiar los nombres de las funciones en cualquier momento.

Descripción de la función

Considera actualizar la descripción de la función después de editar una función personalizada; incluye también la fecha en la que se modificó y un resumen del propósito de la función. Las descripciones pueden tener hasta 256 caracteres y estar compuestas por caracteres alfanuméricos en mayúscula y minúscula, además de símbolos.

Ejecuta pruebas y realiza la implementación

Las funciones personalizadas incluyen una propiedad role.stage. Primero, establece la etapa en ALPHA a fin de indicar que la función se encuentra en desarrollo temprano y no está lista para la producción. Luego, permite que un conjunto pequeño de miembros de tu organización use la función en unos pocos casos prácticos de muestra.

Cuando los miembros estén satisfechos con la función personalizada nueva, cambia la propiedad role.stage a BETA o GA. En general, si la función personalizada está relacionada con permisos de servicios que están en Beta, debes marcar esta propiedad como BETA, no como GA, hasta que el servicio ya no esté en Beta.

Mantenimiento

Las funciones de trabajo y la funcionalidad del producto están en constante evolución. Mantener las funciones personalizadas actualizadas y seguir el principio de menor privilegio requiere esfuerzo de mantenimiento.

Por ejemplo, cuando una versión de un servicio obtiene funciones Beta nuevas, esos métodos de API se hacen públicos y los permisos se agregan de manera automática a las funciones predefinidas y primitivas correspondientes. Tus funciones personalizadas para ese servicio no heredan esos permisos, por lo tanto, los usuarios asignados a esas funciones personalizadas pueden informar que no tienen acceso a las características Beta nuevas. En ese momento, puedes elegir agregarlas o crear una función personalizada separada para que solo ciertos usuarios tengan acceso a esas características Beta.

Google puede actualizar una función predefinida existente si agrega (o quita) permisos, pero nosotros no modificamos funciones personalizadas basadas en funciones predefinidas. Las funciones personalizadas son listas fijas de permisos. Una función personalizada no tiene un vínculo a las funciones predefinidas en las que se basó.

Si tu función personalizada se basa en funciones predefinidas, te recomendamos que enumeres esas funciones en el campo de descripción de la función personalizada. De esta manera, es más fácil verificar si debes actualizar tu función personalizada en función de los cambios en una función predefinida. Cloud Console coloca esa información en la descripción de forma automática cuando crea una nueva función personalizada. Para obtener información sobre cómo actualizar la descripción de una función personalizada, consulta Edita una función personalizada existente.

Consulta el registro de cambios de los permisos para determinar qué funciones y permisos tienen cambios recientes.

Inhabilita las funciones personalizadas

Si deseas que los miembros de tu organización dejen de usar la función, cambia su propiedad role.stage a DEPRECATED. De forma opcional, puedes configurar deprecation_message para indicar a los usuarios qué funciones alternativas deben usar o dónde pueden obtener más información. También debes asegurarte de que ninguna política en tu organización siga haciendo referencia a la función obsoleta.

Cuando tengas la certeza de que la función se puede inhabilitar, llama a roles:UpdateRole() para inhabilitar la función.

Limitaciones conocidas

  • Algunas funciones predefinidas contienen permisos que no se admiten en las funciones personalizadas. Para verificar si puedes usar un permiso específico en una función personalizada, consulta Nivel de compatibilidad de los permisos en funciones personalizadas.
  • El permiso resourcemanager.projects.list solo es compatible con las funciones personalizadas a nivel de la organización; no está permitido en las funciones personalizadas a nivel de proyecto. Cuando copies una función predefinida que incluya el permiso resourcemanager.projects.list en una función personalizada nueva a nivel de proyecto, se mostrará uno de los siguientes mensajes:
    • Cloud Console: Se muestra un mensaje que advierte que no es aplicable para funciones personalizadas a nivel de proyecto. De forma automática, se anulará la selección del permiso resourcemanager.projects.list en la lista de permisos incluidos y podrás continuar con la creación de la función.
    • Herramienta de línea de comandos de gcloud del SDK de Cloud: Se muestra el mensaje de error INVALID_ARGUMENT: Permission resourcemanager.projects.list is not valid. La función personalizada no se creará hasta que quites el permiso resourcemanager.projects.list de la definición de la función y vuelvas a intentar realizar la operación.
    • API de Google Cloud: Se muestra el mensaje de error Permission resourcemanager.projects.list is not valid, junto con un código de error HTTP 400 y el estado de INVALID_ARGUMENT. La función personalizada no se creará hasta que quites el permiso resourcemanager.projects.list de la definición de la función y vuelvas a intentar realizar la operación.

Próximos pasos

Aprende cómo crear funciones personalizadas.