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

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 tipo di dispositivo, indirizzo IP e identità utente, puoi designare il livello di accesso da concedere. Ad esempio, potresti assegnare un livello "High_Trust" alle connessioni all'interno della rete aziendale e "Medium_Trust" ai dispositivi esterni che eseguono sistemi operativi approvati.

Le informazioni sul dispositivo vengono raccolte e utilizzate come riferimento dai livelli di accesso dopo aver configurato la verifica degli endpoint. Verifica endpoint crea un inventario di tutti i dispositivi aziendali e personali che accedono alle risorse aziendali.

Un livello di accesso viene applicato aggiungendolo come condizione IAM (Identity and Access Management) alla risorsa protetta da IAP. IAP ti 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 saperne di più, vedi la panoramica di Gestore contesto accesso.

Prima di iniziare

Prima di iniziare, devi:

  • Proteggi una risorsa con IAP.
  • Configura Endpoint Verification. Tieni presente che questa operazione è necessaria solo se vuoi limitare l'accesso alle tue risorse in base alle informazioni sul dispositivo dell'utente, ad esempio lo stato di crittografia dello spazio di archiviazione.
  • Assicurati di disporre di uno dei seguenti ruoli concessi nel 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 per gli auditor vengono assegnati IP su una subnet compresa tra 203.0.113.0 e 203.0.113.127. Inoltre, vuoi assicurarti che i loro dispositivi siano criptati. Sai che a questa subnet non verranno assegnati altri dispositivi oltre 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 e poi su Device Policy.

  5. Fai clic sul menu a discesa Crittografia dello spazio di archiviazione e seleziona Crittografato. Tieni presente che questa regola funziona solo dopo aver configurato la verifica degli endpoint sui dispositivi dei tuoi dipendenti.

  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ù intervalli IPv4 o IPv6 formattati come blocchi CIDR.

    In questo esempio, per limitare l'accesso solo ai revisori, inserisci 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 dei livelli di accesso. Consulta questo file YAML di esempio per un livello di accesso per un file YAML completo di tutti gli attributi possibili.

    Tieni presente che la regola devicePolicy funziona solo dopo aver configurato la verifica degli endpoint sui dispositivi dei tuoi dipendenti.

  2. Salva il file. In questo esempio, il file si chiama 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 per il criterio.

    • POLICY_NAME è il nome della norma 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

  1. Crea un corpo della richiesta per creare una risorsa AccessLevel che includa uno o più intervalli IPv4 o IPv6 formattati come blocchi CIDR e una norma del dispositivo che richieda l'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.

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

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

    Dove:

    • POLICY_NAME è il nome della norma 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.

Se aggiungi un binding condizionale IAM al criterio IAM, l'accesso alle tue risorse viene ulteriormente limitato in base agli attributi della richiesta. Questi attributi della richiesta includono:

  • Livelli di accesso
  • Host e percorso dell'URL
  • Data e ora

Tieni presente che i valori della richiesta confrontati con request.host e request.path specificati in un binding condizionale IAM devono essere esatti. Ad esempio, se limiti l'accesso ai percorsi che iniziano con /internal admin, puoi aggirare la limitazione andando su /internal%20admin. Per ulteriori informazioni, vedi la sezione Utilizzare le condizioni nome host e percorso.

Quando applichi i livelli di accesso a una risorsa IAP, assicurati che i livelli di accesso siano a livello di organizzazione, anziché a livello di progetto o cartella. I passaggi riportati di seguito mostrano come aggiungere il tuo livello di accesso a una risorsa protetta da IAP aggiornando il relativo criterio IAM.

Console

  1. Vai alla pagina IAP.

    Vai alla pagina IAP

  2. Seleziona la casella di controllo accanto alle risorse per cui vuoi aggiornare le autorizzazioni IAM.

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

  4. Nella casella Nuova entità, inserisci le entità a cui vuoi assegnare un ruolo.

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

  6. 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 (ai livelli di accesso nell'elenco viene applicato l'operatore logico "OR"). Se vuoi che gli utenti soddisfino le condizioni in più di un livello di accesso (ai livelli di accesso viene applicato l'operatore logico AND), crea un livello di accesso che ne contenga altri.

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

  8. Quando avrai finito di aggiungere ruoli, fai clic su Salva.

gcloud

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

Per impostare le associazioni condizionali, modifica il file policy.yaml del progetto:

  1. Apri il criterio IAM per l'app utilizzando il seguente 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 la condizione IAM.
    • Il ruolo iap.httpsResourceAccessor per concedere loro 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 vengono soddisfatti i requisiti del livello di accesso ACCESS_LEVEL_NAME 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
    ...
  3. Collega la policy all'app utilizzando il comando set-iam-policy. none gcloud projects set-iam-policy PROJECT_ID policy.yaml

API

Per modificare il file policy.json dell'app, segui la procedura per il tuo tipo di app. Per ulteriori informazioni sull'utilizzo dell'API IAM per gestire i criteri di accesso, consulta la pagina Gestione dell'accesso alle risorse protette da IAP.

Prima di completare i passaggi dell'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

  1. Esporta le seguenti variabili 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. Recupera il criterio IAM per l'app App Engine utilizzando il metodo getIamPolicy. Il bit di dati vuoto alla fine trasforma la richiesta curl in POST anziché 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 di file policy.json modificato che associa il ruolo iap.httpsResourceAccessor a due utenti, concedendo loro l'accesso alle risorse protette da 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.

    File policy.json di esempio

    {
    "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 servizio App Engine, di tutte le versioni o di una versione specifica di un servizio. Per farlo per una versione 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. Recupera e imposta il criterio IAM per la versione utilizzando i comandi getIamPolicy e setIamPolicy.

GKE e Compute Engine

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

    export BACKEND_SERVICE_NAME=BACKEND_SERVICE_NAME

  2. Recupera la policy IAM per l'app Compute Engine utilizzando il metodo getIamPolicy. Il bit di dati vuoto alla fine trasforma la richiesta curl in POST anziché 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 di file policy.json modificato che associa il ruolo iap.httpsResourceAccessor a due utenti, concedendo loro l'accesso alle risorse protette da 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.


    File policy.json di esempio

    {
      "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}