Mostrar todos los proyectos y carpetas de tu jerarquía

Los recursos de Google Cloud se organizan en una jerarquía, en la que cada nodo (organizaciones, carpetas, proyectos, etc.) tiene una referencia a su elemento superior. Puedes usar esa referencia como término de filtro clave para las búsquedas y mejorar la coherencia de las búsquedas de recursos.

Puedes conceder permisos a los usuarios mediante roles personalizados. Estos roles se rigen por el principio de mínimos accesos y, por lo general, solo proporcionan los permisos mínimos necesarios para realizar una tarea concreta.

Este esquema puede ser útil para aislar diferentes grupos de usuarios. Por ejemplo:

  • Una empresa grande con departamentos que no deberían poder inspeccionar los recursos de sus compañeros.
  • Contratistas a los que se les han concedido permisos para un proyecto específico, pero no para otros recursos.

Sin embargo, debido a sus permisos restringidos, los roles personalizados pueden provocar que se omitan muchos recursos de tu jerarquía al ejecutar una operación de lista. Cuando realizas búsquedas como usuario al que se le ha concedido un rol personalizado, puede ser difícil saber por qué no aparecen determinados recursos.

Para evitar esta situación, en esta página se describen las prácticas recomendadas para enumerar todos los recursos gestionados por la API Cloud Resource Manager en tu jerarquía de recursos. Puedes usar estas directrices para configurar comprobaciones de auditoría personalizadas o para crear tu propia experiencia de usuario con la API Cloud Resource Manager.

Mostrar todos los nodos de recursos

Cuando analiza su jerarquía de recursos para enumerar todos los recursos, necesita resultados coherentes. Si el análisis no detecta recursos o proporciona resultados obsoletos, puede ser difícil saber si algo ha ido mal. Para asegurarte de que siempre obtienes los resultados más precisos y completos, usa una cuenta de servicio y realiza un análisis de la siguiente manera:

  1. Concede a una cuenta de servicio los permisos list y get para organizaciones, carpetas y proyectos en el recurso de organización.
  2. Si va a enumerar recursos de proyectos y carpetas, especifique el recurso superior en la cadena de filtro.
  3. Ejecuta el método projects.list() con esta cuenta de servicio para cada tipo de recurso que quieras encontrar y para cualquier recurso intermedio, como las carpetas.

Ejemplo para enumerar todos los nodos de recursos

En el siguiente pseudocódigo se muestra cómo enumerar todos los nodos de recursos de tu organización:

organizations = organizations.search()
projects = emptyList()

parentsToList = queueOf(organizations)
while (parent = parentsToList.pop()) {
  // TODO: Iterate over paginated results as needed.
  // TODO: Handle PERMISSION_DENIED appropriately.
  projects.addAll(projects.list(parent.type, parent.id))
  parentsToList.addAll(folders.list(parent))
}

Cuando crees una experiencia de usuario personalizada, también puedes combinar resultados de búsqueda y cargar los recursos principales según sea necesario (y, al mismo tiempo, detectar la excepción PERMISSION_DENIED).

Reducir la latencia en gcloud projects list

Si tu consulta gcloud projects listfalla o tarda demasiado, puede que el número de proyectos que se devuelvan sea demasiado grande.Google Cloud Para solucionarlo, aplica las marcas filter y page-size al comando gcloud projects list.

Para obtener más información sobre las marcas que puedes añadir al comando gcloud projects list, consulta gcloud projects list.

Ejemplo de exclusión de proyectos de Apps Script

La causa más habitual de los errores o la latencia de las consultas es un número elevado de proyectos de Apps Script en una organización. El siguiente comando muestra cómo excluir proyectos de Apps Script de la lista de proyectos y limitar el número de recursos devueltos por página.

gcloud projects list --filter="NOT parent.id: 'APPS_SCRIPT_FOLDER_ID' "--page-size='30'

Obtener el ID de la carpeta de Apps Script

Para encontrar el ID de tu carpeta de Apps Script, sigue estos pasos:

  1. En la barra de herramientas de la Google Cloud consola, haz clic en Buscar recursos, documentos, productos y más y escribe apps-script.

    Ir a la Google Cloud consola

  2. En Recursos, seleccione la carpeta apps-script.

  3. En ID de carpeta, copie el ID de la carpeta.

Buscar recursos

Si tu análisis está diseñado para buscar un recurso que se creó hace algún tiempo, puedes realizar un análisis más rápido que tenga una coherencia eventual en lugar de una coherencia fuerte. Ten en cuenta que este método de búsqueda puede omitir algunos recursos de los resultados de búsqueda, sobre todo los que se hayan cambiado recientemente. Para buscar recursos, sigue estos pasos:

  1. Usa una cuenta de servicio que tenga el permiso get para el recurso que estés buscando.
  2. Ejecuta el método projects.search() con esta cuenta de servicio.

Solucionar problemas con recursos omitidos

Si estás desarrollando una herramienta de análisis, te recomendamos que uses los permisos list y get concedidos a nivel de organización. De esta forma, se evitan problemas causados por el hecho de que el usuario tenga permisos parciales, lo que provoca que algunos recursos se omitan de la lista.

Si estás diseñando una experiencia de usuario personalizada que compruebe los permisos de los usuarios, no hay una solución sencilla. Si un usuario no tiene permisos a nivel de organización, necesitará ciertos permisos en cada recurso para que aparezca. Si a un usuario le faltan permisos en un recurso de la jerarquía, es posible que algunos recursos no aparezcan.

Si un usuario tiene el permiso list, pero no el permiso get para un recurso concreto, ese recurso no se mostrará en la consolaGoogle Cloud . Sin embargo, el recurso se devolverá en una búsqueda mediante la API o Google Cloud CLI que especifique el elemento superior del recurso. Esta disparidad entre la consola y otros métodos es una fuente habitual de confusión al intentar analizar la jerarquía de recursos. Google Cloud

En los siguientes diagramas se muestran algunas configuraciones de permisos habituales y cómo cambian los recursos que puede ver un usuario al realizar una búsqueda.

Mostrar todos los recursos

En este ejemplo, todos los permisos necesarios se conceden en el recurso Organization. Por lo tanto, toda la jerarquía es visible al realizar una lista o una búsqueda.

Faltan permisos de la organización

En este ejemplo, el usuario tiene todos los permisos necesarios, excepto resourcemanager.organizations.get, pero se le conceden esos permisos a nivel de carpeta. Esta diferencia de permisos les da visibilidad completa en la lista o la búsqueda de esa parte de la jerarquía, pero no en la otra mitad.

Permiso de solo lectura del proyecto

En este ejemplo se muestra la experiencia de un usuario al que solo se le ha concedido el permiso resourcemanager.projects.get a nivel del recurso Folder. Pueden ver los proyectos que hay en esa carpeta en la jerarquía, pero solo si los buscan. Si usa la función de lista, no obtendrá ningún resultado.

Permiso de solo lectura de carpetas

En este ejemplo se muestra el mismo problema que en el anterior, en el que los permisos concedidos solo permiten a un usuario encontrar sus recursos de carpeta mediante una búsqueda. Si usas la función de lista, no se devolverá ningún resultado.

Permisos mixtos

El usuario de este ejemplo tiene una combinación de permisos en toda la organización. Pueden enumerar carpetas a nivel de organización, lo que les permite encontrarlas con búsquedas que especifican el recurso superior en toda la jerarquía. Pueden enumerar los recursos de un proyecto de una carpeta, pero no de otra, y tienen permiso resourcemanager.projects.get en un proyecto situado en la parte inferior de la jerarquía.

Por lo tanto, no pueden devolver los proyectos de la parte izquierda de esta jerarquía de recursos. Solo pueden enumerar los proyectos de la parte derecha mediante una búsqueda que especifique el recurso principal, y solo se puede ver un proyecto cuando se consulta en la consola Google Cloud .

Recursos no detectables

En este ejemplo, el usuario puede obtener el recurso Organization y enumerar los recursos Project especificando el elemento superior en toda la jerarquía. Sin embargo, no tienen permiso para enumerar ni buscar ninguna de las carpetas intermedias. Sus proyectos se pueden buscar si el usuario conoce el ID de su carpeta principal. El usuario no podrá ver las carpetas en absoluto, por lo que no podrá descubrir el ID si no lo tiene ya. El único recurso que aparecerá en la consola Google Cloud es la organización.

Al diseñar tu experiencia de usuario personalizada, es importante que tengas en cuenta situaciones similares a las anteriores. Puedes usar una combinación de listado y búsqueda para renderizar la jerarquía de recursos. También debes plantearte cómo comunicar a los usuarios que no tienen los permisos necesarios para ver toda la jerarquía de recursos.