Protezione delle applicazioni non Google Cloud con il connettore delle app BeyondCorp Enterprise

Questa pagina descrive come configurare e utilizzare il connettore dell'app BeyondCorp Enterprise.

Panoramica

Puoi utilizzare il connettore delle app di BeyondCorp Enterprise per fornire accesso sensibile al contesto e alle identità per le applicazioni HTTPS in esecuzione su ambienti non Google Cloud e in ambienti on-premise. Il connettore di app BeyondCorp Enterprise è un'interfaccia sicura e autenticata tra il piano di applicazione di BeyondCorp Enterprise e le applicazioni in esecuzione in ambienti non Google Cloud e on-premise.

Il connettore di app BeyondCorp Enterprise è un proxy TCP che connette gli ambienti dell'organizzazione e Google Cloud. Il proxy TCP ha un componente rivolto all'utente finale ospitato in Google Cloud e un componente rivolto all'applicazione ospitato nell'ambiente della tua organizzazione. Per utilizzare il connettore di app BeyondCorp Enterprise, non è necessario aprire i firewall o configurare il sito per le connessioni Cloud VPN del sito.

Prima di iniziare

Per utilizzare il connettore dell'app BeyondCorp Enterprise, devi avere:

Al momento puoi utilizzare il connettore per app BeyondCorp Enterprise solo con applicazioni HTTPS.

Ogni agente del connettore di app di BeyondCorp Enterprise richiede una VM Linux che esegue Docker. Consigliamo le seguenti distribuzioni Linux:

  • Debian 10.7 (buster)
  • Red Hat Enterprise Linux Server 7.8 (Maipo) x86_64
  • Ubuntu 16.04 o versioni successive

Consigliamo di utilizzare almeno 2 CPU con 2 GB di RAM per l'hardware VM di Linux.

Configurazione e deployment del connettore di app BeyondCorp Enterprise

Di seguito sono riportati i passaggi principali necessari per configurare ed eseguire il deployment del connettore dell'app BeyondCorp Enterprise.

  • Configurazione del progetto Google Cloud
  • Installazione di un agente remoto del connettore di app
  • Connessione di un'applicazione remota a un VPC
  • Configurazione di un bilanciatore del carico HTTP(S) esterno
  • Attivazione di Identity-Aware Proxy

Configurazione del progetto Google Cloud

Per configurare un progetto Google Cloud da utilizzare con il connettore delle app di BeyondCorp Enterprise, devi abilitare l'API BeyondCorp Enterprise. Abilita l'API completando i seguenti passaggi:

  1. Imposta la variabile di ambiente richiesta eseguendo il seguente comando:

    PROJECT_ID=my-project
    

    Sostituisci my-project con l'ID del progetto Google Cloud.

  2. Abilita l'API eseguendo il comando seguente:

    gcloud config set project $PROJECT_ID
    gcloud services enable beyondcorp.googleapis.com
    

Installazione di un agente remoto del connettore di app

Devi eseguire il deployment di una VM dell'agente remoto del connettore per ogni ambiente di rete che ospita un'applicazione che vuoi proteggere con BeyondCorp Enterprise. Devi avere una VM dedicata o qualsiasi server Bare Metal in cui sia installato Docker per ciascun agente remoto che crei.

Per creare un agente remoto, procedi nel seguente modo:

  1. Crea un'istanza VM nell'ambiente dell'applicazione.
  2. Installa l'agente remoto:

    1. Verifica che il tuo DNS sia configurato correttamente e che sia possibile accedere all'applicazione eseguendo curl.
    2. Installa il motore Docker.
    3. Esegui il seguente comando sulla VM dell'agente remoto:
      curl
      https://raw.githubusercontent.com/GoogleCloudPlatform/beyondcorp-applink/main/bash-scripts/install-beyondcorp-runtime -o ./install-beyondcorp-runtime && chmod +x ./install-beyondcorp-runtime && ./install-beyondcorp-runtime
      
    4. Segui le istruzioni sullo schermo per creare un alias per bce-connctl, l'interfaccia a riga di comando dell'agente remoto.
    5. Imposta le variabili di ambiente richieste eseguendo i seguenti comandi:

      PROJECT_ID=my-project
      REGION=us-central1
      CONNECTOR_NAME=my-connector
      

      Sostituisci quanto segue:

      • my-project: ID del progetto Google Cloud.
      • us-central1: area geografica in cui eseguire il deployment della connessione e dei gateway.
      • my-connector: nome del connettore.
    6. Registra il connettore eseguendo il comando seguente nell'interfaccia a riga di comando di bce-connctl:

      bce-connctl init --project=$PROJECT_ID --region=$REGION --connector=$CONNECTOR_NAME
      

      Segui le istruzioni sullo schermo per copiare e incollare lo script di registrazione e completare la registrazione del connettore. Per eseguire lo script di registrazione, devi disporre delle autorizzazioni OWNER sul progetto.

      Quando lo script di registrazione è completo, il runtime sincronizza automaticamente la configurazione del connettore.

  3. Verifica l'installazione dell'agente remoto:

    1. Esegui il comando seguente per assicurarti che il servizio sia in esecuzione:
      sudo systemctl status beyondcorp
      
    2. L'agente remoto è costituito da tre container docker: bce-control-runtime, bce-logagent e bce-connector. Verifica che tutti e tre i container siano in esecuzione con il comando seguente:
      docker ps --filter name=bce
      
    3. (Facoltativo) Puoi controllare i file di log dei container Docker eseguendo il comando seguente:
      docker logs -f CONTAINER_NAME
      
      Sostituisci CONTAINER_NAME con il nome del container docker.

Connessione di un'applicazione remota a un VPC

Prima di completare i seguenti passaggi, assicurati di avere installato l'SDK dell'interfaccia a riga di comando di gcloud e di aver effettuato l'accesso con un account che abbia il ruolo di beyondcorp.admin.

  1. Imposta le variabili di ambiente richieste eseguendo i seguenti comandi:

    CONNECTOR_NAME=my-connector
    CONNECTION_NAME=my-connection
    PROJECT_ID=my-project
    REGION=us-central1
    APP_ENDPOINT=APP_HOST:APP_PORT
    

    Sostituisci quanto segue:

    • my-connector: il nome del connettore, definito in un passaggio precedente.
    • my-connection: un nome univoco per la connessione.
    • my-project: ID del progetto Google Cloud.
    • us-central1: area geografica in cui eseguire il deployment della connessione e dei gateway.
    • APP_HOST: l'indirizzo IP on-premise o un FQDN che ospita l'applicazione.
    • APP_PORT: il numero di porta per la connessione alla tua applicazione.
  2. Per creare una connessione tra l'applicazione e il VPC, esegui questo comando:

    gcloud alpha beyondcorp app connections create $CONNECTION_NAME \
       --project=$PROJECT_ID \
       --location=$REGION \
       --application-endpoint=$APP_ENDPOINT \
       --type=tcp \
       --connectors=$CONNECTOR_NAME \
       --display-name=$CONNECTION_NAME
    

    Tieni presente che il completamento di questo passaggio potrebbe richiedere diversi minuti.

  3. Dopo aver creato la connessione, esegui i comandi seguenti per recuperare gli URI del gateway:

    GATEWAY_URI="$(gcloud alpha beyondcorp app connections describe $CONNECTION_NAME --project=$PROJECT_ID --location=$REGION --format='get(gateway.uri)')"
    GATEWAY_URI_L7="${GATEWAY_URI/bce-psc/"bce-ps7"}"
    

    GATEWAY_URI_L7 viene utilizzato per creare una regola di forwarding. Il connettore di app BeyondCorp Enterprise utilizza Private Service Connect per collegare il progetto consumer alle risorse gestite nei progetti gestiti da Google.

Configurazione di un bilanciatore del carico HTTP(S) esterno

Puoi connettere solo applicazioni HTTPS a un bilanciatore del carico HTTP(S) esterno. Le applicazioni HTTP non sono supportate.

  1. Imposta le variabili di ambiente richieste eseguendo i seguenti comandi:

    LB_PREFIX=web-app
    PROJECT_ID=my-project
    REGION=us-central1
    DOMAIN_NAME=app.example.com
    
    Sostituisci quanto segue:

    • web-app: il prefisso aggiunto ai nomi di tutte le risorse del bilanciatore del carico.
    • my-project: ID del progetto Google Cloud.
    • us-central1: area geografica in cui verranno implementati la connessione e i gateway.
    • app.example.com: il nome di dominio della tua applicazione.
  2. Crea un servizio di backend basato su NEG e collegalo a un collegamento di servizio Private Service Connect eseguendo i seguenti comandi:

    gcloud beta compute network-endpoint-groups create $LB_PREFIX-neg \
        --region=$REGION \
        --network-endpoint-type=private-service-connect \
        --psc-target-service=$GATEWAY_URI_L7
    
    gcloud beta compute backend-services create $LB_PREFIX-backend-service \
        --global \
        --protocol=HTTPS \
        --load-balancing-scheme=EXTERNAL_MANAGED
    
    gcloud beta compute backend-services add-backend $LB_PREFIX-backend-service \
        --global \
        --network-endpoint-group=$LB_PREFIX-neg \
        --network-endpoint-group-region=$REGION
    
  3. Crea un certificato gestito da Google per il tuo dominio eseguendo i comandi seguenti:

    gcloud compute addresses create $LB_PREFIX-static-ip \
        --ip-version=IPV4 \
        --global
    gcloud compute ssl-certificates create $LB_PREFIX-ssl-cert \
        --domains=$DOMAIN_NAME \
        --global
    
    LB_IP="$(gcloud compute addresses describe $LB_PREFIX-static-ip --global --format='value(address)')"
    
  4. Crea un bilanciatore del carico HTTP(S) esterno in base al backend del passaggio precedente eseguendo i comandi seguenti:

    gcloud compute url-maps create $LB_PREFIX-map-https \
        --default-service=$LB_PREFIX-backend-service
    
    gcloud compute target-https-proxies create $LB_PREFIX-https-lb-proxy \
        --url-map=$LB_PREFIX-map-https \
        --ssl-certificates=$LB_PREFIX-ssl-cert
    
    gcloud beta compute forwarding-rules create "$LB_PREFIX-https-lb-forwarding-rule" \
        --global \
        --target-https-proxy=$LB_PREFIX-https-lb-proxy \
        --address=$LB_IP \
        --ports=443 \
        --load-balancing-scheme=EXTERNAL_MANAGED
    

    Dopo aver creato il bilanciatore del carico HTTP(S) esterno, l'applicazione è accessibile su Internet da tale indirizzo IP.

  5. Dopo aver creato il bilanciatore del carico HTTP(S) esterno, devi associare il suo indirizzo IP al nome del dominio in modo che Google Cloud possa eseguire il provisioning di un certificato SSL. Segui le istruzioni del provider DNS per associare l'indirizzo IP al nome DNS. Esegui il comando seguente per verificare lo stato del provisioning:

    1. Mostra l'indirizzo IP da configurare nel provider DNS:
        echo "Load Balancer ip address - $LB_IP"
        
    2. Dopo aver impostato il DNS, controlla se il nome del dominio viene risolto in indirizzi IP eseguendo il comando seguente:
        dig $DOMAIN_NAME
        
    3. Per ottenere lo stato del provisioning, esegui questo comando:

      gcloud compute ssl-certificates describe $LB_PREFIX-ssl-cert \
        --global \
        --format="get(name,managed.status, managed.domainStatus)"
      

    Una volta eseguito il provisioning del certificato SSL, dovresti essere in grado di accedere all'applicazione utilizzando il nome DNS.

Attivazione di Identity-Aware Proxy

Segui la documentazione di Identity-Aware Proxy per configurare Identity-Aware Proxy. Dopo aver configurato Identity-Aware Proxy, utilizza OAuth CLIENT_ID e OAuth CLIENT_SECRET per attivare Identity-Aware Proxy per il servizio di backend completando i seguenti passaggi:

  1. Imposta le variabili di ambiente in base all'ID client OAuth, al segreto client OAuth:

    CLIENT_ID=replace-with-client-id
    CLIENT_SECRET=replace-with-client-secret
    

    Sostituisci quanto segue:

    • replace-with-client-id: il valore OAuth CLIENT_ID di Cloud Console.
    • replace-with-client-secret: il valore OAuth CLIENT_SECRET di Cloud Console.
  2. Abilita Identity-Aware Proxy eseguendo il seguente comando:

      gcloud compute backend-services update $LB_PREFIX-backend-service \
         --global \
         --iap=enabled,oauth2-client-id=$CLIENT_ID,oauth2-client-secret=$CLIENT_SECRET
    
  3. Concedi agli utenti l'accesso alla tua applicazione eseguendo il comando seguente:

    gcloud iap web add-iam-policy-binding \
        --resource-type=backend-services \
        --service=$LB_PREFIX-backend-service \
        --member="user:user-ldap@mydomain.com" \
        --role="roles/iap.httpsResourceAccessor"
    

    Sostituisci user-ldap@mydomain.com con l'account utente appropriato.

Ora la tua applicazione on-premise deve essere pubblicata su Internet e protetta da BeyondCorp Enterprise.