Comprende las funciones personalizadas de IAM

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

IAM también proporciona la capacidad de crear funciones personalizadas de IAM. Puedes crear una función de IAM personalizada con uno o más permisos y, luego, otorgársela a los usuarios. 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 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 IAM, no se otorgan permisos a los usuarios directamente. En su lugar, les otorgas funciones, que agrupan 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. 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 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.

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

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 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 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. La etapa de lanzamiento es informativa y ayuda a realizar un seguimiento sobre cada función a fin de determinar si está lista para el uso generalizado.

Cada función personalizada puede tener una de las siguientes etapas de lanzamiento:

Etapas de lanzamiento
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.

Cuando crees una función personalizada, establece su etapa de lanzamiento en ALPHA. Pide a algunos miembros de tu organización que prueben la función. Después de confirmar que la función personalizada funciona de forma correcta, cambia la etapa de lanzamiento a BETA o GA.

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 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 ya no quieres que las personas de tu organización usen la función, cambia su propiedad role.stage a DEPRECATED y, de forma opcional, configura el deprecation_message para que los usuarios sepan qué funciones alternativas deben usarse o dónde 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.