GCP - Basic Information

Supporta HackTricks

Gerarchia delle risorse

Google Cloud utilizza una Gerarchia delle risorse che è simile, concettualmente, a quella di un filesystem tradizionale. Questo fornisce un flusso di lavoro logico genitore/figlio con punti di attacco specifici per politiche e permessi.

A un livello alto, appare così:

Organization
--> Folders
--> Projects
--> Resources

Una macchina virtuale (chiamata Compute Instance) è una risorsa. Una risorsa risiede in un progetto, probabilmente insieme ad altre Compute Instances, storage buckets, ecc.

Migrazione dei Progetti

È possibile migrare un progetto senza alcuna organizzazione a un'organizzazione con i permessi roles/resourcemanager.projectCreator e roles/resourcemanager.projectMover. Se il progetto è all'interno di un'altra organizzazione, è necessario contattare il supporto GCP per spostarlo fuori dall'organizzazione prima. Per maggiori informazioni consulta questo.

Politiche dell'Organizzazione

Permettono di centralizzare il controllo sulle risorse cloud della tua organizzazione:

  • Centralizzare il controllo per configurare restrizioni su come possono essere utilizzate le risorse della tua organizzazione.

  • Definire e stabilire guardrails per i tuoi team di sviluppo per rimanere entro i limiti di conformità.

  • Aiutare i proprietari dei progetti e i loro team a muoversi rapidamente senza preoccuparsi di violare la conformità.

Queste politiche possono essere create per influenzare l'intera organizzazione, cartella(e) o progetto(i). I discendenti del nodo della gerarchia delle risorse mirato ereditano la politica dell'organizzazione.

Per definire una politica dell'organizzazione, scegli un vincolo, che è un particolare tipo di restrizione contro un servizio Google Cloud o un gruppo di servizi Google Cloud. Configura quel vincolo con le restrizioni desiderate.

Casi d'uso comuni

  • Limitare la condivisione delle risorse in base al dominio.

  • Limitare l'uso degli account di servizio Identity and Access Management.

  • Limitare la posizione fisica delle risorse appena create.

  • Disabilitare la creazione di account di servizio

Ci sono molti altri vincoli che ti danno un controllo granulare delle risorse della tua organizzazione. Per maggiori informazioni, consulta l' elenco di tutti i vincoli del servizio di politica dell'organizzazione.

Politiche dell'Organizzazione Predefinite

Queste sono le politiche che Google aggiungerà per impostazione predefinita quando configuri la tua organizzazione GCP:

Politiche di Gestione degli Accessi

  • Contatti limitati al dominio: Impedisce di aggiungere utenti ai Contatti Essenziali al di fuori dei domini specificati. Questo limita i Contatti Essenziali a consentire solo identità utente gestite nei domini selezionati per ricevere notifiche della piattaforma.

  • Condivisione limitata al dominio: Impedisce di aggiungere utenti alle politiche IAM al di fuori dei domini specificati. Questo limita le politiche IAM a consentire solo identità utente gestite nei domini selezionati per accedere alle risorse all'interno di questa organizzazione.

  • Prevenzione dell'accesso pubblico: Impedisce che i bucket di Cloud Storage siano esposti al pubblico. Questo assicura che uno sviluppatore non possa configurare i bucket di Cloud Storage per avere accesso internet non autenticato.

  • Accesso uniforme a livello di bucket: Impedisce le liste di controllo degli accessi (ACL) a livello di oggetto nei bucket di Cloud Storage. Questo semplifica la gestione degli accessi applicando le politiche IAM in modo coerente su tutti gli oggetti nei bucket di Cloud Storage.

  • Richiedi login OS: Le VM create in nuovi progetti avranno il login OS abilitato. Questo ti permette di gestire l'accesso SSH alle tue istanze utilizzando IAM senza dover creare e gestire chiavi SSH individuali.

Politiche di sicurezza aggiuntive per gli account di servizio

  • Disabilita concessioni IAM automatiche: Impedisce che gli account di servizio predefiniti di App Engine e Compute Engine ricevano automaticamente il ruolo IAM Editor su un progetto alla creazione. Questo assicura che gli account di servizio non ricevano ruoli IAM eccessivamente permissivi alla creazione.

  • Disabilita la creazione di chiavi per account di servizio: Impedisce la creazione di chiavi pubbliche per account di servizio. Questo aiuta a ridurre il rischio di esporre credenziali persistenti.

  • Disabilita il caricamento di chiavi per account di servizio: Impedisce il caricamento di chiavi pubbliche per account di servizio. Questo aiuta a ridurre il rischio di perdita o riutilizzo del materiale delle chiavi.

Politiche di configurazione della rete VPC sicura

  • Definisci IP esterni consentiti per le istanze VM: Impedisce la creazione di istanze Compute con un IP pubblico, che può esporle al traffico internet.

  • Disabilita la virtualizzazione nidificata delle VM: Impedisce la creazione di VM nidificate su VM Compute Engine. Questo riduce il rischio di sicurezza di avere VM nidificate non monitorate.

  • Disabilita la porta seriale delle VM: Impedisce l'accesso alla porta seriale delle VM Compute Engine. Questo impedisce l'input alla porta seriale di un server utilizzando l'API Compute Engine.

  • Limita le reti autorizzate sulle istanze Cloud SQL: Impedisce che intervalli di rete pubblici o non interni accedano ai tuoi database Cloud SQL.

  • Limita l'inoltro del protocollo in base al tipo di indirizzo IP: Impedisce l'inoltro del protocollo VM per indirizzi IP esterni.

  • Limita l'accesso IP pubblico sulle istanze Cloud SQL: Impedisce la creazione di istanze Cloud SQL con un IP pubblico, che può esporle al traffico internet.

  • Limita la rimozione del vincolo del progetto VPC condiviso: Impedisce la cancellazione accidentale dei progetti host VPC condivisi.

  • Imposta l'impostazione DNS interna per i nuovi progetti su DNS Zonale Solo: Impedisce l'uso di un'impostazione DNS legacy che ha una disponibilità di servizio ridotta.

  • Salta la creazione della rete predefinita: Impedisce la creazione automatica della rete VPC predefinita e delle risorse correlate. Questo evita regole firewall predefinite eccessivamente permissive.

  • Disabilita l'uso di IPv6 esterno nella VPC: Impedisce la creazione di subnet IPv6 esterne, che possono essere esposte ad accessi internet non autorizzati.

Ruoli IAM

Questi sono come le politiche IAM in AWS poiché ogni ruolo contiene un insieme di permessi.

Tuttavia, a differenza di AWS, non esiste un repository centralizzato di ruoli. Invece, le risorse danno ruoli di accesso X ai principali Y, e l'unico modo per scoprire chi ha accesso a una risorsa è utilizzare il metodo get-iam-policy su quella risorsa. Questo potrebbe essere un problema perché significa che l'unico modo per scoprire quali permessi ha un principale è chiedere a ogni risorsa a chi sta dando permessi, e un utente potrebbe non avere i permessi per ottenere permessi da tutte le risorse.

Ci sono tre tipi di ruoli in IAM:

  • Ruoli di base/primari, che includono i ruoli di Proprietario, Editor e Visualizzatore che esistevano prima dell'introduzione di IAM.

  • Ruoli predefiniti, che forniscono accesso granulare per un servizio specifico e sono gestiti da Google Cloud. Ci sono molti ruoli predefiniti, puoi vederli tutti con i privilegi che hanno qui.

  • Ruoli personalizzati, che forniscono accesso granulare secondo un elenco di permessi specificato dall'utente.

Ci sono migliaia di permessi in GCP. Per verificare se un ruolo ha un permesso puoi cercare il permesso qui e vedere quali ruoli lo hanno.

Puoi anche cercare qui i ruoli predefiniti offerti da ciascun prodotto. Nota che alcuni ruoli non possono essere assegnati agli utenti e solo agli SAs a causa di alcuni permessi che contengono. Inoltre, nota che i permessi avranno effetto solo se sono assegnati al servizio rilevante.

Oppure verifica se un ruolo personalizzato può utilizzare un permesso specifico qui.

GCP - IAM, Principals & Org Policies Enum

Utenti

Nella console GCP non c'è alcuna gestione di Utenti o Gruppi, questo viene fatto in Google Workspace. Sebbene tu possa sincronizzare un diverso provider di identità in Google Workspace.

Puoi accedere agli utenti e ai gruppi di Workspaces in https://admin.google.com.

MFA può essere forzata agli utenti di Workspaces, tuttavia, un attaccante potrebbe utilizzare un token per accedere a GCP via cli che non sarà protetto da MFA (sarà protetto da MFA solo quando l'utente effettua il login per generarlo: gcloud auth login).

Gruppi

Quando viene creata un'organizzazione, è fortemente consigliato creare diversi gruppi. Se gestisci uno di essi potresti aver compromesso tutta o una parte importante dell'organizzazione:

Gruppo

Funzione

gcp-organization-admins (gruppo o account individuali richiesti per la checklist)

Amministrare qualsiasi risorsa che appartiene all'organizzazione. Assegna questo ruolo con parsimonia; gli amministratori dell'organizzazione hanno accesso a tutte le risorse di Google Cloud. In alternativa, poiché questa funzione è altamente privilegiata, considera l'uso di account individuali invece di creare un gruppo.

gcp-network-admins (richiesto per la checklist)

Creare reti, subnet, regole firewall e dispositivi di rete come Cloud Router, Cloud VPN e bilanciatori di carico cloud.

gcp-billing-admins (richiesto per la checklist)

Configurare account di fatturazione e monitorare il loro utilizzo.

gcp-developers (richiesto per la checklist)

Progettare, codificare e testare applicazioni.

gcp-security-admins

Stabilire e gestire politiche di sicurezza per l'intera organizzazione, inclusa la gestione degli accessi e le politiche di vincolo dell'organizzazione. Consulta la guida alle fondamenta della sicurezza di Google Cloud per maggiori informazioni sulla pianificazione della tua infrastruttura di sicurezza Google Cloud.

gcp-devops

Creare o gestire pipeline end-to-end che supportano l'integrazione continua e la consegna, il monitoraggio e la fornitura di sistemi.

gcp-logging-admins

gcp-logging-viewers

gcp-monitor-admins

gcp-billing-viewer (non più per impostazione predefinita)

Monitorare la spesa sui progetti. I membri tipici fanno parte del team finanziario.

gcp-platform-viewer (non più per impostazione predefinita)

Rivedere le informazioni sulle risorse in tutta l'organizzazione Google Cloud.

gcp-security-reviewer (non più per impostazione predefinita)

Rivedere la sicurezza del cloud.

gcp-network-viewer (non più per impostazione predefinita)

Rivedere le configurazioni di rete.

grp-gcp-audit-viewer (non più per impostazione predefinita)

Visualizzare i log di audit.

gcp-scc-admin (non più per impostazione predefinita)

Amministrare il Security Command Center.

gcp-secrets-admin (non più per impostazione predefinita)

Gestire i segreti in Secret Manager.

Politica delle Password Predefinita

  • Imporre password forti

  • Tra 8 e 100 caratteri

  • Nessun riutilizzo

  • Nessuna scadenza

  • Se le persone accedono a Workspace tramite un provider di terze parti, questi requisiti non si applicano.

Account di servizio

Questi sono i principali che le risorse possono avere allegati e accedere per interagire facilmente con GCP. Ad esempio, è possibile accedere al token di autenticazione di un Account di Servizio allegato a una VM nei metadati. È possibile incontrare alcuni conflitti quando si utilizzano sia IAM che ambiti di accesso. Ad esempio, il tuo account di servizio potrebbe avere il ruolo IAM di compute.instanceAdmin ma l'istanza che hai violato è stata limitata con la limitazione dell'ambito di https://www.googleapis.com/auth/compute.readonly. Questo ti impedirebbe di apportare modifiche utilizzando il token OAuth assegnato automaticamente alla tua istanza.

È simile ai ruoli IAM di AWS. Ma a differenza di AWS, qualsiasi account di servizio può essere allegato a qualsiasi servizio (non è necessario consentirlo tramite una politica).

Molti degli account di servizio che troverai sono in realtà generati automaticamente da GCP quando inizi a utilizzare un servizio, come:

PROJECT_NUMBER-compute@developer.gserviceaccount.com
PROJECT_ID@appspot.gserviceaccount.com

Tuttavia, è anche possibile creare e collegare alle risorse custom service accounts, che appariranno così:

SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com

Access scopes

Gli access scope sono allegati ai token OAuth generati per accedere agli endpoint API di GCP. Limitano i permessi del token OAuth. Ciò significa che se un token appartiene a un Proprietario di una risorsa ma non ha nel token scope l'accesso a quella risorsa, il token non può essere utilizzato per (ab)usare quei privilegi.

Google in realtà raccomanda che gli access scope non siano utilizzati e di fare affidamento totalmente su IAM. Il portale di gestione web in realtà impone questo, ma gli access scope possono ancora essere applicati alle istanze utilizzando account di servizio personalizzati programmaticamente.

Puoi vedere quali scope sono assegnati interrogando:

curl 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=<access_token>'

{
"issued_to": "223044615559.apps.googleusercontent.com",
"audience": "223044615559.apps.googleusercontent.com",
"user_id": "139746512919298469201",
"scope": "openid https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/appengine.admin https://www.googleapis.com/auth/sqlservice.login https://www.googleapis.com/auth/compute https://www.googleapis.com/auth/accounts.reauth",
"expires_in": 2253,
"email": "username@testing.com",
"verified_email": true,
"access_type": "offline"
}

I precedenti scopes sono quelli generati di default usando gcloud per accedere ai dati. Questo perché quando usi gcloud crei prima un token OAuth e poi lo usi per contattare gli endpoint.

Lo scope più importante tra questi potenzialmente è cloud-platform, che fondamentalmente significa che è possibile accedere a qualsiasi servizio in GCP.

Puoi trovare un elenco di tutti i possibili scopes qui.

Se hai le credenziali del browser gcloud, è possibile ottenere un token con altri scopes, facendo qualcosa del genere:

# Maybe you can get a user token with other scopes changing the scopes array from ~/.config/gcloud/credentials.db

# Set new scopes for SDKs credentials
gcloud auth application-default login --scopes=https://www.googleapis.com/auth/userinfo.email,https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/sqlservice.login,https://www.googleapis.com/auth/appengine.admin,https://www.googleapis.com/auth/compute,https://www.googleapis.com/auth/accounts.reauth,https://www.googleapis.com/auth/admin.directory.user,https://www.googleapis.com/auth/admin.directory.group,https://www.googleapis.com/auth/admin.directory.domain,https://www.googleapis.com/auth/admin.directory.user

# Print new token
gcloud auth application-default print-access-token

# To use this token with some API you might need to use curl to indicate the project header with --header "X-Goog-User-Project: <project-name>"

Terraform IAM Policies, Bindings and Memberships

Come definito da terraform in https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_project_iam utilizzando terraform con GCP ci sono diversi modi per concedere a un principal l'accesso a una risorsa:

  • Memberships: Si impostano principals come membri di ruoli senza restrizioni sul ruolo o sui principals. È possibile mettere un utente come membro di un ruolo e poi mettere un gruppo come membro dello stesso ruolo e anche impostare quei principals (utente e gruppo) come membri di altri ruoli.

  • Bindings: Diversi principals possono essere associati a un ruolo. Quei principals possono ancora essere associati o essere membri di altri ruoli. Tuttavia, se un principal che non è associato al ruolo è impostato come membro di un ruolo associato, la prossima volta che l'associazione viene applicata, l'appartenenza scomparirà.

  • Policies: Una policy è autoritativa, indica ruoli e principals e quindi, quei principals non possono avere più ruoli e quei ruoli non possono avere più principals a meno che quella policy non venga modificata (nemmeno in altre policies, bindings o memberships). Pertanto, quando un ruolo o un principal è specificato in una policy tutti i suoi privilegi sono limitati da quella policy. Ovviamente, questo può essere bypassato nel caso in cui al principal venga data l'opzione di modificare la policy o i permessi di escalation dei privilegi (come creare un nuovo principal e associargli un nuovo ruolo).

Riferimenti

Supporta HackTricks

Last updated