Richiama un endpoint privato conforme a Controlli di servizio VPC

Puoi scegliere come target un endpoint privato per le chiamate HTTP dall'esecuzione del flusso di lavoro usando il registro dei servizi di Service Directory con Workflows. Creando un endpoint privato all'interno di una rete Virtual Private Cloud (VPC), l'endpoint può essere conforme ai Controlli di servizio VPC.

I Controlli di servizio VPC forniscono un ulteriore livello di protezione indipendenti da Identity and Access Management (IAM). Anche se IAM abilita di controllo dell'accesso basato sull'identità granulare, i Controlli di servizio VPC consentono sicurezza perimetrale basata sul contesto, compreso il controllo del traffico in uscita dei dati attraverso perimetrale.

  • Service Directory è una registro dei servizi, in cui sono archiviate informazioni sui servizi di rete registrati. inclusi nomi, località e attributi. A prescindere dell'infrastruttura, puoi registrare i servizi automaticamente e acquisire i loro i dettagli. In questo modo puoi scoprire, pubblicare e connettere servizi su larga scala a tutti gli endpoint di servizio.

  • Una rete VPC fornisce connettività per delle istanze di macchine virtuali (VM) e consente di creare endpoint privati nella tua rete VPC usando indirizzi IP interni. HTTP le chiamate a una risorsa di rete VPC vengono inviate su una rete privata applicando i Controlli di servizio IAM e VPC.

  • Controlli di servizio VPC è un Funzionalità di Google Cloud che ti consente di configurare un perimetro di servizio e creare un confine del trasferimento di dati. Puoi utilizzare Controlli di servizio VPC con Workflows per contribuire a proteggere i servizi e ridurre i rischi dell'esfiltrazione dei dati.

Questo documento mostra come registrare una VM in una rete VPC come endpoint di Service Directory. Ciò ti consente di fornire del flusso di lavoro con un nome per il servizio Service Directory. Il tuo dell'esecuzione di un flusso di lavoro utilizza le informazioni recuperate dal registro dei servizi inviare la richiesta HTTP appropriata, senza passare a una rete pubblica.

Questo diagramma fornisce una panoramica:

Invio di una richiesta HTTP a un numero di porta su un'istanza VM utilizzando le informazioni di Service Directory

A livello generale, devi:

  1. Concedi le autorizzazioni all'agente di servizio Cloud Workflows in modo che l'agente di servizio possa visualizzare le risorse di Service Directory e accedere alle reti VPC tramite Service Directory.
  2. Crea una rete VPC per fornire funzionalità di networking.
  3. Crea una regola firewall VPC in modo da può consentire o negare il traffico da o verso le istanze VM nel tuo VPC in ogni rete.
  4. Crea un'istanza VM nella rete VPC. R L'istanza VM di Compute Engine è una macchina virtuale ospitata l'infrastruttura di Google. I termini istanza Compute Engine, Istanza VM e VM sono due termini sinonimi e vengono utilizzati in modo intercambiabile.
  5. Esegui il deployment di un'applicazione sulla VM. Puoi eseguire un'app sul tuo un'istanza VM e verificare che il traffico venga gestito come previsto.
  6. Configura Service Directory in modo che l'esecuzione del flusso di lavoro possa richiamare Service Directory endpoint.
  7. Crea ed esegui il deployment del flusso di lavoro. La Il valore private_service_name nel flusso di lavoro specifica Endpoint Service Directory che hai registrato nella precedente passaggio.

Concedi le autorizzazioni all'agente di servizio Cloud Workflows

Alcuni servizi Google Cloud hanno agenti di servizio che consentono ai servizi di accedere le tue risorse. Se un'API richiede un agente di servizio, Google crea l'agente di servizio dopo l'attivazione e l'uso dell'API.

  1. Quando esegui il deployment di un flusso di lavoro per la prima volta, viene creato automaticamente l'agente di servizio Cloud Workflows il seguente formato:

    service-PROJECT_NUMBER@gcp-sa-workflows.iam.gserviceaccount.com

    Puoi creare manualmente l'account di servizio in un progetto senza flussi di lavoro con questo comando:

    gcloud beta services identity create \
        --service=workflows.googleapis.com \
        --project=PROJECT_ID

    Sostituisci PROJECT_ID con il tuo Google Cloud dell'ID progetto.

  2. Per visualizzare le risorse di Service Directory, concedi la Ruolo Visualizzatore Service Directory (servicedirectory.viewer) del progetto a Workflows agente di servizio:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-workflows.iam.gserviceaccount.com \
        --role=roles/servicedirectory.viewer

    Sostituisci PROJECT_NUMBER con il tuo Google Cloud del progetto. Puoi trovare il numero del tuo progetto nella Ti diamo il benvenuto della console Google Cloud o eseguendo questo comando:

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'
  3. Per accedere alle reti VPC utilizzando Service Directory, concedi il Ruolo Servizio autorizzato Private Service Connect (roles/servicedirectory.pscAuthorizedService) del progetto alla Agente di servizio Workflows:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-workflows.iam.gserviceaccount.com \
        --role=roles/servicedirectory.pscAuthorizedService

Crea una rete VPC

Una rete VPC è una versione virtuale di una rete fisica che è implementato all'interno della rete di produzione di Google. Offre connettività per le tue istanze VM di Compute Engine.

Puoi creare un nuovo VPC in modalità automatica o personalizzata in ogni rete. Ogni nuova rete creata deve avere un nome univoco all'interno nello stesso progetto.

Ad esempio, il comando seguente crea un VPC in modalità automatica rete:

gcloud compute networks create NETWORK_NAME \
    --subnet-mode=auto

Sostituisci NETWORK_NAME con un nome per rete VPC.

Per ulteriori informazioni, vedi Creare e gestire le reti VPC.

Crea una regola firewall VPC

Le regole firewall VPC consentono o negano il traffico da o verso la VM di Compute Engine in una rete VPC in base a numero di porta, tag protocollo.

Le regole firewall VPC sono definite a livello di rete e solo si applicano alla rete in cui sono stati creati; ma il nome che scegli per un deve essere univoca per il progetto.

Ad esempio, il comando seguente crea una regola firewall per un rete VPC e consente il traffico in entrata da qualsiasi indirizzo IPv4, 0.0.0.0/0. Il valore del flag --rules di all rende la regola applicabile a tutti protocolli e tutte le porte di destinazione.

gcloud compute firewall-rules create RULE_NAME \
    --network=projects/PROJECT_ID/global/networks/NETWORK_NAME \
    --direction=INGRESS \
    --action=ALLOW \
    --source-ranges=0.0.0.0/0 \
    --rules=all

Sostituisci RULE_NAME con un nome per la regola firewall.

Per ulteriori informazioni, vedi Utilizza le regole firewall VPC.

Crea un'istanza VM nella rete VPC

Le istanze VM includono i cluster Google Kubernetes Engine (GKE), App Engine le istanze in un ambiente flessibile e altri prodotti Google Cloud basati di Compute Engine. Per l'assistenza accesso privato alla rete, una risorsa di rete VPC può essere un'istanza VM, l'indirizzo IP di Cloud Interconnect o un bilanciatore del carico interno di livello 4.

Le istanze di Compute Engine possono eseguire immagini pubbliche per Linux e Windows Google fornisce, oltre a immagini personalizzate private che puoi creare o importare da sistemi esistenti. Puoi anche eseguire il deployment di Docker containerizzati.

Puoi scegliere le proprietà della macchina delle tue istanze, come il numero di CPU virtuali e la quantità di memoria, usando o creando tipi di macchine personalizzate.

Ad esempio, il comando seguente crea un'istanza VM Linux da un con un'interfaccia di rete collegata alla rete VPC creati in precedenza.

  1. Crea e avvia un'istanza VM:

    gcloud compute instances create VM_NAME \
        --image-family=debian-11 \
        --image-project=debian-cloud \
        --machine-type=e2-micro \
        --network-interface network=projects/PROJECT_ID/global/networks/NETWORK_NAME

    Sostituisci VM_NAME con un nome per la VM.

  2. Se ti viene richiesto di confermare la zona per l'istanza, digita y.

    Dopo aver creato l'istanza VM, prendi nota dell'indirizzo INTERNAL_IP che viene restituito.

  3. Nella console Google Cloud, vai alla pagina Istanze VM.

    Vai a Istanze VM

  4. Nella colonna Nome, fai clic sul nome dell'istanza VM appropriata.

  5. Se la VM è in esecuzione, per arrestarla, fai clic su Interrompi.

  6. Per modificare la VM, fai clic su Modifica.

  7. Nella sezione Networking > Firewall, per consentire Traffico HTTPS sulla VM, seleziona Consenti traffico HTTP oppure Consenti traffico HTTPS.

    Per questo esempio, seleziona la casella di controllo Consenti traffico HTTP.

    Compute Engine aggiunge alla tua VM un tag di rete che associa una regola firewall con la VM. Quindi crea il firewall in entrata corrispondente che consente tutto il traffico in entrata su tcp:80 (HTTP) o tcp:443 (HTTPS).

  8. Per salvare le modifiche, fai clic su Salva.

  9. Per riavviare la VM, fai clic su Avvia/Riprendi.

Per ulteriori informazioni, vedi Crea e avvia un'istanza VM.

Esegui il deployment di un'applicazione sulla VM

Per testare la configurazione di rete e confermare che il traffico sia gestito come previsto, puoi eseguire il deployment di una semplice app sulla tua VM in ascolto su una porta.

Ad esempio, i comandi seguenti creano un servizio web Node.js che rimane in ascolto alla porta 3000.

  1. Stabilisci una connessione SSH alla VM in esecuzione in un'istanza Compute Engine.

  2. Aggiorna i repository di pacchetti:

    sudo apt update
  3. Installa NVM, Node.js e npm.

    Per ulteriori informazioni, vedi Configurazione di un ambiente di sviluppo Node.js.

  4. Crea in modo interattivo un file package.json:

    npm init

    Ad esempio:

    {
    "name": "test",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "scripts": {
    "test": "hello"
    },
    "author": "",
    "license": "ISC"
    }
  5. Installa Express, un'applicazione web per Node.js:

    npm install express
  6. Scrivi il codice per l'app di prova:

    vim app.js

    L'esempio seguente crea un'app che risponde alle richieste GET alla percorso principale (/) con il testo "Hello, world!"

    const express = require('express');
    const app = express();
    
    app.get('/', (req, res) => {
      res.status(200).send('Hello, world!').end();
    });
    
    app.listen(3000, () => {
      console.log('Sample app listening on port 3000.');
    });

    Annota la porta su cui l'app è in ascolto. Utilizzare lo stesso numero di porta durante la configurazione dell'endpoint per Service Directory completamente gestito di Google Cloud.

  7. Verifica che l'app sia in ascolto sulla porta 3000:

    node app.js

Compute Engine offre una gamma di opzioni di deployment. Per maggiori informazioni le informazioni, vedi Scegli una strategia di deployment di Compute Engine per il tuo carico di lavoro.

Configura Service Directory

Per supportare il richiamo di un endpoint privato da un'esecuzione del flusso di lavoro, è necessario impostare per creare uno spazio dei nomi di Service Directory, e aggiungere un endpoint al servizio.

Ad esempio, i comandi seguenti creano uno spazio dei nomi, un servizio endpoint che specifica la rete VPC e l'IP interno dell'istanza VM.

  1. Crea uno spazio dei nomi:

    gcloud service-directory namespaces create NAMESPACE \
        --location=REGION
    

    Sostituisci quanto segue:

    • NAMESPACE: l'ID dello spazio dei nomi o l'intero identificatore qualificato per lo spazio dei nomi.
    • REGION: la regione Google Cloud che contiene lo spazio dei nomi; ad esempio us-central1.
  2. Crea un servizio:

    gcloud service-directory services create SERVICE \
        --namespace=NAMESPACE \
        --location=REGION
    

    Sostituisci SERVICE con il nome del servizio che stanno creando.

  3. Configurare un endpoint.

    gcloud service-directory endpoints create ENDPOINT \
        --namespace=NAMESPACE \
        --service=SERVICE \
        --network=projects/PROJECT_NUMBER/locations/global/networks/NETWORK_NAME \
        --port=PORT_NUMBER \
        --address=IP_ADDRESS \
        --location=REGION
    

    Sostituisci quanto segue:

    • ENDPOINT: il nome dell'endpoint che stai in fase di creazione.
    • PORT_NUMBER: la porta su cui è in esecuzione l'endpoint ; ad esempio 3000.
    • IP_ADDRESS: indirizzo IPv6 o IPv4 dell'endpoint; si tratta dell'indirizzo IP interno annotato in precedenza.

Per ulteriori informazioni, vedi Configura Service Directory e Configura l'accesso alla rete privata.

Crea ed esegui il deployment del flusso di lavoro

La chiamata o il richiamo di un endpoint privato da Workflows sono completati tramite una richiesta HTTP. I metodi di richiesta HTTP più comuni prevedono (come http.get e http.post), ma puoi apportare qualsiasi tipo di richiesta HTTP impostando il campo call su http.request e specificando il tipo di richiesta utilizzando il campo method. Per ulteriori informazioni, consulta Effettuare una richiesta HTTP.

  1. Crea un file di codice sorgente per il tuo flusso di lavoro:

    touch call-private-endpoint.JSON_OR_YAML
    

    Sostituisci JSON_OR_YAML con yaml o json a seconda del formato del flusso di lavoro.

  2. In un editor di testo, copia il seguente flusso di lavoro (che in questo caso utilizza una protocollo HTTP per il valore url) al file del codice sorgente:

    YAML

    main:
      steps:
        - checkHttp:
            call: http.get
            args:
              url: http://IP_ADDRESS
              private_service_name: "projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE/services/SERVICE"
            result: res
        - ret:
            return: ${res}

    JSON

    {
      "main": {
        "steps": [
          {
            "checkHttp": {
              "call": "http.get",
              "args": {
                "url": "http://IP_ADDRESS",
                "private_service_name": "projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE/services/SERVICE"
              },
              "result": "res"
            }
          },
          {
            "ret": {
              "return": "${res}"
            }
          }
        ]
      }
    }

    Il valore private_service_name deve essere una stringa che specifica un il nome del servizio Service Directory registrato con seguente formato:

    projects/PROJECT_ID/locations/LOCATION/namespaces/NAMESPACE_NAME/services/SERVICE_NAME

  3. Esegui il deployment del flusso di lavoro. A scopo di test, puoi allegare Compute Engine predefinito al flusso di lavoro per rappresentarne l'identità:

    gcloud workflows deploy call-private-endpoint \
        --source=call-private-endpoint.JSON_OR_YAML \
        --location=REGION \
        --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
    
  4. Esegui il flusso di lavoro:

    gcloud workflows run call-private-endpoint \
        --location=REGION

    Dovresti vedere un risultato simile al seguente:

    argument: 'null'
    duration: 0.650784403s
    endTime: '2023-06-09T18:19:52.570690079Z'
    name: projects/968807934019/locations/us-central1/workflows/call-private-endpoint/executions/4aac88d3-0b54-419b-b364-b6eb973cc932
    result: '{"body":"Hello, world!","code":200,"headers":{"Connection":"keep-alive","Content-Length":"21","Content-Type":"text/html;
    charset=utf-8","Date":"Fri, 09 Jun 2023 18:19:52 GMT","Etag":"W/\"15-NFaeBgdti+9S7zm5kAdSuGJQm6Q\"","Keep-Alive":"timeout=5","X-Powered-By":"Express"}}'
    startTime: '2023-06-09T18:19:51.919905676Z'
    state: SUCCEEDED
    

Passaggi successivi