Progettare i livelli di accesso

Questo documento descrive le implementazioni a livello di accesso e fornisce consigli per avviare l'applicazione del perimetro di servizio in base alle liste consentite.

Quando completi un'esecuzione di prova dei carichi di lavoro, identifichi un elenco di indirizzi IP e identità da aggiungere a una lista consentita. Potresti anche scoprire che alcuni carichi di lavoro richiedono una lista consentita basata sul dispositivo. Per concedere accesso controllato alle risorse Google Cloud protette, puoi utilizzare i livelli di accesso di Controlli di servizio VPC. Alcuni modi pratici per implementare i livelli di accesso si basano su indirizzo IP, identità o dispositivo.

Per ulteriori informazioni, vedi Accesso sensibile al contesto con regole per il traffico in entrata.

Concedere l'accesso in base all'IP di origine

Puoi utilizzare solo intervalli CIDR IP pubblici nei livelli di accesso per le liste consentite basate su IP. Poiché questo metodo consente tutte le API protette da questo intervallo IP, l'ambiente dietro questi IP deve essere attendibile e controllato. Uno scenario di utilizzo tipico per questa lista consentita è consentire l'accesso al perimetro dalle reti on-premise. Il seguente diagramma mostra come una lista consentita basata su IP blocca e consente l'accesso al perimetro:

Il perimetro della rete e del servizio di VPC Service Controls impedisce l'accesso da un'identità valida su una rete non attendibile.

Nel diagramma precedente, un'identità valida tenta di accedere al perimetro. I tentativi di accesso vengono rifiutati se provengono da qualsiasi indirizzo IP internet. Tuttavia, l'accesso è consentito se proviene dagli indirizzi IP pubblici aziendali.

Una variante di questo scenario si verifica quando consenti l'accesso al perimetro da risorse private di cui è stato eseguito il deployment in un progetto o un'organizzazione diversa. In questo caso, è necessario un gateway Cloud NAT nel progetto di origine. Cloud NAT ha un'integrazione con l'accesso privato Google che abilita automaticamente l'accesso privato Google sulla subnet della risorsa e mantiene interno il traffico verso le API e i servizi Google, anziché indirizzarlo a internet utilizzando l'indirizzo IP esterno del gateway Cloud NAT. Poiché il traffico viene indirizzato all'interno della rete interna di Google, il campo RequestMetadata.caller_ip dell'oggetto AuditLog viene oscurato in gce-internal-ip. In questo caso, per consentire l'accesso al perimetro, devi configurare una regola di ingresso per consentire l'accesso in base ad altri attributi, come il progetto o l'account di servizio, anziché configurare un livello di accesso in base all'indirizzo IP dell'origine esterna.

Concessione dell'accesso in base all'identità del chiamante

Per implementare una lista consentita basata sulle identità, aggiungi account di servizio e super amministratori dell'organizzazione a una lista consentita. Il perimetro è aperto per queste identità da qualsiasi indirizzo IP, quindi devi assicurarti che siano ben protette. Inoltre, devi assicurarti di evitare di coniare chiavi per gli account di servizio che hai aggiunto a una lista consentita. Non è comune aggiungere le identità utente a una lista consentita (i gruppi non possono essere aggiunti a una lista consentita) in un perimetro.

È possibile accedere alle risorse all'interno del perimetro tramite VM all'interno del perimetro, reti on-premise attendibili o dispositivi attendibili. Ti consigliamo di utilizzare Cloud Workstations per accedere alle risorse all'interno dei perimetri perché i Controlli di servizio VPC non supportano Cloud Shell.

Accesso idoneo in base agli attributi del dispositivo dell'utente che chiama

La attendibilità del dispositivo, chiamata anche endpoint attendibile, si basa sull'accesso di un utente valido dell'organizzazione a un browser Chrome o a un Chromebook. La attendibilità si applica alla sessione di accesso al sistema operativo. Ad esempio, un utente Windows che ha eseguito l'accesso e ha avviato una sessione di Chrome (il browser non deve essere aperto) può chiamare correttamente i comandi gcloud CLI sulle API del perimetro protetto. Tuttavia, una sessione utente Windows diversa sulla stessa macchina non può chiamare i comandi sulle API del perimetro protetto.

Le seguenti condizioni del dispositivo sono utili per stabilire la fiducia del dispositivo:

  • ChromeOS verificato è una condizione altamente sicura e verificata tramite crittografia che indica che un utente valido dell'organizzazione ha eseguito l'accesso a un Chromebook avviato in modo sicuro. Questa è una condizione di attendibilità di primo livello consigliata.

    Il criterio del sistema operativo con l'opzione Chrome OS verificato attivata.

  • L'opzione Richiedi l'approvazione dell'amministratore per l'accesso al dispositivo consente agli amministratori di Cloud Identity di approvare ogni dispositivo prima che venga concesso l'accesso. Per impostazione predefinita, i dispositivi vengono approvati automaticamente se un utente valido dell'organizzazione ha eseguito l'accesso. Tuttavia, ti consigliamo di disattivare l'opzione di approvazione automatica.

  • L'opzione Richiedi un dispositivo di proprietà dell'azienda si basa sull'agente Chrome che recupera il numero di serie dal sistema operativo, che in genere proviene dal BIOS. Questo numero deve corrispondere ai numeri di serie esistenti che hai inserito in Cloud Identity.

    Poiché il numero di serie non è attendibile nei dispositivi non ChromeOS, un utente con privilegi amministrativi elevati potrebbe essere in grado di falsificarlo. Ti consigliamo di utilizzare questa condizione solo come controllo di Livello 2.

Per un tracker di esempio per la concessione dell'accesso controllato in base alle condizioni discusse nell'elenco precedente, consulta Modello di onboarding di VPC Service Controls: lista consentita (PDF).

Avviare l'applicazione

Dopo aver progettato la lista consentita e aggiornato i livelli di accesso, ti consigliamo di eseguire nuovamente i carichi di lavoro per verificare che non siano presenti violazioni. Se i carichi di lavoro vengono eseguiti senza violazioni, puoi avviare l'applicazione dei Controlli di servizio VPC senza influire sulle applicazioni.

Quando pianifichi l'applicazione, includi quanto segue:

  • Scegli una data di applicazione e comunicala a tutti i team correlati.
  • Assicurati che i team di operazioni di sicurezza e di risposta agli incidenti siano a conoscenza del deployment. Inoltre, assicurati che le persone con le autorizzazioni appropriate ispezionino i log e approvino liste consentite aggiuntive, se necessario.
  • Assicurati che il team di risposta alle situazioni possa aprire una richiesta di assistenza Google Cloud in caso di domande o problemi.
  • Crea o modifica i livelli di perimetro e accesso utilizzando strumenti di automazione come Terraform. Ti sconsigliamo di eseguire queste attività manualmente.

Quando avvii l'applicazione, inizia spostando i progetti associati a un singolo carico di lavoro dal perimetro in modalità di prova al perimetro di produzione. Assicurati di lasciare il tempo necessario per l'esecuzione corretta dell'applicazione mentre osservi i log delle violazioni. Ripeti la procedura per i carichi di lavoro rimanenti, uno alla volta.

Per visualizzare le violazioni bloccate, configura un sink di log aggregato che invii i log di controllo per tutti i progetti nel perimetro a BigQuery. Quindi, esegui la seguente query:

SELECT
receiveTimestamp, #time of violation
Resource.labels.service, #protected Google Cloud service being blocked
protopayload_auditlog.methodName, #method name being called
resource.labels.project_id as PROJECT, #protected project blocking the call
protopayload_auditlog.authenticationInfo.principalEmail, #caller identity
protopayload_auditlog.requestMetadata.callerIp, #caller IP
JSON_EXTRACT(protopayload_auditlog.metadataJson, '$.dryRun') as DRYRUN, #dry-run indicator
JSON_EXTRACT(protopayload_auditlog.metadataJson, '$.violationReason') as REASON, #reason for violation
protopayload_auditlog.metadataJson, #raw violation entry
FROM `BQ_DATASOURCE_NAME.cloudaudit_googleapis_com_policy_*`
WHERE JSON_EXTRACT(protopayload_auditlog.metadataJson, '$.dryRun') is null #exclude logs from a dry-run perimeter

Passaggi successivi