Elenco di tutti i progetti e 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 relativo elemento principale. Puoi utilizzare questo riferimento come termine di filtro principale per le scansioni per migliorare la coerenza delle ricerche delle risorse.

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

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

  • Una grande azienda con reparti che non dovrebbero essere in grado di ispezionare le risorse dei loro colleghi.
  • Fornitori a cui sono state assegnate autorizzazioni per un progetto specifico, ma non per altre risorse.

Tuttavia, a causa delle loro 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 capire perché determinate risorse non vengono visualizzate.

Per evitare questo scenario, questa pagina illustra 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 conformità personalizzati o per creare la tua esperienza utente sull'API Cloud Resource Manager.

Elenca tutti i nodi delle risorse

Quando esegui la scansione della gerarchia delle risorse per elencare ogni risorsa, hai bisogno di risultati fortemente coerenti. Se la scansione non trova risorse o fornisce risultati obsoleti, puoi avere difficoltà a capire che qualcosa non va. Per assicurarti di ottenere sempre i risultati più accurati e completi, utilizza un account di servizio ed esegui una scansione 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 Progetto e Cartella, specifica la risorsa principale 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 per elencare tutti i nodi della risorsa

Il seguente pseudocodice mostra come elencare tutti i nodi delle 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 di combinare anche i risultati di ricerca e caricare le risorse principali in base alle esigenze (catturando anche l'eccezione PERMISSION_DENIED).

Ridurre la latenza nell'elenco dei progetti gcloud

Se la query gcloud projects list non va a buon fine 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 scoprire 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 nelle query è un numero elevato 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'

Ottenere l'ID cartella di Apps Script

Per trovare l'ID della cartella di Apps Script:

  1. Nella barra degli strumenti della console Google Cloud, fai clic su Cerca risorse, documenti, prodotti e altro 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 la scansione è finalizzata alla ricerca di una risorsa creata qualche tempo fa, puoi eseguire una scansione più rapida con coerenza finale anziché con elevata coerenza. Tieni presente che questo metodo di ricerca potrebbe omettere alcune risorse dal risultato di ricerca, in particolare quelle che sono state modificate di recente. Per cercare 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.

Risolvere i 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 la conseguente omissione di alcune risorse dall'elenco.

Se stai progettando un'esperienza utente personalizzata che controlla le autorizzazioni utente, non esiste una soluzione semplice. Se un utente non dispone di autorizzazioni a livello di organizzazione, dovrà disporre di determinate autorizzazioni su ogni risorsa affinché vengano visualizzate. Se a un utente mancano le autorizzazioni per una risorsa in un 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, quest'ultima non sarà visibile nella console Google Cloud. Tuttavia, la risorsa verrà restituita in una ricerca utilizzando l'API o Google Cloud CLI che specifica la risorsa principale. Questa disparità tra la console Google Cloud e altri metodi è una fonte comune di confusione quando si tenta di eseguire la scansione della gerarchia delle risorse.

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

Elenco di tutte le risorse

In questo esempio, tutte le autorizzazioni richieste vengono concesse nella risorsa Organization. Pertanto, l'intera gerarchia è visibile quando viene eseguito un elenco o una ricerca.

Autorizzazioni dell'organizzazione mancanti

L'utente in questo esempio dispone di tutte le autorizzazioni richieste, ad eccezione diresourcemanager.organizations.get, ma queste autorizzazioni gli sono concesse a livello di cartella. Questa lacuna nelle autorizzazioni offre una visibilità completa sull'elenco o sulla ricerca di quella parte della gerarchia, ma non sull'altra metà.

Solo autorizzazione di acquisizione del progetto

Questo esempio mostra l'esperienza di un utente a cui è stata concessa solo l'autorizzazione resourcemanager.projects.get a livello di risorsa Cartella. Possono vedere i progetti all'interno della cartella nella gerarchia, ma solo tramite ricerca. L'utilizzo della funzionalità di elenco non restituirà alcun risultato.

Solo autorizzazione di accesso alla cartella

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

Autorizzazioni miste

L'utente in questo esempio dispone di un insieme di autorizzazioni nell'intera organizzazione. Possono elencare le cartelle a livello di organizzazione, il che consente di trovarle con ricerche che specificano la risorsa principale in tutta la gerarchia. Possono elencare le risorse del progetto per una cartella, ma non per l'altra, e dispongono dell'autorizzazione resourcemanager.projects.get per un progetto nella parte inferiore della gerarchia.

Di conseguenza, non sono in grado di restituire i progetti sul lato sinistro di questa gerarchia delle risorse. Possono elencare i progetti sul lato destro solo utilizzando una ricerca che specifica la risorsa principale e solo un progetto è visibile quando viene visualizzato nella console Google Cloud.

Risorse non rilevabili

In questo esempio, l'utente può ottenere la risorsa Organizzazione ed elencare le risorse Progetto specificando la risorsa principale in tutta la gerarchia. Tuttavia, non hanno l'autorizzazione per elencare o cercare le cartelle intermedie. I suoi progetti sono disponibili per la ricerca se l'utente conosce l'ID della relativa cartella principale. Le cartelle non sono visibili a questo utente, che quindi non potrà scoprire l'ID se non lo ha già. L'unica risorsa che verrà visualizzata nella console Google Cloud è l'organizzazione.

Quando progetti la tua esperienza utente personalizzata, è importante essere consapevole di situazioni simili a quelle riportate sopra. Puoi utilizzare una combinazione di elenchi e ricerche per visualizzare la gerarchia delle risorse. Devi anche valutare come comunicare agli utenti che mancano le autorizzazioni che consentono loro di visualizzare l'intera gerarchia delle risorse.