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
- Lee la descripción general de IAM.
- Lee sobre las funciones predefinidas de IAM.
- Comprende las prácticas recomendadas para implementar el principio de mínimo privilegio.
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. Cuando agregas un permiso a una función personalizada, debes especificar el servicio, el recurso y el verbo de manera explícita. No puedes usar caracteres comodín (*
).
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 el rol Administrador de roles de la organización (roles/iam.organizationRoleAdmin
) o el rol Administrador de roles de IAM (roles/iam.roleAdmin
). "El rol de revisor de seguridad de IAM (roles/iam.securityReviewer
) permite ver roles personalizados, pero no administrarlos. Para obtener información sobre cómo otorgar estas funciones, consulta Otorga, cambia y revoca el acceso.
La interfaz de usuario de los roles personalizados se encuentra en Roles 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 permisos, debes usar el patrón lectura-modificación-escritura. Como resultado, a fin de actualizar una política de permisos, 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 del rol es un identificador único para el rol. El nombre del rol aparece en la lista de roles en la consola de Google Cloud.
Los ID del rol deben ser únicos dentro del proyecto o la organización en la que creaste el rol. 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 un rol personalizado no tiene que ser único. Por lo tanto, la consola de Google Cloud puede mostrar más de un rol personalizado con el mismo nombre. A fin de evitar confusiones, usa nombres únicos y descriptivos para tus roles personalizados. 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. Otra etapa de lanzamiento común es DISABLED
. Esta etapa de lanzamiento te permite inhabilitar una función personalizada.
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. La consola de Google Cloud coloca esa información en la descripción de forma automática cuando crea un nuevo rol personalizado.
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.
- Los roles personalizados pueden contener hasta 3,000 permisos. Además, el tamaño total máximo del título, la descripción y los nombres de permisos para un rol personalizado es de 64 KB.
- 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 un rol predefinido que incluya el permisoresourcemanager.projects.list
en un rol personalizado nueva a nivel de proyecto, se mostrará uno de los siguientes mensajes:- La consola de Google Cloud: Se muestra un mensaje que advierte que no es aplicable para roles personalizados 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 del rol. - Google Cloud CLI de la CLI de gcloud: Se muestra el siguiente mensaje de error:
INVALID_ARGUMENT: Permission resourcemanager.projects.list is not valid
. La función personalizada no se creará hasta que quites el permisoresourcemanager.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 deINVALID_ARGUMENT
. La función personalizada no se creará hasta que quites el permisoresourcemanager.projects.list
de la definición de la función y vuelvas a intentar realizar la operación.
- La consola de Google Cloud: Se muestra un mensaje que advierte que no es aplicable para roles personalizados a nivel de proyecto. De forma automática, se anulará la selección del permiso
¿Qué sigue?
- Aprende cómo crear funciones personalizadas.
- Aplica aún más el privilegio mínimo con las recomendaciones de función, que te permiten disminuir el alcance de tus permisos de forma segura.