Comprende las funciones personalizadas de IAM

Cloud Identity and Access Management (Cloud IAM) proporciona funciones predefinidas que otorgan acceso detallado a recursos específicos de Google Cloud Platform y evitan el acceso no autorizado 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 para permisos en funciones personalizadas. Para obtener más información sobre funciones personalizadas de un servicio específico, consulta la sección Más documentación sobre IAM.

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 dos tipos de funciones en Cloud IAM: las funciones predefinidas y las funciones personalizadas.

Google crea y mantiene las funciones predefinidas. Sus permisos se actualizan de manera automática cuando es necesario, como cuando se agregan características o servicios nuevos a GCP.

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, características o servicios nuevos a GCP, tus funciones personalizadas no se actualizan de manera automática.

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

<service>.<resource>.<verb>

Por ejemplo, el permiso compute.instances.list le permite a un usuario hacer una lista de las instancias de Google Compute Engine que posee, mientras que compute.instances.stop le permite a un usuario detener una VM.

En general, los permisos se corresponden 1:1 con los métodos REST. Es decir, cada servicio de GCP tiene un permiso asociado con cada método REST que tenga. Para llamar a un método, el emisor necesita ese permiso. Por ejemplo, el emisor de 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 puedes 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, un emisor debe tener el permiso iam.roles.create.

A los usuarios que no son propietarios, incluidos los administradores de la organización, se les debe asignar la función de administrador de la función de organización (roles/iam.organizationRoleAdmin) o la función de administrador de la función de IAM (roles/iam.roleAdmin). La función de revisor de seguridad de IAM (roles/iam.securityReviewer) habilita la capacidad de ver las funciones personalizadas, pero no de administrarlas.

La interfaz de usuario de las funciones personalizadas se encuentra en la Google Cloud Platform Console bajo las funciones de IAM. 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 decidir crear una función personalizada, asegúrate de que ya no exista una función personalizada (o un conjunto de funciones) para el servicio que necesitas. Puedes obtener más información sobre los permisos aplicables a un servicio específico si consultas los siguientes vínculos en la sección Más documentación sobre IAM. Para obtener una lista de los permisos que contiene una función predefinida, consulta obtén los metadatos de la función.

Si el conjunto de permisos otorgados a una o más funciones predefinidas no es apropiado para ti, debes crear una función personalizada basada en una o más funciones personalizadas y agregar o borrar permisos según sea necesario. Puedes encontrar más detalles sobre cómo realizar esto en Crea y administra funciones personalizadas.

Permisos no compatibles o no disponibles

También debes estar atento a que algunos permisos pueden no estar visibles o listos para usar en una función personalizada. Por ejemplo, puede que un permiso no esté disponible a fin de usarse en funciones personalizadas si el servicio está en Beta o si no habilitaste la API para el servicio.

Para determinar si un permiso se puede incluir en una función personalizada, consulta la sección Visualiza los permisos disponibles para un recurso de Crea y administra funciones personalizadas.

Los permisos de Cloud IAM siguientes no son compatibles con las funciones personalizadas que se muestran a continuación:

  • iam.serviceAccounts.getAccessToken
  • iam.serviceAccounts.actAs
  • iam.serviceAccounts.signBlob
  • iam.serviceAccounts.signJwt

A fin de verificar que permisos son compatibles con una función personalizada para un servicio de GCP dado, consulta esta tabla.

Dependencias de permisos

Algunos permisos solo son efectivos cuando se otorgan en pares. Por ejemplo, dado que la actualización de las políticas de Cloud IAM necesita que se use el patrón Read-Modify-Write, setIamPolicy en general, necesita que se use la getIamPolicy para obtener el etag antes de actualizar una política.

Nombra la función

El ID para una función personalizada debe ser único, pero la propiedad del nombre no tiene que serlo.

Por lo tanto, la GCP Console puede mostrar más de una función personalizada con el mismo nombre. A fin de evitar una confusión, usa nombres únicos y descriptivos para tus funciones personalizadas.

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 el proceso de eliminación se completó. 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 GCP Console. Elige nombres que no sean ambiguos para evitar que los usuarios que seleccionan funciones personalizadas en la GCP Console se confundan. También considera indicar qué funciones son a nivel de proyecto o a nivel de organización mediante la inclusión de esa información en el nombre de la función. El nombre de la función se puede cambiar las veces que desees.

Descripción de la función

Considera actualizar la descripción de la función después de editar una función personalizada y también incluye la fecha en la que se modificó y un resumen del propósito de la función.

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 está 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 tus funciones personalizadas hacen referencia a los permisos de servicios que están en Beta, debes marcarlas como BETA, no como GA, hasta que el servicio esté afuera de 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 en caso de que cambios recientes realizados en funciones predefinidas garanticen actualizaciones en tu función personalizada. GCP Console coloca esa información de manera automática en la descripción cuando se crea una función personalizada nueva.

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

Inhabilita las funciones personalizadas

Si no deseas que las personas de tu organización sigan usando la función, cambia su propiedad role.stage a DEPRECATED y establece de manera opcional el deprecation_message para permitirles a los usuarios conocer qué funciones alternativas deben usar o dónde pueden obtener más información. También debes asegurarte de que no ninguna política en tu organización siga haciendo referencia a la función obsoleta.

Cuando estés seguro de que la función se puede inhabilitar, llama a roles:UpdateRole() para inhabilitar esta función.

Limitaciones conocidas

  • Algunas funciones predefinidas contienen permisos obsoletos o permisos que, de otra manera, no están permitidos en las funciones personalizadas. Una función personalizada basada en una función predefinida que contiene permisos obsoletos o restringidos no contendrá esos permisos. Consulta el tema Nivel de asistencia para permisos en funciones personalizadas a fin de obtener una lista completa de todos los permisos admitidos.

  • Las funciones personalizadas creadas dentro de un proyecto no pueden enumerar otros proyectos. Cuando copias una función predefinida que incluye el permiso resourcemanager.projects.list en una función personalizada nueva a nivel de proyecto, se mostrará uno de los mensajes siguientes:

    • GCP Console: se muestra el mensaje de advertencia siguiente: “no es aplicable para funciones personalizadas a nivel de proyecto”. Se anulará la selección del permiso resourcemanager.projects.list de manera automática de la lista de permisos incluidos y, luego, puedes continuar con la creación de la función.
    • La herramienta de línea de comandos de gcloud del SDK de Cloud: se muestra el mensaje de error siguiente: INVALID_ARGUMENT: Permission resourcemanager.projects.list is not valid. La función personalizada no se creará hasta que se quite el permiso resourcemanager.projects.list de la definición de la función y se pruebe la operación de nuevo.
    • Las API de Google Cloud: se muestra el mensaje de error siguiente: Permission resourcemanager.projects.list is not valid, junto con un código de error de HTTP 400 y un estado de INVALID_ARGUMENT. La función personalizada no se creará hasta que se quite el permiso resourcemanager.projects.list de la definición de la función y se pruebe la operación de nuevo.

Pasos siguientes

Más documentación de IAM

Documentación Descripción
Descripción general de IAM Explica los conceptos básicos de IAM.
Comprende las funciones Explica las funciones predefinidas y primitivas de IAM.
IAM para las organizaciones Explica las funciones y los permisos de IAM para las organizaciones.
IAM para los proyectos Explica las funciones y los permisos de IAM para los proyectos.
IAM para App Engine Explica las funciones y los permisos de IAM para App Engine.
IAM para Cloud BigQuery Explica las funciones y los permisos de IAM para Cloud BigQuery.
IAM para Cloud Bigtable Explica las funciones y los permisos de IAM para Cloud Bigtable.
IAM para la API de Cloud Billing Explica las funciones y permisos de IAM para la API de Cloud Billing.
IAM para Cloud Dataflow Explica las funciones y los permisos de IAM para Cloud Dataflow.
IAM para Cloud Dataproc Explica las funciones y los permisos de IAM para Cloud Dataproc.
IAM para Cloud Datastore Explica las funciones y los permisos de IAM para Cloud Datastore.
Nota: Cloud Datastore no es compatible en la actualidad con las funciones personalizadas.
IAM para Cloud Deployment Manager Explica las funciones y los permisos de IAM para Cloud Deployment Manager.
IAM para Cloud DNS Explica las funciones y los permisos de IAM para Cloud DNS.
[IAM para Google Kubernetes Engine][] Explica las funciones y los permisos de IAM para Google Kubernetes Engine.
IAM para Cloud Pub/Sub Explica las funciones y los permisos de IAM para Cloud Pub/Sub.
[IAM para Cloud SQL][] Explica las funciones y los permisos de IAM para Cloud SQL.
IAM para Cloud Storage Explica las funciones y los permisos de IAM para Cloud Storage.
[IAM para Compute Engine][] Explica las funciones y los permisos de IAM para Compute Engine.
IAM para carpetas Explica las funciones y los permisos de IAM para carpetas.
IAM para administración de servicios Explica las funciones y los permisos de IAM para la administración de servicios.
IAM para Stackdriver Debugger Explica las funciones y los permisos de IAM para Stackdriver Debugger.
IAM para Stackdriver Logging Explica las funciones y los permisos de IAM para Stackdriver Logging.
IAM para Stackdriver Trace Explica las funciones y los permisos de IAM para Stackdriver Trace.
¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación de Cloud Identity and Access Management