Proteggi le applicazioni non Google Cloud utilizzando il connettore di app

Questa pagina descrive come configurare e utilizzare il connettore di app BeyondCorp Enterprise per proteggere le applicazioni non Google Cloud.

Panoramica

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

Un vantaggio dell'utilizzo del connettore di app BeyondCorp Enterprise è che non è necessario aprire firewall o configurare connessioni Cloud VPN site-to-site.

Architettura

Di seguito è riportato un diagramma dell'architettura di alto livello che mostra i componenti principali del connettore di app BeyondCorp Enterprise.

Componenti del connettore di app BeyondCorp Enterprise

I componenti del connettore di app BeyondCorp Enterprise sono regolati utilizzando tre risorse API principali: connettori di app, connessioni di app e gateway di app.

Connettori di app
Una risorsa connettore definisce un agente remoto univoco del connettore di app. Il deployment degli agenti remoti dei connettori di app viene eseguito in ambienti aziendali remoti, ad esempio in altri cloud e ambienti on-premise. Gli agenti remoti avviano e gestiscono sessioni di tunneling in Google Cloud, ricevono traffico da Google Cloud e inoltrano il traffico agli endpoint delle applicazioni remoti nello stesso ambiente.
Connessioni app
Una risorsa di connessione definisce una connessione logica da Google Cloud a uno specifico endpoint dell'applicazione identificato utilizzando indirizzo IP:Porta o FQDN:Porta. Una risorsa di connessione orchestra un insieme di gateway dei connettori di app gestiti allocati per un determinato endpoint dell'applicazione. I gateway vengono gestiti in Google Cloud e terminano le sessioni del tunnel dagli agenti remoti quando non sono più necessari.
Gateway di app

Un gateway di app è un'offerta di servizio gestito da Google. Gli agenti remoti dei connettori di app si connettono a uno o più gateway che consentono alle connessioni di app e ai connettori di app di inoltrare il traffico dagli utenti finali agli agenti remoti. Il traffico per le connessioni delle app ospitate sullo stesso gateway dell'app viene instradato attraverso un'infrastruttura virtuale comune.

Quando connetti un'applicazione utilizzando il connettore di app, i gateway delle app vengono creati e gestiti implicitamente per te. Puoi anche creare gateway delle app aggiuntivi se vuoi organizzare le risorse di connessione delle app in gruppi. I gateway delle app offrono la flessibilità di raggruppare o separare le connessioni delle app per consentire l'isolamento delle app.

Ogni app gateway può supportare una velocità effettiva massima fino a 1 Gbps per un massimo di 200.000 connessioni simultanee. Ti consigliamo di creare gateway dedicati per le applicazioni critiche che richiedono prestazioni elevate. Puoi allocare un massimo di 10 app per gateway.

Per supportare fino a 200.000 connessioni simultanee e fino a 1 Gbps di velocità effettiva totale, ti consigliamo di utilizzare una VM dedicata con 8 core e 8 GB di memoria per eseguire l'agente remoto del connettore di app. Ad esempio, puoi dedicare 2 agenti remoti del connettore di app in un cluster ad alta disponibilità con 8 core e 8 GB di memoria, ognuno per supportare un'applicazione web ad alte prestazioni (app1.examplecompany.com) con un gateway app dedicato (app_gateway1). Crea un altro cluster di 2 VM, ognuna con 8 core e 8 GB di memoria, per supportare una combinazione di 10 app a basso utilizzo con un altro gateway di app dedicato (app_gateway2).

Le risorse del connettore di app, della connessione dell'app e del gateway dell'app sono a livello di regione. Puoi utilizzarli solo all'interno di un contesto regionale. Ad esempio, non puoi assegnare un connettore di app nella regione A a una connessione di app o a un gateway di app creati nella regione B.

Prima di iniziare

Puoi utilizzare il connettore di app BeyondCorp Enterprise solo con le applicazioni HTTPS. Inoltre, i bilanciatori del carico HTTPS non utilizzano l'estensione SNI (Server Name Indication) per le connessioni al backend. Per maggiori dettagli, consulta Crittografia dal bilanciatore del carico ai backend.

Per utilizzare il connettore di app BeyondCorp Enterprise, devi disporre di quanto segue:

Ogni agente del connettore di app BeyondCorp Enterprise richiede una VM Linux su cui è in esecuzione 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

Per l'hardware VM Linux, consigliamo almeno 2 CPU con 2 GB di RAM.

Puoi configurare e abilitare il connettore di app utilizzando gcloud e l'API o utilizzando la console Google Cloud. Per utilizzare gcloud e le API, completa i seguenti passaggi. Per utilizzare la console Google Cloud, vedi Configurare il connettore di app utilizzando la console Google Cloud.

Configurazione del progetto Google Cloud

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

Interfaccia a riga di comando gcloud

Prima di completare i seguenti passaggi, assicurati di aver installato l'SDK gcloud CLI.

  1. Imposta la variabile di ambiente richiesta eseguendo questo comando:

    PROJECT_ID=my-project
    

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

  2. Abilita l'API eseguendo questo comando:

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

API

  1. Ottieni un token di accesso e imposta le variabili di ambiente e gli alias richiesti eseguendo i seguenti comandi:

    PROJECT_NUMBER=my-project-number
    ACCESS_TOKEN=my-access-token
    

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

  2. Configura un alias pratico per utilizzare il token di accesso:

    alias gcurl="curl -H 'Authorization: Bearer ${ACCESS_TOKEN}' -H 'Content-Type: application/json'"
    

  3. Abilita l'API eseguendo questo comando:

    gcurl https://serviceusage.googleapis.com/v1/projects/${PROJECT_NUMBER}/services/beyondcorp.googleapis.com:enable -d "{}"
    

Installazione di un agente remoto del connettore di app

Devi eseguire il deployment della VM di un agente remoto del connettore di app 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 con Docker installato per ogni agente remoto che crei.

Per creare un agente remoto, completa i seguenti passaggi:

  1. Creare un'istanza VM nel tuo ambiente applicativo.
    1. Assicurati che il firewall di rete delle VM dell'agente remoto consenta tutto il traffico in uscita avviato sulla porta 443 per l'intervallo IP IAP-TCP 35.235.240.0/20. Vedi Verificare la configurazione del firewall per gli altri domini verso cui il firewall della VM dell'agente remoto deve consentire il traffico in uscita.
  2. Installa l'agente remoto:

    1. Verifica che il DNS sia configurato correttamente e di poter accedere all'applicazione utilizzando curl.
    2. Installa Docker Engine.
      1. (Facoltativo) Se utilizzi un proxy, verifica che il daemon Docker sia configurato correttamente.
    3. (Facoltativo) Se utilizzi un proxy, verifica che entrambe le variabili di ambiente del proxy HTTP e HTTPS siano impostate e utilizzino lo schema http://.
    4. Esegui questo comando sulla VM dell'agente remoto per installare l'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
      
    5. Per aggiungere l'alias bce-connctl alla shell, esegui questo comando:
       source ~/.bce_alias
       
    6. Imposta le variabili di ambiente richieste eseguendo questi comandi:

      PROJECT_ID=my-project
      REGION=us-central1
      CONNECTOR_NAME=my-connector
      
      Sostituisci quanto segue:

      • my-project: l'ID del progetto Google Cloud.
      • us-central1: la regione in cui eseguire il deployment della connessione e dei gateway.
      • my-connector: il nome del connettore.
    7. Registra il connettore utilizzando uno dei seguenti tipi di credenziali:

    Account di servizio

    1. Registra il connettore eseguendo questo comando nell'interfaccia a riga di comando bce-connctl:

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

    2. Segui le istruzioni sullo schermo per copiare e incollare lo script di registrazione nei tuoi progetti Google Cloud utilizzando Cloud Shell o gcloud CLI e completare la registrazione del connettore. Per eseguire lo script di registrazione, devi disporre delle autorizzazioni di Owner per il progetto.

      Una volta completato lo script di registrazione, il runtime sincronizza automaticamente la configurazione del connettore.

    Identità federata

    1. Segui la guida alla federazione delle identità per i carichi di lavoro per concedere alle tue identità esterne l'accesso a Google Cloud utilizzando la simulazione dell'identità degli account di servizio.
    2. Scarica la configurazione della libreria client e posiziona il file nella VM dell'agente remoto in /var/beyondcorp/credentials/credentials.json.
      1. Se utilizzi un'istanza AWS EC2 come VM dell'agente remoto, esegui una delle seguenti operazioni:
        1. Rendi IMDSv2 facoltativo sull'istanza EC2.
        2. Aggiungi la seguente riga all'oggetto credential_source nel file di configurazione della libreria client:
          "imdsv2_session_token_url": "http://169.254.169.254/latest/api/token"
          
    3. Sulla VM dell'agente remoto, esegui questi comandi nell'interfaccia a riga di comando bce-connctl:
      bce-connctl config set project $PROJECT_ID
      bce-connctl config set region $REGION
      bce-connctl config set connector $CONNECTOR_NAME
      
    4. Esegui questo comando per riavviare l'agente e fare in modo che recuperi le credenziali:
      sudo systemctl restart beyondcorp
      
    5. Sul tuo endpoint Cloud Shell o gcloud CLI, imposta la variabile di ambiente richiesta eseguendo questo comando:
      SERVICE_ACCOUNT=my-service-account
      
      Sostituisci quanto segue:
      • my-service-account: l'account di servizio Google Cloud associato all'identità esterna.
    6. Concedi all'account di servizio Google Cloud il ruolo BeyondCorp Connection Agent eseguendo questo comando:

      gcloud projects add-iam-policy-binding $PROJECT_ID \
          --member="serviceAccount:$SERVICE_ACCOUNT" \
          --role="roles/beyondcorp.connectionAgent"
      
    7. Esegui questo comando per creare la risorsa del connettore di app Google Cloud.

      gcloud alpha beyondcorp app connectors create $CONNECTOR_NAME \
          --project=$PROJECT_ID \
          --location=$REGION \
          --member="serviceAccount:$SERVICE_ACCOUNT" \
          --display-name=$CONNECTOR_NAME
      

      Una volta creata la risorsa del connettore di app, il runtime dell'agente remoto sincronizza automaticamente la configurazione del connettore.

  3. Verifica l'installazione dell'agente remoto:

    1. Esegui questo comando 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 eseguendo questo comando:
      docker ps --filter name=bce
      
    3. (Facoltativo) Puoi controllare i file di log dei container Docker eseguendo questo comando:
      docker logs -f CONTAINER_NAME
      
      Sostituisci CONTAINER_NAME con il nome del container Docker.

Connessione di un'applicazione remota a un VPC

Interfaccia a riga di comando gcloud

Prima di completare i seguenti passaggi, assicurati di aver installato l'SDK gcloud CLI e di aver eseguito l'accesso con un account che ha il ruolo beyondcorp.admin.

  1. Imposta le variabili di ambiente richieste eseguendo questi 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 della connessione.
    • my-project: l'ID del progetto Google Cloud.
    • us-central1: la regione in cui eseguire il deployment della connessione e dei gateway.
    • APP_HOST: l'indirizzo IP on-premise o un nome di dominio completo che ospita la tua 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 questo passaggio potrebbe richiedere diversi minuti.

  3. Dopo aver creato la connessione, esegui questi comandi 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.

API

  1. Imposta le variabili di ambiente richieste eseguendo questi comandi:

    CONNECTOR_NAME=my-connector
    CONNECTION_NAME=my-connection
    PROJECT_ID=my-project
    REGION=us-central1
    APP_HOST=my-app-host
    APP_PORT=my-app-port
    

    Sostituisci quanto segue:

    • my-connector: il nome del connettore definito in un passaggio precedente.
    • my-connection: un nome univoco della connessione.
    • my-project: l'ID del progetto Google Cloud.
    • us-central1: la regione in cui eseguire il deployment della connessione e dei gateway.
    • my-app-host: l'indirizzo IP on-premise o un nome di dominio completo che ospita la tua applicazione.
    • my-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:

    gcurl https://beyondcorp.googleapis.com/v1/projects/${PROJECT_NUMBER}/locations/${REGION}/appConnections?app_connection_id=${CONNECTION_NAME} \
    -d "{ \
        'application_endpoint': \
        { \
            'host': '${APP_HOST}', \
            'port': '${APP_PORT}' \
        }, \
        'type': 'TCP_PROXY', \
        'display_name': '${CONNECTION_NAME}' \
    }"
    

    Tieni presente che questo passaggio potrebbe richiedere diversi minuti.

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

    GATEWAY_URI=$(gcurl https://beyondcorp.googleapis.com/v1/projects/${PROJECT_NUMBER}/locations/${REGION}/appConnections/${CONNECTION_NAME} | jq -r '.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 delle applicazioni esterno

Puoi connettere solo le applicazioni HTTPS a un bilanciatore del carico delle applicazioni esterno. Le applicazioni HTTP non sono supportate.

Interfaccia a riga di comando gcloud

Prima di completare i seguenti passaggi, assicurati di aver installato l'SDK gcloud CLI e di aver eseguito l'accesso con un account che ha il ruolo beyondcorp.admin.

  1. Imposta le variabili di ambiente richieste eseguendo questi 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: l'ID del progetto Google Cloud.
    • us-central1: la regione in cui verrà eseguito il deployment della connessione e dei gateway.
    • app.example.com: il nome di dominio della tua applicazione.
  2. Crea un gruppo di endpoint di rete (NEG) utilizzando il seguente comando:

    gcloud beta compute network-endpoint-groups create $LB_PREFIX-neg \
        --region=$REGION \
        --network-endpoint-type=private-service-connect \
        --psc-target-service=$GATEWAY_URI_L7
    

    Flag facoltativi:

    • Imposta il flag --network per specificare il nome della rete per gli endpoint di rete nel NEG. Se non specificata, viene utilizzata la rete predefinita del progetto.
    • Imposta il flag --subnet per specificare il nome della subnet per gli endpoint di rete nel NEG. Se non specificato, l'endpoint di rete può appartenere a qualsiasi subnet nella regione in cui è stato creato il gruppo di endpoint di rete.
  3. Crea un servizio di backend basato su NEG e connettilo al collegamento a un servizio Private Service Connect eseguendo questi comandi:

    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
    
  4. Crea un certificato gestito da Google per il tuo dominio eseguendo i seguenti comandi:

    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)')"
    
  5. Crea un bilanciatore del carico delle applicazioni esterno basato sul backend del passaggio precedente eseguendo questi comandi:

    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
    

    Una volta creato il bilanciatore del carico delle applicazioni esterno, l'applicazione è accessibile su internet tramite quell'indirizzo IP.

  6. Dopo aver creato il bilanciatore del carico delle applicazioni esterno, devi associare il suo indirizzo IP al nome di dominio in modo che Google Cloud possa eseguire il provisioning di un certificato SSL. Utilizza le istruzioni del tuo provider DNS per sapere come associare l'indirizzo IP al nome DNS. Esegui questo comando 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, verifica se il nome di dominio viene risolto nell'indirizzo IP eseguendo questo comando:
      dig $DOMAIN_NAME
      
    3. Per conoscere lo stato del provisioning, esegui il comando seguente:
    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.

API

  1. Imposta le variabili di ambiente richieste eseguendo questi 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: l'ID del progetto Google Cloud.
    • us-central1: la regione in cui verrà eseguito il deployment della connessione e dei gateway.
    • app.example.com: il nome di dominio della tua applicazione.
  2. Crea un gruppo di endpoint di rete (NEG) utilizzando il seguente comando:

    gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/regions/${REGION}/networkEndpointGroups \
    -d "{ \
        'name': '${LB_PREFIX}-neg', \
        'network_endpoint_type': 'private-service-connect', \
        'psc_target_service': '${GATEWAY_URI_L7}' \
    }"
    

    Campi facoltativi:

    • Imposta il campo network per specificare l'URL della rete per gli endpoint di rete nel NEG. Se non specificata, viene utilizzata la rete predefinita del progetto.
    • Imposta il campo subnetwork per specificare l'URL della subnet per gli endpoint di rete nel NEG. Se non specificato, l'endpoint di rete può appartenere a qualsiasi subnet nella regione in cui è stato creato il gruppo di endpoint di rete.
  3. Crea un servizio di backend basato su NEG e connettilo al collegamento a un servizio Private Service Connect eseguendo questi comandi:

    gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/backendServices \
    -d "{ \
        'name': '${LB_PREFIX}-backend-service', \
        'service_protocol': 'HTTPS', \
        'port_name': 'https', \
        'load_balancing_scheme': 'EXTERNAL_MANAGED' \
    }"
    
    gcurl -X PATCH https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/backendServices/${LB_PREFIX}-backend-service \
    -d "{ \
        'backends': \
        [{ \
            'group': 'https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/regions/${REGION}/networkEndpointGroups/${LB_PREFIX}-neg' \
        }] \
    }"
    
  4. Crea un certificato gestito da Google per il tuo dominio eseguendo i seguenti comandi:

    gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/addresses \
    -d "{ \
        'name': '${LB_PREFIX}-static-ip', \
        'ip_version': 'IPV4' \
    }"
    
    gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/sslCertificates \
    -d "{ \
        'name': '${LB_PREFIX}-ssl-cert', \
        'managed': \
        { \
            'domains': '${DOMAIN_NAME}' \
        }, \
        'type': 'MANAGED' \
    }"
    
    LB_IP=$(gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/addresses/${LB_PREFIX}-static-ip | jq -r '.address')
    
  5. Crea un bilanciatore del carico delle applicazioni esterno basato sul backend del passaggio precedente eseguendo questi comandi:

    gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/urlMaps \
    -d "{ \
        'name': '${LB_PREFIX}-map-https', \
        'default_service': 'https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/backendServices/${LB_PREFIX}-backend-service' \
    }"
    
    gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/targetHttpsProxies \
    -d "{ \
        'name': '${LB_PREFIX}-https-lb-proxy', \
        'url_map': 'https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/urlMaps/${LB_PREFIX}-map-https', \
        'ssl_certificate': 'https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/sslCertificates/${LB_PREFIX}-ssl-cert' \
    }"
    
    gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/forwardingRules \
    -d "{ \
        'name': '${LB_PREFIX}-https-lb-forwarding-rule', \
        target: 'https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/targetHttpsProxies/${LB_PREFIX}-https-lb-proxy', \
        'ip_address': '${LB_IP}', \
        'port_range': '443-443', \
        'load_balancing_scheme': 'EXTERNAL_MANAGED' \
    }"
    

    Una volta creato il bilanciatore del carico delle applicazioni esterno, l'applicazione è accessibile su internet tramite quell'indirizzo IP.

  6. Dopo aver creato il bilanciatore del carico delle applicazioni esterno, devi associare il suo indirizzo IP al nome di dominio in modo che Google Cloud possa eseguire il provisioning di un certificato SSL. Utilizza le istruzioni del tuo provider DNS per sapere come associare l'indirizzo IP al nome DNS. Esegui questo comando 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, verifica se il nome di dominio viene risolto nell'indirizzo IP eseguendo questo comando:
      dig $DOMAIN_NAME
      
    3. Per conoscere lo stato del provisioning, esegui il comando seguente:
    echo $(gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/sslCertificates/${LB_PREFIX}-ssl-cert \
    | jq -r '.name + " " + .managed.status + " " + (.managed.domainStatus | keys[]) + "=" + .managed.domainStatus[]')
    

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

Abilitazione di Identity-Aware Proxy

Segui la documentazione di Identity-Aware Proxy (IAP) per la configurazione di Identity-Aware Proxy. Dopo aver configurato IAP, abilita IAP per il servizio di backend completando i seguenti passaggi:

  1. Vai alla pagina IAP:
    IAP

  2. In RISORSE HTTPS, individua $LB_PREFIX-backend-service. Per abilitare IAP per questa risorsa, fai clic sul pulsante di attivazione/disattivazione nella colonna IAP. Nella finestra Attiva IAP visualizzata, seleziona la casella di controllo per confermare i requisiti di configurazione della risorsa e fai clic su ATTIVA per confermare che vuoi che IAP protegga la risorsa.

  3. Per consentire agli utenti di accedere alla tua applicazione, devi concedere loro il ruolo Utente applicazione web con protezione IAP per il progetto svolgendo i seguenti passaggi:

    1. Seleziona la casella di controllo $LB_PREFIX-backend-service.
    2. Nel riquadro Informazioni, seleziona AGGIUNGI PRINCIPALE e inserisci gli indirizzi email dei gruppi o delle persone che dovrebbero avere accesso alla tua applicazione.
    3. Nell'elenco a discesa Seleziona un ruolo, seleziona Cloud IAP > Utente applicazione web con protezione IAP e fai clic su Salva.

L'applicazione on-premise dovrebbe ora essere pubblicata su internet e protetta da BeyondCorp Enterprise.

Configurare il connettore di app utilizzando la console Google Cloud

Completa le procedure riportate in questa sezione per eseguire il deployment del connettore di app BeyondCorp Enterprise utilizzando la console Google Cloud.

Inserisci i dettagli della tua richiesta

Aggiungi i dettagli della tua richiesta procedendo nel seguente modo:

  1. Nella console Google Cloud, vai alla pagina IAP.
    Vai a IAP

  2. Fai clic sul pulsante COLLEGA NUOVA APPLICAZIONE e seleziona Connetti tramite App Connector.

  3. In Nome applicazione, inserisci il nome dell'applicazione che vuoi proteggere.

  4. In URL applicazione rivolta all'esterno, inserisci un URL pubblicamente accessibile per consentire agli utenti di accedere all'applicazione.

  5. Tocca Avanti.

Configura la connessione a Google Cloud

Completa i seguenti passaggi per stabilire la connettività tra Google Cloud e il tuo ambiente non Google Cloud.

  1. Fai clic sul pulsante CREA CONNETTORE DI APP e inserisci le seguenti informazioni:

    • Nome connettore di app: il nome del connettore.
    • Regione: la regione in cui eseguire il deployment dei gateway e del connettore di connessione.
  2. Fai clic sul pulsante CREA.

  3. Segui le istruzioni nel riquadro Esegui il provisioning di una macchina virtuale per eseguire il deployment dell'agente remoto sulla tua VM.

  4. Fai clic sul pulsante TESTA STATO DELLA CONNESSIONE per testare la connessione.

  5. Configura il connettore creato nel passaggio precedente inserendo le seguenti informazioni in Dove Google Cloud può trovare la tua applicazione?:

    • Nome host interno: l'indirizzo IP on-premise o il nome di dominio completo che ospita la tua applicazione.
    • Porta: il numero di porta per la connessione all'applicazione.

(Facoltativo) Concedi l'accesso alla tua applicazione

  1. In Nuove entità, inserisci uno o più dei seguenti valori:

    • Email di un account Google: user@gmail.com
    • Gruppo Google: admins@googlegroups.com
    • Account di servizio: server@example.gserviceaccount.com
    • Dominio Google Workspace: example.com
    • chiunque: inserisci allUsers per concedere l'accesso a tutti gli utenti
    • tutti gli Account Google: allAuthenticatedUsers per concedere l'accesso a qualsiasi utente che ha eseguito l'accesso a un Account Google
  2. Seleziona uno o più livelli di accesso, quindi fai clic su AVANTI.

Pubblica l'applicazione

  1. Per pubblicare l'applicazione, fai clic sul pulsante PUBBLICA APPLICAZIONE IN MODO SICURO.

  2. Dopo aver pubblicato l'applicazione e aver ricevuto la conferma Applicazione pubblicata in modo sicuro, devi creare un record DNS per indirizzare l'URL dell'applicazione rivolto all'esterno all'indirizzo IP del proxy. Completa i seguenti passaggi:

    • Nella sezione PASSAGGIO 2: aggiorna DNS, copia l'indirizzo IP dal campo Indirizzo IP. Utilizza l'indirizzo per creare un record DNS seguendo le istruzioni del tuo provider DNS su come associare l'indirizzo IP al nome DNS.
  3. Dopo aver creato il record DNS, testalo facendo clic sul pulsante TEST. Dovresti ricevere la conferma di test DNS superato.

  4. Fai clic su FINE.

Abilita IAP

  1. Vai alla pagina IAP.
    Vai a IAP

  2. Dall'elenco delle risorse, individua l'applicazione e seleziona il pulsante nella colonna IAP.

  3. Nella finestra di dialogo Attiva IAP che viene visualizzata, seleziona la casella di controllo Ho letto i requisiti di configurazione e configurato il servizio di backend in base alla documentazione, quindi fai clic su ATTIVA.

L'applicazione on-premise dovrebbe ora essere pubblicata su internet e protetta da BeyondCorp Enterprise.

(Facoltativo) Crea un gateway di app

I gateway di app vengono creati e gestiti implicitamente quando connetti un'applicazione utilizzando il connettore di app. Puoi anche creare gateway di app personalizzati per organizzare le risorse delle connessioni delle app in gruppi. Il traffico per le connessioni di app ospitate in gateway di app diversi viene instradato tramite un'infrastruttura virtuale separata.

Per creare e specificare un gateway di app, completa i passaggi riportati di seguito.

Interfaccia a riga di comando gcloud

  1. Imposta le variabili di ambiente richieste eseguendo questo comando:

    CONNECTOR_NAME=CONNECTOR_NAME
    CONNECTION_NAME=CONNECTION_NAME
    GATEWAY_NAME=GATEWAY_NAME
    PROJECT_ID=PROJECT_ID
    REGION=REGION
    APP_ENDPOINT=APP_HOST:APP_PORT
    

    Sostituisci quanto segue:

    • CONNECTOR_NAME: il nome del connettore definito in un passaggio precedente.
    • CONNECTION_NAME: un nome univoco della connessione.
    • GATEWAY_NAME: il nome del gateway dell'app.
    • PROJECT_ID: l'ID del progetto Google Cloud.
    • REGION: la regione in cui eseguire il deployment del gateway dell'app, ad esempio us-central1.
    • APP_HOST: l'indirizzo IP on-premise o un nome di dominio completo che ospita la tua applicazione.
    • APP_PORT: il numero di porta per la connessione alla tua applicazione.
  2. Crea un gateway di app eseguendo questo comando:

    gcloud beta beyondcorp app gateways create $GATEWAY_NAME \
    --project=$PROJECT_ID --location=$REGION --display-name=$GATEWAY_NAME
    
  3. Specifica un gateway dell'app in una chiamata di creazione di connessione eseguendo questo comando:

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

API

  1. Imposta le variabili di ambiente richieste eseguendo questo comando:

    CONNECTOR_NAME=CONNECTOR_NAME
    CONNECTION_NAME=CONNECTION_NAME
    GATEWAY_NAME=GATEWAY_NAME
    PROJECT_ID=PROJECT_ID
    REGION=REGION
    APP_ENDPOINT=APP_HOST:APP_PORT
    

    Sostituisci quanto segue:

    • CONNECTOR_NAME: il nome del connettore definito in un passaggio precedente.
    • CONNECTION_NAME: un nome univoco della connessione.
    • GATEWAY_NAME: il nome del gateway dell'app.
    • PROJECT_ID: l'ID del progetto Google Cloud.
    • REGION: la regione in cui eseguire il deployment del gateway dell'app, ad esempio us-central1.
    • APP_HOST: l'indirizzo IP on-premise o un nome di dominio completo che ospita la tua applicazione.
    • APP_PORT: il numero di porta per la connessione alla tua applicazione.
  2. Crea un gateway di app eseguendo questo comando:

    gcurl https://beyondcorp.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/appGateways?app_gateway_id=${GATEWAY_NAME} \
    -d "{ \
    'type': 'TCP_PROXY', \
    'display_name': '${CONNECTION_NAME}' \
    }"
    
  3. Specifica un gateway dell'app in una chiamata di creazione di connessione eseguendo questo comando:

    gcurl https://beyondcorp.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/appConnections?app_connection_id=${CONNECTION_NAME} \
    -d "{ \
    'application_endpoint': \
    { \
    'host': '${APP_HOST}', \
    'port': '${APP_PORT}' \
    }, \
    'gateway': { 'app_gateway' : 'projects/${PROJECT_ID}/locations/${REGION}/appGateways/${GATEWAY_NAME}'}, \
    'connectors':['projects/${PROJECT_ID}/locations/${REGION}/appConnectors/${CONNECTOR_NAME}'], \
    'type': 'TCP_PROXY', \
    'display_name': '${CONNECTION_NAME}' \
    

Passaggi successivi

Risoluzione dei problemi

Impossibile trovare risorse create in precedenza

Quando utilizzi gcloud CLI versione 392.0.0 o successive, usa le risorse predefinite del nuovo connettore di app AppConnector e AppConnection. Ad esempio, gcloud alpha beyondcorp app connectors e gcloud alpha beyondcorp app connections fanno entrambi riferimento alle nuove risorse.

Per accedere alle risorse legacy create con una versione di gcloud CLI precedente alla versione 392.0.0, utilizza la parola chiave legacy. Ad esempio, gcloud alpha beyondcorp app legacy connectors e gcloud alpha beyondcorp app legacy connections fanno entrambi riferimento alle risorse legacy.

Le configurazioni che utilizzano risorse legacy continuano a funzionare per il momento, ma in futuro verranno deprecate.

  • Segui le procedure riportate in questa guida per configurare nuove risorse.
  • Se la configurazione utilizza risorse legacy, utilizza la parola chiave legacy per individuare queste risorse e rimuoverle. Ricrea le risorse seguendo le procedure riportate in questo documento.
  • Se hai una configurazione incompleta che utilizza risorse legacy, utilizza la parola chiave legacy per individuare queste risorse e rimuoverle. Ricrea le risorse seguendo le procedure riportate in questo documento.

Errori TLS/SSL

ERR_SSL_VERSION_OR_CIPHER_MISMATCH

Il browser mostra l'errore ERR_SSL_VERSION_OR_CIPHER_MISMATCH o errori TLS/SSL simili e non reindirizza alla pagina di accesso.

  • Verifica lo stato dei certificati nella pagina dei dettagli del bilanciatore del carico Google Cloud.

    NOTA: il provisioning di un certificato gestito da Google potrebbe richiedere fino a 60 minuti.

TLS error

Il browser mostra l'errore upstream connect error or disconnect/reset before headers. retried and the latest reset reason: connection failure, transport failure reason: TLS error o errori TLS/SSL simili dopo il reindirizzamento alla pagina di accesso.

  • Verifica che l'endpoint dell'applicazione utilizzato nella connessione sia HTTPS.
  • Verifica che l'endpoint app sia accessibile dalla VM dell'agente remoto utilizzando curl:

    curl https://$APP_ENDPOINT
    

    Potrebbe essere necessario utilizzare il flag -k se il certificato dell'applicazione è autofirmato.

Verifica la configurazione del firewall

Assicurati che i firewall tra l'agente remoto e internet consentano le connessioni in uscita ai seguenti domini:

Tipo di connessione Dominio Port (Porta)
TCP raw.githubusercontent.com 443
TCP gcr.io 443
TCP *.googleapis.com 443
TCP tunnel.cloudproxy.app 443
TCP *.tunnel.cloudproxy.app 443
TCP accounts.google.com 443
TCP oauth2.googleapis.com 443

Modificare i connettori associati a una connessione

gcloud

  1. Imposta le variabili di ambiente richieste eseguendo questo comando:

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

    Sostituisci quanto segue:

    • my-connector: il nome del connettore. Può anche essere un elenco separato da virgole come connector1,connector2.
    • my-connection: il nome della connessione da aggiornare.
    • us-central1: la regione in cui viene eseguito il deployment della connessione.
    • my-project: l'ID del progetto Google Cloud.
  2. Per modificare i connettori associati a una connessione, esegui questo comando:

    gcloud alpha beyondcorp app connections update $CONNECTION_NAME \
        --project=$PROJECT_ID \
        --location=$REGION \
        --connectors=$CONNECTOR_NAME
    

API

  1. Imposta le variabili di ambiente richieste eseguendo questo comando:

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

    Sostituisci quanto segue:

    • my-connector: il nome del connettore.
    • my-connection: il nome della connessione da aggiornare.
    • us-central1: la regione in cui viene eseguito il deployment della connessione.
    • my-project: l'ID del progetto Google Cloud.
  2. Per modificare i connettori associati a una connessione, esegui questo comando:

    gcurl -X PATCH \
    https://beyondcorp.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/appConnections/${CONNECTION_NAME}?update_mask=connectors \
    -d "{ \
        'connectors': ['projects/${PROJECT_ID}/locations/${REGION}/appConnectors/${CONNECTOR_NAME}'], \
    }"
    

    Puoi verificare l'aggiornamento eseguendo il comando seguente e controllando il campo connectors dell'output:

    gcurl https://beyondcorp.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/appConnections/${CONNECTION_NAME}
    

Proxy

Il supporto per i proxy è stato introdotto all'inizio del 2024 e richiede modifiche al file di sistema BeyondCorp. Se hai installato l'agente remoto in precedenza e vuoi utilizzare un proxy, reinstalla l'agente remoto.

  • Verifica che il daemon Docker sia configurato correttamente per funzionare con i proxy.

  • Verifica che entrambe le variabili di ambiente del proxy HTTP e HTTPS siano impostate e che entrambe utilizzino lo schema http://. Lo schema https:// e altri schemi non sono supportati.

  • Verifica che le variabili di ambiente del proxy vengano esportate nei processi secondari eseguendo il comando env.

  • Sono supportati solo HTTP_PROXY, HTTPS_PROXY, NO_PROXY e i relativi equivalenti minuscoli.

  • Se devi aggiornare le impostazioni del proxy dopo l'installazione, aggiorna le variabili di ambiente in /var/beyondcorp/env/PROXY se utilizzi l'utente beyondcorp predefinito. Se utilizzi un utente personalizzato, aggiorna /home/$USER/.docker/config.json in base alle istruzioni per la configurazione del client Docker. Per applicare le modifiche al proxy, riavvia l'agente remoto utilizzando il seguente comando:

    sudo systemctl restart beyondcorp
    

Strumenti di diagnostica

run-post-install-checks

run-post-install-checks è uno script installato in /var/beyondcorp/scripts/ che verifica se l'agente remoto è stato installato, registrato e in stato integro. Dopo aver creato un oggetto app connection e averlo assegnato a un agente remoto (connettore), vai alla VM dell'agente remoto ed esegui run-post-install-checks con il comando seguente:

sudo /var/beyondcorp/scripts/run-post-install-checks

Lo script visualizza un messaggio di operazione riuscita se tutto è in ordine.

run-diagnostics

run-diagnostics è uno script installato in /var/beyondcorp/scripts/ che diagnostica i problemi comuni sulla VM dell'agente remoto e stampa un report che puoi condividere con il team di assistenza di BeyondCorp Enterprise. Per eseguire questo script di diagnostica, esegui questo comando:

sudo /var/beyondcorp/scripts/run-diagnostics

Il report di diagnostica viene scritto nella console e in ./diagnostics-report.txt

interfaccia a riga di comando agente remoto

bce-connctl è l'interfaccia a riga di comando (CLI) per l'amministrazione dell'agente remoto per interagire con l'agente remoto localmente. Questa interfaccia a riga di comando supporta vari comandi, come la registrazione dell'agente remoto, il controllo dello stato e l'impostazione dei valori di configurazione.

Comando di inizializzazione

Puoi utilizzare il comando Init per inizializzare l'agente remoto e generare uno script per registrare l'agente.

Esempio:

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

Comandi di stato

Puoi utilizzare i comandi Status per gestire lo stato dell'agente remoto.

  • Elenco: utilizza questo comando per elencare lo stato generale dell'agente remoto e lo stato di eventuali connessioni supportate da questo agente. Esempio: bce-connctl status list

Comandi di configurazione

Puoi utilizzare i comandi Config per gestire i valori di configurazione per l'agente remoto.

  • Elenco: utilizza questo comando per elencare i valori di configurazione dell'agente remoto. Esempio: bce-connctl config list
  • Imposta: utilizza questo comando per impostare un valore di configurazione dell'agente remoto. Esempio: bce-connctl config set <key> <value>

Comandi di registrazione

Puoi utilizzare i comandi di registrazione per gestire la registrazione dell'agente remoto.

  • Descrivi: utilizza questo comando per ottenere lo stato di registrazione dell'agente remoto. Esempio: bce-connctl enrollment describe

    Quando lo script di registrazione da bce-connctl init viene completato correttamente e la chiave pubblica viene caricata correttamente, lo stato è ENROLLED.

Guida

Puoi aggiungere il flag -h o --help a qualsiasi comando bce-connctl per stampare le informazioni sull'utilizzo.

bce-connctl init -h