Comprende las funciones personalizadas de IAM

La administración de identidades y accesos (IAM) proporciona funciones predefinidas que brindan acceso detallado a recursos específicos de Google Cloud y ayudan a evitar el acceso no deseado a otros recursos.

IAM también te permite crear funciones de IAM personalizadas. Las funciones personalizadas te ayudan a aplicar el principio de privilegio mínimo, ya que ayudan a garantizar que los principales de tu organización solo tengan los permisos que necesitan.

Considera crear una función personalizada en las siguientes situaciones:

  • Una principal necesita un permiso, pero cada función predefinida que incluye ese permiso también incluye permisos que la principal no necesita y no debería tener.
  • Usa las recomendaciones de funciones para reemplazar las asignaciones de funciones demasiado permisivas con funciones más adecuadas. En algunos casos, es posible que recibas una recomendación para crear una función personalizada.

Algunos permisos de IAM no son compatibles con las funciones personalizadas. A fin de verificar si se admite un permiso específico, consulta Nivel de compatibilidad de los permisos en funciones personalizadas.

Antes de comenzar

Conceptos básicos

En IAM, no se otorgan permisos a los usuarios directamente. En su lugar, otorgas funciones, que contienen uno o más permisos. Existen varios tipos de funciones en 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 IAM: propietario, editor y visualizador.

Google crea y mantiene las funciones predefinidas. Google actualiza sus permisos automáticamente, según sea necesario, como cuando Google Cloud agrega funciones o servicios nuevos.

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 IAM disponibles. Los permisos permiten a los usuarios realizar acciones específicas en los recursos de Google Cloud. En el mundo de IAM, los permisos se representan de la siguiente manera:

service.resource.verb

Por ejemplo, el permiso compute.instances.list permite que un usuario enumere las instancias de Compute Engine que posee y 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.

Cuando creas una función personalizada a nivel de proyecto, esta no puede contener permisos que solo están disponibles a nivel de organización o carpeta. Por ejemplo, no puedes usar el permiso resourcemanager.organizations.get en una función personalizada a nivel de proyecto, ya que un proyecto no puede contener otros proyectos; por lo tanto, el permiso solo es útil a nivel de organización o carpeta.

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 funciones de la organización

Si tienes una organización asociada con tu cuenta de Google Cloud, la función de administrador de funciones de la 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 funciones de la organización.

En la tabla siguiente, se enumeran los permisos en la función de administrador de funciones 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

Puedes incluir muchos permisos de IAM, pero no todos, en las funciones personalizadas. Cada permiso tiene uno de los siguientes niveles de asistencia para su uso en funciones personalizadas:

Nivel de compatibilidad Descripción
SUPPORTED El permiso es totalmente compatible en funciones personalizadas.
TESTING Google prueba el permiso para verificar su compatibilidad con las funciones personalizadas. Puedes incluir el permiso en funciones personalizadas, pero es posible que notes comportamientos inesperados. No se recomienda para su uso en producción.
NOT_SUPPORTED El permiso no es compatible con funciones personalizadas.

Es posible que algunos permisos no sean visibles para ti o no se puedan usar en una función personalizada, incluso si son compatibles con funciones personalizadas. Por ejemplo, puede que el uso de un permiso no esté habilitado en funciones personalizadas si no habilitaste la API para el servicio. Además, si creas una función personalizada a nivel de proyecto, no puedes usar permisos a nivel de organización en la función.

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 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 44 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 pueden contener símbolos y caracteres alfanuméricos en mayúsculas y minúsculas.

Implementa y prueba

Las funciones personalizadas incluyen una etapa de lanzamiento, que se almacena en la propiedad stage para la función. Las etapas de lanzamiento más comunes para las funciones personalizadas activas son ALPHA, BETA y GA. Estas etapas del lanzamiento son informativas, te ayudan a hacer un seguimiento de si cada función está lista para un uso generalizado.

Te recomendamos usar las etapas de lanzamiento ALPHA, BETA y GA para transmitir la siguiente información sobre la función:

  • ALPHA: La función aún se está desarrollando o probando, o incluye permisos para servicios o características de Google Cloud que aún no son públicos. No está listo para su uso generalizado.
  • BETA: La función se probó de forma limitada o incluye permisos para servicios o funciones de Google Cloud que no están disponibles de forma general.
  • GA: La función se probó extensamente y todos sus permisos son para servicios o características de Google Cloud que están disponibles de forma general.

Para obtener una lista completa de las etapas de lanzamiento posibles, consulta la referencia de funciones.

Para aprender a cambiar la etapa de lanzamiento de una función, consulta Edita una función personalizada existente.

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 características 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 básicas correspondientes. Tus funciones personalizadas para ese servicio no heredan esos permisos nuevos, por lo tanto, los usuarios asignados a esas funciones personalizadas podrían 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 podría 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 más información sobre cómo actualizar los permisos y 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 ya no deseas que las personas de tu organización usen una función personalizada, puedes inhabilitarla. Para inhabilitarla, cambia su etapa de lanzamiento a DISABLED.

Cuando una función está inhabilitada, todas las vinculaciones de funciones que otorgan la función se desactivan, lo que significa que otorgar la función a un usuario no tiene ningún efecto.

Consulta Inhabilita una función personalizada para saber cómo inhabilitarla.

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.

¿Qué sigue?