Questa pagina spiega come creare livelli di accesso utilizzando Gestore contesto accesso e applicarli alle risorse protette da Identity-Aware Proxy (IAP).
Panoramica
Un livello di accesso è un insieme di attributi assegnati alle richieste in base alla loro origine. Utilizzando informazioni come il tipo di dispositivo, l'indirizzo IP e l'identità utente, puoi indicare il livello di accesso da concedere. Ad esempio, potresti assegnare un livello "High_Trust" alle connessioni interne alla rete aziendale e un trust "Medium_Trust" a dispositivi esterni che eseguono sistemi operativi approvati.
I livelli di accesso raccolgono e fanno riferimento alle informazioni del dispositivo dopo che hai configurato la verifica degli endpoint. La verifica degli endpoint crea un inventario di tutti i dispositivi aziendali e personali che accedono alle risorse aziendali.
Un livello di accesso viene applicato in modo forzato aggiungendolo come condizione IAM (Identity and Access Management) sulla risorsa protetta da IAP. IAP consente di applicare un modello di controllo dell'accesso granulare a livello di risorsa anziché utilizzare firewall a livello di rete. Ad esempio, potresti specificare che sebbene molte risorse siano disponibili per "Medium_Trust", alcune risorse più sensibili richiedono il livello "High_Trust".
Per ulteriori informazioni, consulta la panoramica di Gestore contesto accesso.
Prima di iniziare
Prima di iniziare, segui questi passaggi:
- Proteggi una risorsa con IAP.
- Configura la verifica degli endpoint. Tieni presente che questa operazione è necessaria solo se vuoi limitare l'accesso alle tue risorse in base alle informazioni del dispositivo dell'utente, ad esempio lo stato della crittografia dello spazio di archiviazione.
Assicurati di aver ricevuto uno dei seguenti ruoli concesso per il tuo progetto.
- Amministratore Gestore contesto accesso
- Editor Gestore contesto accesso
Creazione di un livello di accesso
La seguente procedura crea un livello di accesso.
Per questo esempio, supponiamo di voler creare un livello di accesso che consenta a un gruppo di revisori interni di accedere a Google Cloud Observability per un progetto. A tutti
i dispositivi dei revisori sono assegnati IP su una subnet compresa tra
203.0.113.0
e 203.0.113.127
. Devi anche assicurarti
che i dispositivi siano criptati. Sai che non ci saranno dispositivi assegnati a quella subnet
oltre a quelli utilizzati dai revisori.
Console
Vai alla pagina Gestore contesto accesso nella console Google Cloud.
Se richiesto, seleziona la tua organizzazione.
Nella parte superiore della pagina Gestore contesto accesso, fai clic su Nuovo.
Nel riquadro Nuovo livello di accesso, nella sezione Condizioni, fai clic su Aggiungi attributo, quindi su Device Policy.
Fai clic sul menu a discesa Crittografia dello spazio di archiviazione e seleziona Criptato. Tieni presente che questa regola funziona solo dopo aver configurato la verifica degli endpoint sui dispositivi dei dipendenti.
Fai di nuovo clic su Aggiungi attributo e seleziona Subnet IP.
Nella casella Subnet IP, inserisci uno o più intervalli IPv4 o IPv6 formattati come blocchi CIDR.
In questo esempio, per limitare l'accesso solo ai revisori, devi inserire
203.0.113.0/25
nella casella Subnet IP.Fai clic su Salva.
gcloud
Crea un file .yaml per un livello di accesso che includa uno o più intervalli IPv4 o IPv6 formattati come blocchi CIDR.
In questo esempio, per limitare l'accesso solo ai revisori, devi inserire quanto segue nel file .yaml:
- ipSubnetworks: - 203.0.113.0/25 - devicePolicy: allowedEncryptionStatuses - ENCRYPTED
Per un elenco degli attributi dei livelli di accesso e del relativo formato YAML, vedi Attributi del livello di accesso. Guarda questo esempio di file YAML del livello di accesso per un file YAML completo di tutti i possibili attributi.
Tieni presente che la regola
devicePolicy
funziona solo dopo che hai configurato la verifica degli endpoint sui dispositivi dei dipendenti.Salva il file. In questo esempio, il file è denominato CONDITIONS.yaml.
Crea il livello di accesso.
gcloud access-context-manager levels create NAME \ --title TITLE \ --basic-level-spec CONDITIONS.yaml \ --policy=POLICY_NAME
Dove:
NAME è il nome univoco del livello di accesso. Deve iniziare con una lettera e includere solo lettere, numeri e trattini bassi.
TITLE è un titolo leggibile. Deve essere univoco per il criterio.
POLICY_NAME è il nome del criterio di accesso della tua organizzazione.
Dovresti visualizzare un output simile al seguente:
Create request issued for: NAME Waiting for operation [accessPolicies/POLICY_NAME/accessLevels/NAME/create/1521594488380943] to complete...done. Created level NAME.
API
Crea un corpo della richiesta per creare una risorsa
AccessLevel
che includa uno o più intervalli IPv4 o IPv6 formattati come blocchi CIDR e un criterio relativo ai dispositivi che richiede archiviazione criptata.In questo esempio, per limitare l'accesso solo ai revisori, devi inserire quanto segue nel corpo della richiesta:
{ "name": "NAME", "title": "TITLE", "basic": { "conditions": [ { "ipSubnetworks": [ "203.0.113.0/25" ] }, { "devicePolicy": [ "allowedEncryptionStatuses": [ "ENCRYPTED" ] ] } ] } }
Dove:
NAME è il nome univoco del livello di accesso. Deve iniziare con una lettera e includere solo lettere, numeri e trattini bassi.
TITLE è un titolo leggibile. Deve essere univoco per il criterio.
Crea il livello di accesso chiamando
accessLevels.create
.POST https://accesscontextmanager.googleapis.com/v1/accessPolicies/POLICY_NAME/accessLevels
Dove:
- POLICY_NAME è il nome del criterio di accesso della tua organizzazione.
Applicazione di un livello di accesso
Una risorsa protetta da IAP ha un criterio IAM che associa il ruolo IAP alla risorsa.
Aggiungendo un'associazione condizionale IAM al criterio IAM, l'accesso alle risorse viene ulteriormente limitato in base agli attributi della richiesta. Questi attributi della richiesta includono:
- Livelli di accesso
- Host/percorso URL
- Data/ora
Tieni presente che i valori delle richieste confrontati con request.host
e request.path
specificati in un'associazione condizionale IAM devono essere esatti. Ad esempio, se limiti l'accesso ai percorsi che iniziano con /internal admin
, puoi bypassare la limitazione andando a /internal%20admin
. Per ulteriori informazioni, consulta Utilizzare le condizioni nome host e percorso.
I passaggi seguenti mostrano come aggiungere il tuo livello di accesso a una risorsa protetta da IAP aggiornando il relativo criterio IAM.
Console
Vai alla pagina di amministrazione IAP.
Seleziona la casella di controllo accanto alle risorse per cui vuoi aggiornare le autorizzazioni IAM.
Nel riquadro delle informazioni a destra, fai clic su Aggiungi entità.
Nella casella Nuova entità, inserisci le entità a cui vuoi assegnare un ruolo.
Nell'elenco a discesa Seleziona un ruolo, seleziona il ruolo Utente applicazione web con protezione IAP.
Per specificare i livelli di accesso esistenti, selezionali dall'elenco a discesa Livelli di accesso. Devi selezionare il ruolo Utente applicazione web con protezione IAP e disporre delle autorizzazioni a livello di organizzazione per visualizzare i livelli di accesso esistenti.
Quando applichi più livelli di accesso a una risorsa, agli utenti viene concesso l'accesso alla risorsa quando soddisfano le condizioni specificate in almeno uno dei livelli di accesso selezionati (si tratta di un OR logico dei livelli di accesso nell'elenco). Se vuoi che gli utenti soddisfino le condizioni in più di un livello di accesso (ovvero un operatore AND logico dei livelli di accesso), crea un livello di accesso che contenga più livelli di accesso.
Se vuoi aggiungere altri ruoli alle entità, fai clic su Aggiungi un altro ruolo.
Dopo aver aggiunto i ruoli, fai clic su Salva.
gcloud
Al momento puoi utilizzare gcloud CLI solo per impostare le associazioni condizionali a livello di progetto.
Per impostare le associazioni condizionali, modifica il file policy.yaml
del progetto
seguendo la procedura riportata di seguito:
Apri il criterio IAM per l'app utilizzando il seguente comando gcloud:
gcloud projects get-iam-policy PROJECT_ID > policy.yaml
Modifica il file
policy.yaml
per specificare quanto segue:- Gli utenti e i gruppi a cui vuoi applicare la condizione IAM.
- Ruolo
iap.httpsResourceAccessor
per concedere l'accesso alle risorse. - La condizione IAM con il tuo livello di accesso.
La seguente condizione concede l'accesso all'utente e al gruppo se i requisiti del livello di accesso di ACCESS_LEVEL_NAME sono soddisfatti e il percorso dell'URL della risorsa inizia con
/
.... - members: - group:EXAMPLE_GROUP@GOOGLE.COM - user:EXAMPLE_USER@GOOGLE.COM role: roles/iap.httpsResourceAccessor condition: expression: "accessPolicies/ORGANIZATION_NUMBER/accessLevels/ACCESS_LEVEL_NAME" in request.auth.access_levels && request.path.startsWith("/") title: CONDITION_TITLE ...
Associa il criterio all'app utilizzando il comando
set-iam-policy
.gcloud projects set-iam-policy PROJECT_ID policy.yaml
API
Per modificare il file policy.json
dell'app, segui la procedura riportata di seguito per il tuo
tipo di app. Consulta la pagina sulla gestione dell'accesso alle risorse protette da IAP per ulteriori informazioni sull'utilizzo dell'API IAM per gestire i criteri di accesso.
Prima di completare i passaggi indicati di seguito relativi all'API specifica per l'app, esporta le seguenti variabili:
export PROJECT_NUM=PROJECT_NUMBER export IAP_BASE_URL=https://iap.googleapis.com/v1beta1/projects/${PROJECT_NUMBER}/iap_web # Replace POLICY_FILE.JSON with the name of JSON file to use for setIamPolicy export JSON_NEW_POLICY=POLICY_FILE.JSON
App Engine
Esporta le seguenti variabili di App Engine:
# The APP_ID is usually the project ID export GAE_APP_ID=APP_ID export GAE_BASE_URL=${IAP_BASE_URL}/appengine-${GAE_APP_ID}
Ottieni il criterio IAM per l'app App Engine utilizzando il metodo
getIamPolicy
. Il bit di dati vuoto alla fine trasforma la richiestacurl
in POST anziché in GET.curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -d '' ${GAE_BASE_URL}/:getIamPolicy
Aggiungi l'associazione condizionale IAM al file JSON del criterio IAM. Di seguito è riportato un esempio di un file
policy.json
modificato che associa il ruoloiap.httpsResourceAccessor
a due utenti, concedendo loro l'accesso alle risorse protette di Chrome Enterprise Premium. È stata aggiunta una condizione IAM per concedere l'accesso alle risorse solo se il requisito del livello di accesso ACCESS_LEVEL_NAME è soddisfatto e il percorso dell'URL della risorsa inizia con/
. Può esserci una sola condizione per associazione.
Esempio di file policy.json{ "policy": { "bindings": [ { "role": "roles/iap.httpsResourceAccessor", "members": [ "group:EXAMPLE_GROUP@GOOGLE.COM", "user:EXAMPLE_USER@GOOGLE.COM" ], "condition": { "expression": ""accessPolicies/ORGANIZATION_NUMBER/accessLevels/ACCESS_LEVEL_NAME" in request.auth.access_levels && request.path.startsWith("/")", "title": "CONDITION_NAME" } } ] } }
Imposta il nuovo file
policy.json
utilizzando il metodosetIamPolicy
.curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \ ${GAE_BASE_URL}:setIamPolicy -d @${JSON_NEW_POLICY}
Servizi e versioni di App Engine
Puoi anche aggiornare il criterio IAM di un servizio App Engine, tutte le versioni o una versione specifica di un servizio. Per farlo per una versione specifica di un servizio:
- Esporta le seguenti variabili aggiuntive.
export GAE_SERVICE=SERVICE_NAME export GAE_VERSION=VERSION_NAME
- Aggiorna la variabile GAE_BASE_URL esportata.
export GAE_BASE_URL=${IAP_BASE_URL}/appengine-${GAE_APP_ID}/services/${GAE_SERVICE}/versions/${GAE_VERSION}
- Ottieni e imposta il criterio IAM per la versione utilizzando i comandi
getIamPolicy
esetIamPolicy
mostrati in precedenza.
GKE e Compute Engine
Esporta l'ID progetto del tuo servizio di backend.
export BACKEND_SERVICE_NAME=BACKEND_SERVICE_NAME
Ottieni il criterio IAM per l'app Compute Engine utilizzando il metodo
getIamPolicy
. Il bit di dati vuoto alla fine trasforma la richiestacurl
in POST anziché in GET.curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \ ${IAP_BASE_URL}/compute/services/${BACKEND_SERVICE_NAME}:getIamPolicy \ -d ''
Aggiungi l'associazione condizionale IAM al file JSON del criterio IAM. Di seguito è riportato un esempio di un file
policy.json
modificato che associa il ruoloiap.httpsResourceAccessor
a due utenti, concedendo loro l'accesso alle risorse protette di Chrome Enterprise Premium. È stata aggiunta una condizione IAM per concedere l'accesso alle risorse solo se il requisito del livello di accesso ACCESS_LEVEL_NAME è soddisfatto e il percorso dell'URL della risorsa inizia con/
. Può esserci una sola condizione per associazione.
Esempio di file policy.json{ "policy": { "bindings": [ { "role": "roles/iap.httpsResourceAccessor", "members": [ "group":EXAMPLE_GROUP@GOOGLE.COM, "user:EXAMPLE_USER@GOOGLE.COM" ], "condition": { "expression": ""accessPolicies/ORGANIZATION_NUMBER/accessLevels/ACCESS_LEVEL_NAME" in request.auth.access_levels && request.path.startsWith("/")", "title": "CONDITION_NAME" } } ] } }
Imposta il nuovo file
policy.json
utilizzando il metodosetIamPolicy
.curl -i -H "Content-Type:application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ ${IAP_BASE_URL}/compute/services/${BACKEND_SERVICE_NAME}:setIamPolicy \ -d @${JSON_NEW_POLICY}