Creazione e applicazione dei livelli di accesso alle risorse protette con IAP

In questa pagina viene spiegato come creare livelli di accesso utilizzando Gestore contesto accesso e applicarle Con protezione Identity-Aware Proxy (IAP) Google Cloud.

Panoramica

Un livello di accesso un insieme di attributi assegnati alle richieste in base alla loro origine. Utilizzo informazioni come il tipo di dispositivo, l'indirizzo IP e l'identità dell'utente, puoi indicare il livello di accesso da concedere. Ad esempio, potresti assegnare "Fiducia elevata" alle connessioni dall'interno della rete aziendale "Fiducia_media" attendibilità a dispositivi esterni che eseguono sistemi operativi approvati.

I livelli di accesso raccolgono e fanno riferimento alle informazioni del dispositivo una volta configura la Verifica degli endpoint. La verifica degli endpoint crea un inventario di tutti i dati aziendali e personali i dispositivi che accedono alle risorse aziendali.

Un livello di accesso viene applicato in modo forzato aggiungendolo come Condizione IAM (Identity and Access Management) sul tuo Risorsa protetta con IAP. IAP consente di applicare un controllo dell'accesso granulare a livello di risorsa anziché utilizzare firewall a livello di rete. Ad esempio, potresti specificare molte risorse sono disponibili per "Medium_Trust", alcune risposte per le risorse richiedono la dichiarazione "High_Trust" livello.

Per ulteriori informazioni, consulta Gestore contesto accesso panoramica.

Prima di iniziare

Prima di iniziare, segui questi passaggi:

  • Proteggi una risorsa con IAP.
  • Configura la verifica degli endpoint. Nota che è necessaria solo se vuoi limitare l'accesso alle risorse sulle informazioni del dispositivo dell'utente, ad esempio lo stato della crittografia dello spazio di archiviazione.
  • Assicurati di disporre di uno dei seguenti ruoli concesso del 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 un gruppo di revisori interni per l'accesso a Google Cloud Observability per un progetto. Tutti questi Ai dispositivi dei revisori sono assegnati IP su una subnet che si trova 203.0.113.0 e 203.0.113.127. Devi anche assicurarti che i loro dispositivi criptato. Sai che non ci saranno altri dispositivi assegnati a quella subnet rispetto a quelli utilizzati dai revisori.

Console

  1. Vai alla pagina Gestore contesto accesso nella console Google Cloud.

    Vai alla pagina Gestore contesto accesso

  2. Se richiesto, seleziona la tua organizzazione.

  3. Nella parte superiore della pagina Gestore contesto accesso, fai clic su Nuovo.

  4. Nel riquadro Nuovo livello di accesso, nella sezione Condizioni, fai clic su Aggiungi attributo, quindi fai clic su Device Policy.

  5. Fai clic sul menu a discesa Crittografia dello spazio di archiviazione e seleziona Criptato. Tieni presente che questa regola funziona solo dopo che hai configurare la verifica degli endpoint sulle prestazioni dispositivi mobili.

  6. Fai di nuovo clic su Aggiungi attributo e seleziona Subnet IP.

  7. 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.

  8. Fai clic su Salva.

gcloud

  1. Crea un file .yaml per un livello di accesso che includa uno o più livelli Intervalli IPv4 o IPv6 formattati come blocchi CIDR.

    In questo esempio, per limitare l'accesso solo ai revisori, devi inserire il seguente codice 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 configurare la verifica degli endpoint dei tuoi dipendenti dispositivi mobili.

  2. Salva il file. In questo esempio, il file è denominato CONDITIONS.yaml.

  3. 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 .

    • POLICY_NAME è il nome del dominio criterio di accesso.

    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

  1. Crea un corpo della richiesta per creare una AccessLevel risorsa che include 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 il seguente codice 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 .

  2. Crea il livello di accesso chiamando accessLevels.create.

    POST https://accesscontextmanager.googleapis.com/v1/accessPolicies/POLICY_NAME/accessLevels
    

    Dove:

    • POLICY_NAME è il nome del dominio criterio di accesso.

Applicazione di un livello di accesso

Una risorsa protetta con IAP ha un criterio IAM che associa il ruolo IAP alla risorsa.

Aggiungendo un'associazione condizionale IAM alla console IAM l'accesso alle risorse è ulteriormente limitato in base attributi della richiesta. Questi attributi della richiesta includono:

  • Livelli di accesso
  • Host/percorso URL
  • Data/Ora

Tieni presente che i valori delle richieste vengono confrontati con request.host e request.path specificato in un'associazione condizionale IAM deve essere esatta. Per Ad esempio, se limiti l'accesso ai percorsi che iniziano con /internal admin, può bypassare la restrizione andando su /internal%20admin. Consulta Utilizzare le condizioni nome host e percorso per ulteriori informazioni.

I passaggi seguenti spiegano come aggiungere il tuo livello di accesso a un la risorsa protetta da IAP mediante l'aggiornamento e il rispettivo criterio IAM.

Console

  1. Vai alla pagina di amministrazione IAP.

    Vai alla pagina di amministrazione IAP

  2. Seleziona la casella di controllo accanto alle risorse che vuoi aggiornare Autorizzazioni IAM per.

  3. Nel riquadro delle informazioni a destra, fai clic su Aggiungi entità.

  4. Nella casella Nuova entità, inserisci le entità da assegnare un ruolo.

  5. Nell'elenco a discesa Seleziona un ruolo, seleziona la Ruolo Utente applicazione web con protezione IAP.

  6. Per specificare i livelli di accesso esistenti, selezionali in Livelli di accesso dall'elenco a discesa. Devi selezionare l'utente dell'app web con protezione IAP ruolo e di disporre delle autorizzazioni a livello di organizzazione per visualizzare l'accesso esistente diversi.

    Quando applichi più livelli di accesso a una risorsa, agli utenti vengono concessi 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 dell'elenco). Se vuoi che gli utenti soddisfino le condizioni in più di una (un AND logico dei livelli di accesso), crea un livello di accesso che contiene più livelli di accesso.

  7. Se vuoi aggiungere altri ruoli alle entità, fai clic su Aggiungi un altro ruolo.

  8. Dopo aver aggiunto i ruoli, fai clic su Salva.

gcloud

Al momento, puoi utilizzare solo gcloud CLI per impostare associazioni condizionali a livello di progetto.

Per impostare le associazioni condizionali, modifica il file policy.yaml del progetto procedendo nel seguente modo:

  1. Apri il criterio IAM per l'app utilizzando quanto segue Comando gcloud:

    gcloud projects get-iam-policy PROJECT_ID > policy.yaml
    
  2. Modifica il file policy.yaml per specificare quanto segue:

    • Gli utenti e i gruppi a cui vuoi applicare i ruoli IAM .
    • Devi disporre del ruolo iap.httpsResourceAccessor per concedere l'accesso all'account Google Cloud.
    • La condizione IAM con il tuo livello di accesso.

    La seguente condizione concede l'accesso all'utente e al gruppo se I requisiti per il livello di accesso di ACCESS_LEVEL_NAME sono soddisfatti e il 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
    ...
    
  3. 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 tipo di app. Vedi Gestione dell'accesso alle risorse protette da IAP per ulteriori informazioni sull'uso dell'API IAM per gestire criteri di accesso.

Prima di completare i passaggi indicati di seguito relativi all'API specifica per l'app, esporta quanto segue 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

  1. 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}

  2. Ottieni il criterio IAM per l'app App Engine utilizzando getIamPolicy. Il bit di dati vuoto alla fine trasforma curl in POST anziché in GET.

    curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -d '' ${GAE_BASE_URL}/:getIamPolicy
    

  3. Aggiungi l'associazione condizionale IAM al File JSON dei criteri IAM. Di seguito è riportato un esempio un file policy.json modificato che associa iap.httpsResourceAccessor a due utenti, concedendo loro l'accesso a Chrome Enterprise Premium delle risorse protette. Una condizione IAM è stata aggiunta concedere loro l'accesso alle risorse solo se Il requisito del livello di accesso di ACCESS_LEVEL_NAME è soddisfatto e il requisito il percorso dell'URL della risorsa inizia con /. Può essere presente 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"
              }
            }
        ]
      }
    }
    

  4. Imposta il nuovo file policy.json utilizzando il metodo setIamPolicy.

    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 App Engine tutte le versioni o una versione specifica di un servizio. Per fare ciò per un specifica di un servizio:

  1. Esporta le seguenti variabili aggiuntive.
    export GAE_SERVICE=SERVICE_NAME
    export GAE_VERSION=VERSION_NAME
    
  2. Aggiorna la variabile GAE_BASE_URL esportata.
    export GAE_BASE_URL=${IAP_BASE_URL}/appengine-${GAE_APP_ID}/services/${GAE_SERVICE}/versions/${GAE_VERSION}
  3. Ottieni e imposta il criterio IAM per la versione utilizzando i comandi getIamPolicy e setIamPolicy mostrati sopra.

GKE e Compute Engine

  1. Esporta l'ID progetto del tuo servizio di backend.

    export BACKEND_SERVICE_NAME=BACKEND_SERVICE_NAME

  2. Ottieni il criterio IAM per l'app Compute Engine utilizzando getIamPolicy. Il bit di dati vuoto alla fine trasforma curl 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 ''
    

  3. Aggiungi l'associazione condizionale IAM al File JSON dei criteri IAM. Di seguito è riportato un esempio un file policy.json modificato che associa iap.httpsResourceAccessor a due utenti, concedendo loro l'accesso a Chrome Enterprise Premium delle risorse protette. È stata aggiunta una condizione IAM di concedere l'accesso alle risorse solo se Il requisito del livello di accesso di ACCESS_LEVEL_NAME è soddisfatto e il requisito il percorso dell'URL della risorsa inizia con /. Può essere presente 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"
            }
          }
        ]
      }
    }
    

  4. Imposta il nuovo file policy.json utilizzando il metodo setIamPolicy.

    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}