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. Puede crear una función personalizada de Cloud IAM con uno o más permisos y, luego, otorgarla 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.

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.

Las funciones personalizadas se pueden usar solo para otorgar permisos en políticas de la misma organización o proyecto que posee las funciones o recursos. No puede otorgar funciones personalizadas de una organización o proyecto en un recurso que es propiedad de una organización o proyecto diferente.

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.

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. Según la 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:

Role 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 la sección Mira 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.

Nombra la función

El ID de una función personalizada debe ser único. Puede tener hasta 64 caracteres y estar compuesto por caracteres alfanuméricos en mayúscula y minúscula, guiones bajos y puntos.

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. Los nombres pueden tener hasta 100 bytes de longitud, y contener caracteres alfanuméricos en mayúscula y minúscula, además de símbolos. Los nombres de las funciones se pueden cambiar en cualquier momento.

Elige con cuidado el ID para tu función, debido a que no se puede cambiar. Puedes borrar una función, pero no puedes crear una función personalizada nueva con el mismo ID por 37 días luego de que se haya completado el proceso de eliminación. Para obtener más información sobre el proceso de eliminación, consulta Borra una función personalizada.

El nombre de la función es lo que se muestra en Cloud Console. Elige nombres sin ambigüedades a fin de evitar confusiones para los usuarios que seleccionan funciones personalizadas en Cloud Console. Además, considera indicar qué funciones se encuentran a nivel de la organización y cuáles están a nivel del proyecto. Para ello, incluye esa información en el nombre de la función.

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.

Implementa y prueba

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 actualizadas las funciones personalizadas y asignar los privilegios mínimos necesarios exige un esfuerzo de mantenimiento.

Por ejemplo, cuando un servicio publicado 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 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; no existe un vínculo con las funciones predefinidas en las que podrían estar basadas.

Recomendamos agregar estos detalles al campo de descripción de una función personalizada existente para facilitar la revisión de cambios recientes realizados en funciones predefinidas que justifiquen actualizaciones en tu función personalizada. Cloud Console coloca esa información en la descripción de forma automática cuando creas una nueva función personalizada.

Consulta el registro de cambios de permisos de IAM para determinar qué permisos cambiaron de manera reciente.

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.
  • Las funciones personalizadas creadas dentro de un proyecto no pueden enumerar otros proyectos. 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

Aprende cómo crear funciones personalizadas.