Elenco di tutte le risorse nella gerarchia

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

Puoi concedere agli utenti le autorizzazioni utilizzando i 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 controllare le risorse dei colleghi.
  • I contrattisti a cui sono state 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 della 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 il motivo per cui 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 audit personalizzati o per creare la tua esperienza utente sull'API Cloud Resource Manager.

Elenco di tutte le risorse

Quando scansioni la gerarchia delle risorse per elencare ogni risorsa, hai bisogno di risultati fortemente coerenti. Se la scansione non presenta risorse o fornisce risultati obsoleti, può essere difficile capire che si è verificato un problema. Per assicurarti di ottenere sempre i risultati più precisi 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 risorse di progetti e cartelle, specifica la risorsa padre nella stringa di 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 tutte le risorse

Il seguente pseudocodice mostra come elencare ogni nodo di risorsa 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, puoi anche combinare i risultati di ricerca e caricare le risorse padre in base alle tue esigenze (trovando anche l'eccezione PERMISSION_DENIED).

Riduci la latenza nell'elenco dei 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 dei progetti Apps Script

La causa più comune degli errori delle query o della latenza è l'elevato numero di progetti Apps Script all'interno di un'organizzazione. L'esempio 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 cartella di Apps Script, segui questi passaggi.

  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 ha lo scopo di cercare una risorsa creata tempo fa, puoi eseguire un'analisi più rapida con coerenza finale anziché a elevata coerenza. Tieni presente che questo metodo di ricerca potrebbe omettere alcune risorse dal risultato di ricerca, in particolare eventuali risorse 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.

Risoluzione dei problemi relativi alle risorse omesse

Se stai sviluppando uno strumento di analisi, ti consigliamo di utilizzare le autorizzazioni list e get concesse a livello di organizzazione. Ciò consente di evitare problemi causati dall'utente con autorizzazioni parziali, il che comporta l'omissione di alcune risorse dall'elenco.

Se stai progettando un'esperienza utente personalizzata che controlli 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 ha le autorizzazioni per una risorsa in qualche punto della gerarchia, alcune risorse potrebbero non essere visualizzate.

Se un utente ha l'autorizzazione list ma non l'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 il padre della risorsa. Questa disparità tra la console Google Cloud e altri metodi è una fonte comune di confusione quando si cerca di analizzare la 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 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 le vengono concesse a livello di cartella. Questo divario di autorizzazioni offre una visibilità completa nell'elenco o nella ricerca di quella parte della gerarchia, ma non dell'altra metà.

Progetto ottenere solo l'autorizzazione

Questo esempio mostra l'esperienza di un utente con solo l'autorizzazione resourcemanager.projects.get concessa a livello di risorsa della cartella. Possono visualizzare i progetti sotto quella cartella nella gerarchia, ma solo tramite la ricerca. L'utilizzo della funzionalità elenco non restituirà alcun risultato.

La cartella ottiene solo l'autorizzazione

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 la ricerca. L'uso della funzionalità elenco non restituirà alcun risultato.

Autorizzazioni miste

L'utente in questo esempio dispone di una combinazione di autorizzazioni in tutta l'organizzazione. Possono elencare le cartelle a livello di organizzazione, il che consente di trovarle mediante 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 disporre dell'autorizzazione resourcemanager.projects.get su un progetto in fondo alla gerarchia.

Di conseguenza, non sarà in grado di restituire i progetti sul lato sinistro di questa gerarchia di risorse. Possono elencare i progetti a destra solo utilizzando una ricerca che specifichi la risorsa padre 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 di progetto specificando il padre in tutta la gerarchia. Tuttavia, non hanno l'autorizzazione per elencare o eseguire ricerche nelle cartelle intermedie. I loro progetti sono disponibili per la ricerca se l'utente conosce l'ID della sua cartella padre. Le cartelle non sono visibili affatto a questo utente, che non potrà quindi trovare l'ID se non lo possiede. L'unica risorsa visualizzata nella console Google Cloud è l'organizzazione.

Quando progetti l'esperienza utente personalizzata, è importante conoscere situazioni simili a quelle descritte sopra. Puoi usare una combinazione di elenchi e ricerca per il rendering della gerarchia delle risorse. Dovresti anche valutare come comunicare agli utenti che non dispongono delle autorizzazioni che gli consentirebbero di vedere l'intera gerarchia delle risorse.