Enumera todos los proyectos y las carpetas de tu jerarquía

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

Puedes otorgar permisos a los usuarios con las funciones personalizadas. Estas funciones operan en el principio del menor privilegio y suelen brindar solo los permisos mínimos necesarios para realizar una tarea en particular.

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 pares.
  • Contratistas a los que se les otorgan permisos de un proyecto específico, pero no de otros recursos.

Sin embargo, como resultado de sus permisos restringidos, las funciones personalizadas pueden ocasionar que se omitan muchos recursos en tu jerarquía cuando se ejecuta una operación de lista. Cuando se realizan búsquedas como usuario al que se le otorgó una función personalizada, puede ser difícil saber por qué ciertos recursos no aparecen.

Para evitar esta situación, en esta página se analizan las prácticas recomendadas para enumerar todos los recursos que la API de Cloud Resource Manager administra en tu jerarquía de recursos. Puedes usar esta guía para configurar verificaciones de auditorías personalizadas o para crear tu propia experiencia del usuario, además de la API de Cloud Resource Manager.

Enumera todos los nodos de recursos

Cuando analizas la jerarquía de recursos para ver una lista de todos los recursos, necesitas resultados con coherencia sólida. Si tu análisis omite recursos o proporciona resultados desactualizados, puede ser difícil saber que algo salió mal. Si deseas asegurarte de que siempre obtendrás los resultados más precisos y completos, usa una cuenta de servicio y realiza un análisis de la manera siguiente:

  1. Otorga a una cuenta de servicio los permisos list y get para organizaciones, carpetas y proyectos en el recurso de la organización.
  2. Si deseas enumerar los recursos de proyectos y carpetas, especifica el recurso superior en la string de filtro.
  3. Ejecuta el método projects.list() con esta cuenta de servicio para cada tipo de recurso que deseas buscar y cualquier recurso intermedio, como carpetas.

Ejemplo para enumerar todos los nodos de recursos

En el siguiente pseudocódigo, se muestra cómo enumerar todos los nodos de los recursos en tus organizaciones:

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 creas una experiencia del usuario personalizada, te recomendamos también combinar los resultados de la búsqueda y subir los recursos principales según sea necesario (al tiempo que se detecta la excepción PERMISSION_DENIED).

Reduce la latencia en la lista de proyectos de gcloud

Si tu consulta gcloud projects list falla o tarda demasiado, es posible que la cantidad de proyectos de Google Cloud que se muestre sea demasiado grande. Para solucionar este problema, aplica las marcas filter y page-size a tu comando gcloud projects list.

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

Ejemplo de exclusión de proyectos de Apps Script

La causa más común de errores de consultas o latencia es una gran cantidad de proyectos de Apps Script dentro de una organización. En el siguiente comando, se muestra cómo excluir proyectos de Apps Script de la lista de proyectos y limitar la cantidad de recursos que se muestran por página.

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

Obtén 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 consola de Google Cloud, haz clic en Buscar recursos, documentos, productos y mucho más y escribe apps-script.

    Ir a la consola de Google Cloud

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

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

Buscar recursos

Si tu análisis está destinado a buscar un recurso que se creó hace algún tiempo, puedes realizar un análisis más rápido que tenga coherencia eventual, en lugar de coherencia sólida. Ten en cuenta que, en este método de búsqueda, se pueden omitir algunos recursos del resultado de la búsqueda, en particular, cualquier recurso que se modificó recientemente. Para buscar recursos, haz lo siguiente:

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

Solución de problemas de recursos omitidos

Si desarrollas una herramienta de análisis, te recomendamos que uses los permisos list y get que se otorgan a nivel de organización. Esto evita que el usuario que tiene permisos parciales genere problemas, lo que hace que algunos recursos se omitan de la lista.

Si diseñas una experiencia del usuario personalizada que verifique los permisos del usuario, no existe una solución sencilla. Si un usuario no tiene permisos a nivel de organización, necesitará determinados permisos en cada recurso para que este aparezca. Si a un usuario le faltan permisos en un recurso en alguna parte 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 en particular, ese recurso no estará visible en absoluto en la consola de Google Cloud. Sin embargo, el recurso aparecerá en una búsqueda con la API o Google Cloud CLI que especifique el elemento superior del recurso. Esta diferencia entre Google Cloud Console y otros métodos es una fuente común de confusión cuando se intenta analizar la jerarquía del recurso.

En los diagramas siguientes, se muestran algunas configuraciones comunes de permisos y cómo estos cambian los recursos visibles para un usuario que ejecuta una búsqueda.

Enumera todos los recursos

En este ejemplo, se otorgan todos los permisos necesarios en el recurso de la organización. Por lo tanto, toda la jerarquía está visible cuando se crea una lista o se realiza una búsqueda.

Falta de permisos de la organización

El usuario de este ejemplo tiene todos los permisos requeridos, excepto resourcemanager.organizations.get, pero se le otorgan los permisos en el nivel de carpetas. Este intervalo de permisos le da visibilidad completa en la lista o búsqueda de esa parte de la jerarquía, pero no en la otra mitad.

El proyecto obtiene solo el permiso

En este ejemplo, se muestra la experiencia de un usuario con solo el permiso resourcemanager.projects.get otorgado en el nivel de recurso de la carpeta. Este puede ver los proyectos debajo de esa carpeta en la jerarquía, pero solo mediante la búsqueda. Si usas la funcionalidad de la lista, no se mostrará ningún resultado.

La carpeta obtiene solo el permiso

En este ejemplo, se muestra el mismo problema que antes, en el que los permisos otorgados solo permiten al usuario buscar sus recursos de carpetas mediante la búsqueda. Si usas la funcionalidad de la lista, no se mostrará ningún resultado.

Permisos combinados

En este ejemplo, el usuario tiene una combinación de permisos en toda su organización. Puede mostrar listas de carpetas del nivel de la organización, lo que le permite buscarlas a través de búsquedas que especifiquen el recurso superior en toda la jerarquía. Puede enumerar los recursos del proyecto de una carpeta, pero no de otra, y tienen el permiso resourcemanager.projects.get en un proyecto en la parte inferior de la jerarquía.

El resultado es que no puede mostrar los proyectos en el lado izquierdo de esta jerarquía de recursos. Puede enumerar los proyectos en el lado derecho solo mediante una búsqueda que especifique el recurso superior, y solo un proyecto está visible cuando se visualiza en la consola de Google Cloud.

Recursos que no se pueden encontrar

En este ejemplo, el usuario puede obtener el recurso de la organización y enumerar los recursos del proyecto mediante la especificación del elemento superior en toda la jerarquía. Sin embargo, no tiene permisos para mostrar una lista ni buscar cualquiera de las carpetas intermedias. El usuario puede buscar los proyectos si conoce el ID de su carpeta principal. Las carpetas no están visibles en absoluto para este usuario, por lo que no podrán saber el ID si aún no lo tienen. El único recurso que aparecerá en la consola de Google Cloud es la organización.

Cuando diseñas tu experiencia del usuario personalizada, es importante que conozcas situaciones similares a las anteriores. Puedes usar una combinación de listas y búsquedas para procesar la jerarquía de recursos. También debes tener en cuenta cómo notificarles a los usuarios que les faltan permisos para ver toda la jerarquía de recursos.