Controlli preventivi per configurazioni di risorse accettabili

Last reviewed 2023-12-20 UTC

Ti consigliamo di definire vincoli dei criteri che applichino configurazioni accettabili delle risorse e prevengano configurazioni rischiose. Il progetto utilizza una combinazione di vincoli dei criteri dell'organizzazione e convalida Infrastructure as Code (IaC) nella tua pipeline. Questi controlli impediscono la creazione di risorse non conformi alle tue linee guida sui criteri. L'applicazione di questi controlli nelle fasi iniziali di progettazione e creazione dei carichi di lavoro consente di evitare le operazioni di correzione in un secondo momento.

Vincoli dei criteri dell'organizzazione

Il servizio Criteri dell'organizzazione applica vincoli per garantire che alcune configurazioni di risorse non possano essere create nella tua organizzazione Google Cloud, neanche da qualcuno che dispone di un ruolo IAM con privilegi sufficienti.

Il progetto applica i criteri sul nodo organizzazione in modo che questi controlli vengano ereditati da tutte le cartelle e da tutti i progetti all'interno dell'organizzazione. Questo pacchetto di criteri è progettato per prevenire determinate configurazioni ad alto rischio, come l'esposizione di una VM sulla rete internet pubblica o la concessione dell'accesso pubblico ai bucket di archiviazione, a meno che tu non consenta deliberatamente un'eccezione al criterio.

La seguente tabella introduce i vincoli dei criteri dell'organizzazione implementati nel progetto:

Vincolo dei criteri dell'organizzazione Descrizione

compute.disableNestedVirtualization

La virtualizzazione nidificata sulle VM di Compute Engine può eludere il monitoraggio e altri strumenti di sicurezza per le tue VM se sono configurate in modo errato. Questo vincolo impedisce la creazione di una virtualizzazione nidificata.

compute.disableSerialPortAccess

I ruoli IAM come compute.instanceAdmin consentono l'accesso privilegiato alla porta seriale di un'istanza utilizzando le chiavi SSH. Se la chiave SSH viene esposta, un utente malintenzionato potrebbe accedere alla porta seriale e aggirare i controlli di rete e firewall. Questo vincolo impedisce l'accesso alla porta seriale.

compute.disableVpcExternalIpv6

Le subnet IPv6 esterne possono essere esposte ad accessi a internet non autorizzati se sono configurate in modo errato. Questo vincolo impedisce la creazione di subnet IPv6 esterne.

compute.requireOsLogin

Il comportamento predefinito dell'impostazione delle chiavi SSH nei metadati può consentire l'accesso remoto non autorizzato alle VM se le chiavi sono esposte. Questo vincolo impone l'utilizzo di OS Login anziché di chiavi SSH basate su metadati.

compute.restrictProtocolForwardingCreationForTypes

L'inoltro del protocollo delle VM per gli indirizzi IP esterni può causare traffico in uscita da Internet non autorizzato se l'inoltro è configurato in modo errato. Questo vincolo consente l'inoltro del protocollo VM solo per gli indirizzi interni.

compute.restrictXpnProjectLienRemoval

L'eliminazione di un progetto host VPC condiviso può essere un'interruzione per tutti i progetti di servizio che utilizzano risorse di networking. Questo vincolo impedisce l'eliminazione accidentale o dannosa dei progetti host del VPC condiviso, impedendo la rimozione del blocco del progetto su questi progetti.

compute.setNewProjectDefaultToZonalDNSOnly

Non è consigliabile utilizzare un'impostazione legacy per il DNS interno globale (a livello di progetto) perché riduce la disponibilità del servizio. Questo vincolo impedisce l'utilizzo dell'impostazione legacy.

compute.skipDefaultNetworkCreation

In ogni nuovo progetto che abilita l'API Compute Engine vengono create una rete VPC predefinita e regole firewall VPC predefinite eccessivamente permissive. Questo vincolo ignora la creazione della rete predefinita e delle regole firewall VPC predefinite.

compute.vmExternalIpAccess

Per impostazione predefinita, viene creata una VM con un indirizzo IPv4 esterno che può causare un accesso a internet non autorizzato. Questo vincolo configura una lista consentita vuota di indirizzi IP esterni che la VM può utilizzare e nega tutti gli altri.

essentialcontacts.allowedContactDomains

Per impostazione predefinita, i contatti necessari possono essere configurati in modo da inviare notifiche sul tuo dominio a qualsiasi altro dominio. Questo vincolo impone che solo gli indirizzi email nei domini approvati possono essere impostati come destinatari per i contatti necessari.

iam.allowedPolicyMemberDomains

Per impostazione predefinita, i criteri di autorizzazione possono essere concessi a qualsiasi Account Google, inclusi gli account non gestiti e gli account appartenenti a organizzazioni esterne. Questo vincolo garantisce che i criteri di autorizzazione nella tua organizzazione possano essere concessi solo agli account gestiti del tuo dominio. Facoltativamente, puoi consentire domini aggiuntivi.

iam.automaticIamGrantsForDefaultServiceAccounts

Per impostazione predefinita, agli account di servizio predefiniti vengono concessi automaticamente i ruoli eccessivamente permissivi. Questo vincolo impedisce la concessione automatica dei ruoli IAM agli account di servizio predefiniti.

iam.disableServiceAccountKeyCreation

Le chiavi degli account di servizio sono credenziali permanenti ad alto rischio e nella maggior parte dei casi è possibile utilizzare un'alternativa più sicura alle chiavi degli account di servizio. Questo vincolo impedisce la creazione di chiavi degli account di servizio.

iam.disableServiceAccountKeyUpload

Il caricamento del materiale della chiave dell'account di servizio può aumentare il rischio se il materiale della chiave è esposto. Questo vincolo impedisce il caricamento delle chiavi degli account di servizio.

sql.restrictAuthorizedNetworks

Le istanze Cloud SQL possono essere esposte ad accesso a internet non autenticato se sono configurate in modo da utilizzare reti autorizzate senza un proxy di autenticazione Cloud SQL. Questo criterio impedisce la configurazione delle reti autorizzate per l'accesso al database e forza l'utilizzo del proxy di autenticazione Cloud SQL.

sql.restrictPublicIp

Le istanze Cloud SQL possono essere esposte all'accesso a internet non autenticato se vengono create con indirizzi IP pubblici. Questo vincolo impedisce gli indirizzi IP pubblici nelle istanze Cloud SQL.

storage.uniformBucketLevelAccess

Per impostazione predefinita, è possibile accedere agli oggetti in Cloud Storage tramite gli elenchi di controllo degli accessi (ACL) legacy anziché tramite IAM, il che può causare controlli dell'accesso incoerenti ed esposizione accidentale in caso di configurazione errata. Il vincolo iam.allowedPolicyMemberDomains non influisce sull'accesso ACL legacy. Questo vincolo impone che l'accesso può essere configurato solo tramite l'accesso uniforme a livello di bucket IAM, non tramite ACL legacy.

storage.publicAccessPrevention

I bucket Cloud Storage possono essere esposti ad accesso a internet non autenticato se configurati in modo errato. Questo vincolo impedisce gli ACL e le autorizzazioni IAM che concedono l'accesso a allUsers e allAuthenticatedUsers.

Questi criteri sono un punto di partenza consigliato per la maggior parte dei clienti e per la maggior parte degli scenari, ma potrebbe essere necessario modificare i vincoli dei criteri dell'organizzazione per soddisfare determinati tipi di carichi di lavoro. Ad esempio, un carico di lavoro che utilizza un bucket Cloud Storage come backend per consentire a Cloud CDN di ospitare le risorse pubbliche viene bloccato da storage.publicAccessPrevention oppure un'app Cloud Run rivolta al pubblico che non richiede l'autenticazione viene bloccata da iam.allowedPolicyMemberDomains. In questi casi, modifica il criterio dell'organizzazione a livello di cartella o di progetto per consentire un'eccezione limitata. Puoi anche aggiungere vincoli ai criteri dell'organizzazione in modo condizionale definendo un tag che conceda un'eccezione o applicazione dei criteri e quindi applicando il tag a progetti e cartelle.

Per ulteriori informazioni sui vincoli, consulta i vincoli disponibili e i vincoli personalizzati.

Convalida pre-deployment di Infrastructure as Code

Il progetto utilizza un approccio GitOps per gestire l'infrastruttura, il che significa che tutte le modifiche all'infrastruttura vengono implementate tramite Infrastructure as Code (IaC) con controllo della versione e possono essere convalidate prima del deployment.

I criteri applicati nel progetto base definiscono configurazioni di risorse accettabili di cui la tua pipeline può eseguire il deployment. Se il codice inviato al tuo repository GitHub non supera i controlli dei criteri, non viene eseguito il deployment delle risorse.

Per informazioni su come vengono utilizzate le pipeline e su come vengono applicati i controlli tramite l'automazione CI/CD, consulta la metodologia di deployment.

Passaggi successivi