Enumera todos los recursos en 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 a fin de enumerar todos los recursos que la API de Resource Manager administra en tu jerarquía de recursos. Puedes usar esta guía a fin de configurar verificaciones de auditorías personalizadas o para crear tu propia experiencia del usuario, además de la API de Resource Manager.

Enumera todos los 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.

Enumera todos los ejemplos de recursos

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

organizations = CloudResourceManager.Organizations.Search()
projects = emptyList()

parentsToList = queueOf(organizations)
while (parent = parentsToList.pop()) {
  // NOTE: Don't forget to iterate over paginated results.
  // TODO: handle PERMISSION_DENIED appropriately.
  projects.addAll(CloudResourceManager.Projects.List(
      "parent.type:" + parent.type + " parent.id:" + parent.id))
  parentsToList.addAll(CloudResourceManager.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).

Busca 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.list() 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 Google Cloud Console. Sin embargo, el recurso aparecerá en una búsqueda con la API o la herramienta de línea de comandos de gcloud que especifica 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 Cloud Console.

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 Cloud Console 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.