Elenco di tutti i progetti e di tutte le cartelle nella gerarchia

Le risorse in Google Cloud sono organizzate in una gerarchia in cui ogni nodo (organizzazioni, cartelle, progetti e così via) ha un riferimento al nodo padre. Puoi utilizzare questo riferimento come termine di filtro della chiave per le analisi al fine di migliorare la coerenza delle ricerche delle risorse.

Puoi concedere le autorizzazioni agli utenti utilizzando i ruoli personalizzati. Questi ruoli si basano sul principio del privilegio minimo e in genere forniscono solo le autorizzazioni minime necessarie per eseguire una determinata attività.

Questo schema può essere utile per isolare diversi gruppi di utenti. Ad esempio:

  • Una grande azienda con reparti che non devono essere in grado di ispezionare le risorse dei colleghi.
  • Contrattisti a cui vengono concesse le autorizzazioni per un progetto specifico, ma non per altre risorse.

Tuttavia, a causa delle autorizzazioni limitate, i ruoli personalizzati possono causare l'omissione di molte risorse nella gerarchia durante l'esecuzione di un'operazione di elenco. Quando esegui ricerche come utente a cui è stato concesso un ruolo personalizzato, può essere difficile comprendere perché alcune risorse non vengono visualizzate.

Per evitare questo scenario, in questa pagina vengono descritte le best practice per elencare tutte le risorse gestite dall'API Cloud Resource Manager nella gerarchia delle risorse. Puoi utilizzare queste indicazioni per configurare controlli di controllo personalizzati o per creare la tua esperienza utente in base all'API Cloud Resource Manager.

Elenca tutti i nodi delle risorse

Quando analizzi la gerarchia delle risorse per elencare tutte le risorse, hai bisogno di risultati fortemente coerenti. Se la scansione non include risorse o fornisce risultati obsoleti, può essere difficile capire che si è verificato un problema. Per assicurarti di ottenere sempre i risultati più accurati e completi, utilizza un account di servizio ed esegui un'analisi nel seguente modo:

  1. Concedi a un account di servizio le autorizzazioni list e get per organizzazioni, cartelle e progetti nella risorsa organizzazione.
  2. Se stai elencando le risorse di progetto e cartella, specifica la risorsa padre nella stringa del filtro.
  3. Esegui il metodo projects.list() con questo account di servizio per ogni tipo di risorsa che vuoi trovare e per eventuali risorse intermedie come le cartelle.

Esempio di elenco di tutti i nodi delle risorse

Il seguente pseudocodice mostra come elencare tutti i nodi di risorse nelle tue organizzazioni:

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))
}

Quando crei un'esperienza utente personalizzata, ti consigliamo anche di combinare i risultati di ricerca e di caricare le risorse padre in base alle esigenze (rilevando anche l'eccezione PERMISSION_DENIED).

Riduci la latenza nell'elenco di progetti gcloud

Se la query gcloud projects list non riesce o richiede troppo tempo, il numero di progetti Google Cloud da restituire potrebbe essere troppo elevato. Per risolvere il problema, applica i flag filter e page-size al comando gcloud projects list.

Per saperne di più sui flag che puoi aggiungere al comando gcloud projects list, consulta gcloud projects list.

Esempio di esclusione di progetti Apps Script

La causa più comune di errori o latenza delle query è un elevato numero di progetti Apps Script all'interno di un'organizzazione. Il comando seguente mostra come escludere i progetti Apps Script dall'elenco dei progetti e limitare il numero di risorse restituite per pagina.

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

Recuperare l'ID cartella di Apps Script

Per trovare l'ID della cartella di Apps Script, procedi nel seguente modo.

  1. Nella barra degli strumenti della console Google Cloud, fai clic su Cerca risorse, documenti, prodotti e altro ancora e digita apps-script.

    Vai alla console Google Cloud

  2. In Risorse, seleziona la cartella apps-script.

  3. In ID cartella, copia l'ID cartella.

Cerca nelle risorse

Se l'analisi ha lo scopo di cercare una risorsa creata un po' di tempo fa, puoi eseguire una scansione più rapida a coerenza finale anziché a elevata coerenza. Tieni presente che questo metodo di ricerca potrebbe omettere alcune risorse dai risultati di ricerca, in particolare quelle che sono state modificate di recente. Per cercare le risorse:

  1. Utilizza un account di servizio con l'autorizzazione get per la risorsa che stai cercando.
  2. Esegui il metodo projects.search() con questo account di servizio.

Risoluzione dei problemi relativi alle risorse omesse

Se stai sviluppando uno strumento di scansione, ti consigliamo di utilizzare le autorizzazioni list e get concesse a livello di organizzazione. In questo modo si evitano i problemi causati dall'utente che dispone di autorizzazioni parziali, con conseguente omissione di alcune risorse dall'elenco.

Se stai progettando un'esperienza utente personalizzata che controlla le autorizzazioni degli utenti, non esiste una soluzione facile. Se un utente non dispone di autorizzazioni a livello di organizzazione, avrà bisogno di determinate autorizzazioni su ogni risorsa affinché venga visualizzata. Se un utente non dispone delle autorizzazioni per una risorsa in qualche punto della gerarchia, alcune risorse potrebbero non essere visualizzate.

Se un utente dispone dell'autorizzazione list, ma non dell'autorizzazione get per una determinata risorsa, questa non sarà affatto visibile nella console Google Cloud. Tuttavia, la risorsa verrà restituita in una ricerca utilizzando l'API o Google Cloud CLI che specifica l'elemento padre della risorsa. Questa disparità tra la console Google Cloud e gli altri metodi è una fonte di confusione comune quando si tenta di eseguire la scansione della gerarchia delle risorse.

I seguenti diagrammi mostrano alcune configurazioni comuni delle autorizzazioni e il modo in cui cambiano le risorse visibili a un utente che esegue una ricerca.

Elenco di tutte le risorse

In questo esempio, tutte le autorizzazioni richieste sono concesse nella risorsa Organizzazione. Di conseguenza, quando si esegue un elenco o una ricerca, è visibile l'intera gerarchia.

Autorizzazioni dell'organizzazione mancanti

L'utente in questo esempio dispone di tutte le autorizzazioni richieste tranne resourcemanager.organizations.get, ma vengono concesse a livello di cartella. Questa carenza di autorizzazioni offre loro piena visibilità nell'elenco o nella ricerca di quella parte della gerarchia, ma non dell'altra metà.

Progetto con autorizzazione

Questo esempio mostra l'esperienza di un utente con solo l'autorizzazione resourcemanager.projects.get concessa a livello di risorsa Cartella. Possono vedere i progetti al di sotto di quella cartella nella gerarchia, ma solo eseguendo una ricerca. La funzionalità di elenco non restituirà alcun risultato.

Richiesta di autorizzazione solo per la cartella

Questo esempio mostra lo stesso problema di cui sopra, in cui le autorizzazioni concesse consentono a un utente solo di trovare le risorse della cartella mediante la ricerca. L'uso della funzionalità elenco non restituirà alcun risultato.

Autorizzazioni miste

In questo esempio, l'utente dispone di una combinazione di autorizzazioni in tutta l'organizzazione. Possono elencare le cartelle a livello di organizzazione, il che consente loro di trovarle tramite ricerche che specificano la risorsa padre in tutta la gerarchia. Possono elencare le risorse di progetto per una cartella, ma non per l'altra e dispongono dell'autorizzazione resourcemanager.projects.get per un progetto in fondo alla gerarchia.

Il risultato è che non sono in grado di restituire i progetti sul lato sinistro di questa gerarchia delle risorse. Possono elencare i progetti sul lato destro solo mediante una ricerca che specifica la risorsa padre. Inoltre, è visibile un solo progetto quando viene visualizzato nella console Google Cloud.

Risorse non rilevabili

In questo esempio, l'utente può recuperare la risorsa Organizzazione ed elencare le risorse del progetto specificando l'elemento padre in tutta la gerarchia. Tuttavia, non hanno l'autorizzazione per elencare o cercare nelle cartelle intermedie. I loro progetti sono disponibili per la ricerca se l'utente conosce l'ID della relativa cartella principale. Le cartelle non sono visibili a questo utente, quindi non sarà in grado di individuare l'ID se non lo ha già. L'unica risorsa che verrà visualizzata nella console Google Cloud è Organizzazione.

Quando si progetta un'esperienza utente personalizzata, è importante conoscere situazioni simili a quelle illustrate sopra. Per visualizzare la gerarchia delle risorse, puoi usare una combinazione di elenchi e ricerche. Dovresti anche considerare come comunicare agli utenti che non dispongono di autorizzazioni, che gli consentirebbero di vedere l'intera gerarchia delle risorse.