Configura mTLS frontend con una CA privata

Un certificato client valido deve mostrare una catena di attendibilità che risale al trust anchor nell'archivio di attendibilità. Questa pagina fornisce istruzioni per creare la tua catena di attendibilità utilizzando il certificato radice di una CA (autorità di certificazione) privata, che è sotto il tuo controllo. In questa configurazione, la CA privata viene creata utilizzando Certificate Authority Service.

Dopo aver ottenuto il certificato radice della CA privata, questo documento descrive la procedura per caricare il certificato nell'archivio di attendibilità della risorsa TrustConfig di Certificate Manager. Successivamente, la configurazione di attendibilità viene collegata alla risorsa di autenticazione client (ServerTLSPolicy) e la risorsa di autenticazione client viene collegata alla risorsa proxy HTTPS di destinazione del bilanciatore del carico.

Prima di iniziare

  • Consulta la panoramica di mutual TLS.
  • Consulta la guida su come gestire le configurazioni di attendibilità.
  • Installa Google Cloud CLI. Per una panoramica completa dello strumento, consulta la panoramica di gcloud CLI. Puoi trovare i comandi relativi al bilanciamento del carico nel riferimento per l'API e gcloud CLI.

    Se non hai mai eseguito gcloud CLI, esegui prima gcloud init per l'autenticazione.

  • Consulta la guida per creare un pool CA.

  • Se utilizzi un bilanciatore del carico delle applicazioni esterno globale o un bilanciatore del carico delle applicazioni classico, assicurati di aver configurato un bilanciatore del carico con uno dei seguenti backend supportati:

    • Backend di gruppi di istanze VM
    • Bucket Cloud Storage (supportati solo se al bilanciatore del carico è collegato anche almeno un servizio di backend, oltre al bucket di backend)
    • Cloud Run, App Engine o Cloud Run Functions
    • Connettività ibrida
  • Se utilizzi un bilanciatore del carico delle applicazioni esterno regionale, un bilanciatore del carico delle applicazioni interno tra regioni o un bilanciatore del carico delle applicazioni interno regionale, assicurati di aver configurato un bilanciatore del carico con uno dei seguenti backend supportati:

    • Backend di gruppi di istanze VM
    • Cloud Run
    • Connettività ibrida

Autorizzazioni

Per ottenere le autorizzazioni necessarie per completare questa guida, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:

  • Per creare risorse del bilanciatore del carico come TargetHTTPProxy: Compute Load Balancer Admin (roles/compute.loadBalancerAdmin)
  • Per utilizzare le risorse di Certificate Manager: Certificate Manager Owner (roles/certificatemanager.owner)
  • Per creare componenti di sicurezza e networking: Compute Network Admin (roles/compute.networkAdmin) e Compute Security Admin (roles/compute.securityAdmin)
  • Per creare un progetto (facoltativo): Project Creator (roles/resourcemanager.projectCreator)

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Ottieni il certificato della CA radice

La CA radice ha un certificato autofirmato che devi aggiungere all'archivio di attendibilità. Il certificato della CA radice si trova all'inizio della catena di certificati.

Per ottenere il certificato della CA radice, devi prima creare un pool CA, che è vuoto al momento della creazione. Devi quindi creare una CA radice e aggiungerla al pool CA. La CA root e il pool di CA vengono creati utilizzando Certificate Authority Service come descritto nei passaggi seguenti.

  1. Per creare un pool CA, utilizza il comando gcloud privateca pools create:

    gcloud privateca pools create CA_POOL \
       --location=us-central1
    

    Sostituisci CA_POOL con l'ID o il nome del pool CA principale.

  2. Per creare una CA root e aggiungerla al pool di CA, utilizza il comando gcloud privateca roots create:

    gcloud privateca roots create CA_ROOT \
       --pool=CA_POOL \
       --subject="CN=my-ca, O=Test LLC" \
       --location=us-central1
    

    Sostituisci quanto segue:

    • CA_ROOT: l'ID o il nome della CA principale.
    • CA_POOL: l'ID o il nome del pool CA principale.
  3. Estrai il certificato con codifica PEM che identifica la CA radice.

    gcloud privateca roots describe CA_ROOT \
       --pool=CA_POOL \
       --location=us-central1 \
       --format='value(pemCaCertificates)' > root.cert
    

    Sostituisci quanto segue:

    • CA_ROOT: l'ID o il nome della CA privata.
    • CA_POOL: l'ID o il nome del pool CA principale.

    Il certificato radice (root.cert) deve essere caricato nell'archivio di attendibilità. Questo passaggio verrà eseguito nella sezione seguente.

Per saperne di più sull'utilizzo di Certificate Authority Service per creare un pool di CA e una CA radice, consulta quanto segue:

Formatta il certificato CA radice

Per includere il certificato radice in un archivio di attendibilità, formatta il certificato in una singola riga e memorizzalo in una variabile di ambiente, in modo che possa essere richiamato dal file YAML di configurazione dell'attendibilità.

export ROOT=$(cat root.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')

Crea una risorsa di configurazione di attendibilità

Una configurazione di attendibilità è una risorsa che rappresenta la configurazione dell'infrastruttura a chiave pubblica (PKI) in Certificate Manager.

Per creare una risorsa di configurazione di attendibilità, completa i seguenti passaggi:

Console

  1. Nella console Google Cloud , vai alla pagina Certificate Manager.

    Vai a Certificate Manager

  2. Nella scheda Configurazioni di attendibilità, fai clic su Aggiungi configurazione di attendibilità.

  3. Inserisci un nome per la configurazione.

  4. In Località, seleziona Globale o Regionale.

    La località indica dove è archiviata la risorsa di configurazione di attendibilità. Per i bilanciatori del carico delle applicazioni esterni globali, i bilanciatori del carico delle applicazioni classici e i bilanciatori del carico delle applicazioni interni tra regioni, crea una risorsa di configurazione di attendibilità globale. Per i bilanciatori del carico delle applicazioni esterni regionali e i bilanciatori del carico delle applicazioni interni regionali, crea una risorsa di configurazione di attendibilità regionale.

    Se hai selezionato Regionale, seleziona la regione.

  5. Nella sezione Archivio di attendibilità, fai clic su Aggiungi trust anchor e carica il file del certificato con codifica PEM o copia i contenuti del certificato.

  6. Fai clic su Aggiungi.

  7. Fai clic su Crea.

Verifica che la nuova risorsa di configurazione di attendibilità venga visualizzata nell'elenco delle configurazioni.

gcloud

  1. Crea un file YAML di configurazione di attendibilità (trust_config.yaml) che specifica i parametri di configurazione di attendibilità. In questo esempio, la risorsa di configurazione del trust è un archivio di attendibilità con un singolo trust anchor che rappresenta un certificato radice. Questo certificato radice viene generato utilizzando la CA privata.

    cat << EOF > trust_config.yaml
    name: TRUST_CONFIG_NAME
    trustStores:
    - trustAnchors:
        - pemCertificate: "${ROOT?}"
    EOF
    
  2. Per importare il file YAML di configurazione della attendibilità, utilizza il comando gcloud certificate-manager trust-configs import:

    globale

    Per i bilanciatori del carico delle applicazioni esterni globali, i bilanciatori del carico delle applicazioni classici e i bilanciatori del carico delle applicazioni interni tra regioni, specifica global come località in cui è archiviata la risorsa di configurazione di attendibilità.

    gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME  \
        --source=trust_config.yaml \
        --location=global
    

    Sostituisci quanto segue:

    • TRUST_CONFIG_NAME: il nome della risorsa di configurazione di attendibilità.

    regionale

    Per i bilanciatori del carico delle applicazioni esterni regionali e i bilanciatori del carico delle applicazioni interni regionali, specifica la regione in cui è archiviata la risorsa di configurazione di attendibilità.

    gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME  \
        --source=trust_config.yaml \
        --location=LOCATION
    

    Sostituisci quanto segue:

    • TRUST_CONFIG_NAME: il nome della risorsa di configurazione di attendibilità.
    • LOCATION: la regione in cui è archiviata la risorsa di configurazione di attendibilità. La località predefinita è global.

Crea una risorsa di autenticazione client

Una risorsa di autenticazione client (chiamata anche ServerTLSPolicy) consente di specificare la modalità TLS lato server e la risorsa di configurazione del trust da utilizzare per la convalida dei certificati client. Se il client ha un certificato non valido o non ha nessun certificato per il bilanciatore del carico, clientValidationMode specifica come viene gestita la connessione del client. Per saperne di più, consulta Modalità di convalida del client mTLS.

  • Quando clientValidationMode è impostato su ALLOW_INVALID_OR_MISSING_CLIENT_CERT, tutte le richieste vengono passate al backend anche se la convalida non va a buon fine o se manca il certificato client.
  • Quando clientValidationMode è impostato su REJECT_INVALID, solo le richieste che forniscono un certificato client che può essere convalidato rispetto a una risorsa TrustConfig vengono passate al backend.
  • Quando clientValidationMode è impostato su ALLOW_VALIDATION_RELAXATIONS, solo le richieste che forniscono un certificato client che può essere convalidato rispetto a una risorsa TrustConfig, con l'applicazione delle attenuazioni di convalida specificate (clientValidationRelaxations), vengono passate al backend.

Per creare una risorsa di autenticazione client (ServerTlsPolicy), completa i seguenti passaggi:

Console

  1. Nella console Google Cloud , vai alla pagina Configurazione dell'autenticazione.

    Vai alla configurazione dell'autenticazione

  2. Nella scheda Autenticazione client, fai clic su Crea.

  3. Inserisci un nome per la risorsa di autenticazione client.

  4. In Località, seleziona Globale o Regionale.

    Per i bilanciatori del carico delle applicazioni esterni globali, i bilanciatori del carico delle applicazioni classici e i bilanciatori del carico delle applicazioni interni tra regioni, imposta la località su globale. Per i bilanciatori del carico delle applicazioni esterni regionali e i bilanciatori del carico delle applicazioni interni regionali, imposta la località sulla regione in cui è configurato il bilanciatore del carico.

  5. In Client Authentication mode (Modalità di autenticazione client), seleziona Load balancing (Bilanciamento del carico).

  6. In Modalità di convalida client, seleziona una delle seguenti opzioni:

    • Rifiuto non valido
    • Consenti certificato client non valido o mancante
    • Consenti rilassamenti della convalida

    Per saperne di più, consulta Modalità di convalida del client.

    Se selezioni Consenti rilassamenti della convalida, seleziona uno o più dei seguenti rilassamenti della convalida:

    • Consenti EKU mancante
    • Consenti hashing SHA-1
    • Consenti certificato foglia scaduto
  7. Seleziona la risorsa di configurazione di attendibilità creata in precedenza.

  8. (Facoltativo) Fai clic su Codice equivalente per visualizzare la configurazione Terraform per questa risorsa.

  9. Fai clic su Crea.

Verifica che venga visualizzata l'autenticazione client (ServerTlsPolicy).

gcloud

  1. In base a come vuoi gestire la connessione, seleziona una delle seguenti opzioni per definire la risorsa di autenticazione client (ServerTlsPolicy) in formato YAML.

    • Opzione 1: clientValidationMode è impostato su ALLOW_INVALID_OR_MISSING_CLIENT_CERT.

      globale

      Per i bilanciatori del carico delle applicazioni esterni globali, i bilanciatori del carico delle applicazioni classici e i bilanciatori del carico delle applicazioni interni tra regioni, crea un file YAML che specifichi in modo dichiarativo la modalità di convalida del client e una risorsa di configurazione del trust globale:

      cat << EOF > server_tls_policy.yaml
      name: SERVER_TLS_POLICY_NAME
      mtlsPolicy:
          clientValidationMode: ALLOW_INVALID_OR_MISSING_CLIENT_CERT
          clientValidationTrustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME
      EOF
      

      regionale

      Per i bilanciatori del carico delle applicazioni esterni regionali e i bilanciatori del carico delle applicazioni interni regionali, crea un file YAML che specifichi in modo dichiarativo la modalità di convalida del client e una risorsa di configurazione del trust regionale:

      cat << EOF > server_tls_policy.yaml
      name: SERVER_TLS_POLICY_NAME
      mtlsPolicy:
          clientValidationMode: ALLOW_INVALID_OR_MISSING_CLIENT_CERT
          clientValidationTrustConfig: projects/PROJECT_ID/locations/REGION/trustConfigs/TRUST_CONFIG_NAME
      EOF
      
    • Opzione 2: clientValidationMode è impostato su REJECT_INVALID.

      globale

      Per i bilanciatori del carico delle applicazioni esterni globali, i bilanciatori del carico delle applicazioni classici e i bilanciatori del carico delle applicazioni interni tra regioni, crea un file YAML che specifichi in modo dichiarativo la modalità di convalida del client e una risorsa di configurazione del trust globale:

      cat << EOF > server_tls_policy.yaml
      name: SERVER_TLS_POLICY_NAME
      mtlsPolicy:
          clientValidationMode: REJECT_INVALID
          clientValidationTrustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME
      EOF
      

      regionale

      Per i bilanciatori del carico delle applicazioni esterni regionali e i bilanciatori del carico delle applicazioni interni regionali, crea un file YAML che specifichi in modo dichiarativo la modalità di convalida del client e una risorsa di configurazione del trust regionale:

      cat << EOF > server_tls_policy.yaml
      name: SERVER_TLS_POLICY_NAME
      mtlsPolicy:
            clientValidationMode: REJECT_INVALID
            clientValidationTrustConfig: projects/PROJECT_ID/locations/REGION/trustConfigs/TRUST_CONFIG_NAME
      EOF
      
    • Opzione 3: clientValidationMode è impostato su ALLOW_VALIDATION_RELAXATIONS.

      globale

      Per i bilanciatori del carico delle applicazioni esterni globali, i bilanciatori del carico delle applicazioni classici e i bilanciatori del carico delle applicazioni interni tra regioni, crea un file YAML che specifichi in modo dichiarativo la modalità di convalida del client, una o più attenuazioni della convalida e una risorsa di configurazione del trust globale:

      cat << EOF > server_tls_policy.yaml
      name: SERVER_TLS_POLICY_NAME
      mtlsPolicy:
          clientValidationMode: ALLOW_VALIDATION_RELAXATIONS
          clientValidationRelaxations:
          - VALIDATION_RELAXATION
          - VALIDATION_RELAXATION
          clientValidationTrustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME
      EOF
      

      regionale

      Per i bilanciatori del carico delle applicazioni esterni regionali e i bilanciatori del carico delle applicazioni interni regionali, crea un file YAML che specifichi in modo dichiarativo la modalità di convalida del client, uno o più allentamenti della convalida e una risorsa di configurazione del trust regionale:

      cat << EOF > server_tls_policy.yaml
      name: SERVER_TLS_POLICY_NAME
      mtlsPolicy:
          clientValidationMode: ALLOW_VALIDATION_RELAXATIONS
          clientValidationRelaxations:
          - VALIDATION_RELAXATION
          - VALIDATION_RELAXATION
          clientValidationTrustConfig: projects/PROJECT_ID/locations/REGION/trustConfigs/TRUST_CONFIG_NAME
      EOF
      

    Sostituisci quanto segue:

    • SERVER_TLS_POLICY_NAME: il nome della risorsa di autenticazione client (ServerTlsPolicy).

    • VALIDATION_RELAXATION: uno o più dei seguenti valori: ALLOW_MISSING_EKU, ALLOW_SHA1_HASHING o ALLOW_EXPIRED_LEAF_CERTIFICATE.

    • PROJECT_ID: l'ID del tuo progetto Google Cloud .

    • REGION: per il bilanciatore del carico delle applicazioni esterno regionale o il bilanciatore del carico delle applicazioni interno regionale, utilizza la regione in cui hai configurato il bilanciatore del carico.

    • TRUST_CONFIG_NAME: il nome della risorsa di configurazione di attendibilità creata in precedenza.

  2. Per importare la risorsa di autenticazione client ServerTlsPolicy, utilizza il comando gcloud network-security server-tls-policies import:

    globale

    Per i bilanciatori del carico delle applicazioni esterni globali, i bilanciatori del carico delle applicazioni classici e i bilanciatori del carico delle applicazioni interni tra regioni, imposta il flag --location su global.

    gcloud network-security server-tls-policies import SERVER_TLS_POLICY_NAME \
      --source=server_tls_policy.yaml \
      --location=global
    

    Sostituisci quanto segue:

    SERVER_TLS_POLICY_NAME: il nome della risorsa di autenticazione client (ServerTlsPolicy).

    regionale

    Per i bilanciatori del carico delle applicazioni esterni regionali e i bilanciatori del carico delle applicazioni interni regionali, imposta il flag --location sulla regione in cui è configurato il bilanciatore del carico.

    gcloud network-security server-tls-policies import SERVER_TLS_POLICY_NAME \
      --source=server_tls_policy.yaml \
      --location=LOCATION
    

    Sostituisci quanto segue:

    SERVER_TLS_POLICY_NAME: il nome della risorsa di autenticazione client (ServerTlsPolicy).

  3. (Facoltativo) Per elencare tutte le risorse di autenticazione client (ServerTlsPolicies), utilizza il comando gcloud network-security server-tls-policies list:

    gcloud network-security server-tls-policies list \
      --location=LOCATION
    

    Sostituisci quanto segue:

    LOCATION: per i bilanciatori del carico delle applicazioni esterni globali, i bilanciatori del carico delle applicazioni classici e i bilanciatori del carico delle applicazioni interni tra regioni, utilizza global. Per il bilanciatore del carico delle applicazioni esterno regionale o il bilanciatore del carico delle applicazioni interno regionale, utilizza la regione in cui hai configurato il bilanciatore del carico.

Collega la risorsa di autenticazione client al bilanciatore del carico

Affinché l'autenticazione TLS reciproca (mTLS) funzioni, dopo aver configurato il bilanciatore del carico, devi collegare la risorsa di autenticazione client (ServerTLSPolicy) alla risorsa proxy HTTPS di destinazione del bilanciatore del carico.

Console

  1. Nella console Google Cloud , vai alla pagina Bilanciamento del carico.

    Vai a Bilanciamento del carico

  2. Dall'elenco dei bilanciatori del carico, seleziona quello a cui devi collegare la risorsa di autenticazione client (ServerTLSPolicy).

  3. Fai clic su Modifica.

  4. Nella sezione Configurazione frontend per un frontend HTTPS, espandi la sezione Mostra funzionalità avanzate.

  5. Dall'elenco Autenticazione client, seleziona la risorsa Autenticazione client.

  6. Fai clic su Fine.

  7. Fai clic su Aggiorna.

gcloud

  1. Per elencare tutte le risorse proxy HTTPS di destinazione nel tuo progetto, utilizza il comando gcloud compute target-https-proxies list:

    gcloud compute target-https-proxies list
    

    Prendi nota del nome del proxy HTTPS di destinazione a cui collegare la risorsa ServerTLSPolicy. Questo nome verrà indicato come TARGET_HTTPS_PROXY_NAME nei passaggi seguenti.

  2. Per esportare la configurazione di un proxy HTTPS di destinazione in un file, utilizza il comando gcloud compute target-https-proxies export.

    globale

      gcloud compute target-https-proxies export TARGET_HTTPS_PROXY_NAME \
          --destination=TARGET_PROXY_FILENAME \
          --global
      

    Sostituisci quanto segue:

    • TARGET_HTTPS_PROXY_NAME: il nome del proxy di destinazione.
    • TARGET_PROXY_FILENAME: il nome del file di configurazione del proxy di destinazione in formato YAML. Ad esempio, mtls_target_proxy.yaml.

    regionale

    gcloud compute target-https-proxies export TARGET_HTTPS_PROXY_NAME \
        --destination=TARGET_PROXY_FILENAME \
        --region=REGION
    

    Sostituisci quanto segue:

    • TARGET_HTTPS_PROXY_NAME: il nome del proxy di destinazione.
    • TARGET_PROXY_FILENAME: il nome del file di configurazione del proxy di destinazione in formato YAML. Ad esempio, mtls_target_proxy.yaml
    • REGION: la regione in cui hai configurato il bilanciatore del carico.
  3. Per elencare tutte le risorse di autenticazione client (ServerTlsPolicy), utilizza il comando gcloud network-security server-tls-policies list:

    gcloud network-security server-tls-policies list \
        --location=LOCATION
    

    Sostituisci quanto segue:

    LOCATION: per il bilanciatore del carico delle applicazioni interno tra regioni, il bilanciatore del carico delle applicazioni esterno globale o il bilanciatore del carico delle applicazioni classico, utilizza global. Per il bilanciatore del carico delle applicazioni esterno regionale o il bilanciatore del carico delle applicazioni interno regionale, utilizza la regione in cui hai configurato il bilanciatore del carico.

    Prendi nota del nome della risorsa di autenticazione client (ServerTLSPolicy) per configurare mTLS. Questo nome verrà chiamato SERVER_TLS_POLICY_NAME nel passaggio successivo.

  4. Aggiungi l'autenticazione client (ServerTlsPolicy) al proxy HTTPS di destinazione.

    echo "serverTlsPolicy: //networksecurity.googleapis.com/projects/PROJECT_ID/locations/LOCATION/serverTlsPolicies/SERVER_TLS_POLICY_NAME" >> TARGET_PROXY_FILENAME

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud .
    • LOCATION: per i bilanciatori del carico delle applicazioni esterni globali o i bilanciatori del carico delle applicazioni classici e i bilanciatori del carico delle applicazioni interni tra regioni, utilizza global. Per il bilanciatore del carico delle applicazioni esterno regionale o il bilanciatore del carico delle applicazioni interno regionale, utilizza la regione in cui hai configurato il bilanciatore del carico.
    • SERVER_TLS_POLICY_NAME: il nome della risorsa di autenticazione client (ServerTLSPolicy).
    • TARGET_PROXY_FILENAME: il nome del file di configurazione del proxy di destinazione in formato YAML.
  5. Per importare la configurazione di un proxy HTTPS di destinazione da un file, utilizza il comando gcloud compute target-https-proxies import.

    globale

      gcloud compute target-https-proxies import TARGET_HTTPS_PROXY_NAME \
          --source=TARGET_PROXY_FILENAME \
          --global
      

    Sostituisci quanto segue:

    • TARGET_HTTPS_PROXY_NAME: il nome del proxy di destinazione.
    • TARGET_PROXY_FILENAME: il nome del file di configurazione del proxy di destinazione in formato YAML. Ad esempio, mtls_target_proxy.yaml.

    regionale

      gcloud compute target-https-proxies import TARGET_HTTPS_PROXY_NAME \
          --source=TARGET_PROXY_FILENAME \
          --region=REGION
      

    Sostituisci quanto segue:

    • TARGET_HTTPS_PROXY_NAME: il nome del proxy di destinazione.
    • TARGET_PROXY_FILENAME: il nome del file di configurazione del proxy di destinazione in formato YAML. Ad esempio, mtls_target_proxy.yaml
    • REGION: la regione in cui hai configurato il bilanciatore del carico.

Aggiungi intestazioni mTLS personalizzate

Quando attivi mTLS, puoi trasmettere informazioni sulla connessione mTLS utilizzando intestazioni personalizzate. Puoi anche attivare il logging in modo che gli errori di connessione mTLS vengano acquisiti nei log. Per saperne di più su come configurare il logging, consulta una delle seguenti sezioni:

Aggiungi intestazioni personalizzate mTLS ai servizi di backend

Per i bilanciatori del carico delle applicazioni esterni globali o i bilanciatori del carico delle applicazioni classici, puoi utilizzare le intestazioni personalizzate per passare informazioni sulla connessione mTLS ai servizi di backend.

  1. Per elencare tutti i servizi di backend nel progetto, utilizza il comando gcloud compute backend-services list:

    gcloud compute backend-services list
    

    Prendi nota del nome del servizio di backend per abilitare le intestazioni personalizzate. Questo nome viene indicato come BACKEND_SERVICE nel passaggio successivo.

  2. Per aggiornare il servizio di backend, utilizza il comando gcloud compute backend-services update:

    gcloud compute backend-services update BACKEND_SERVICE \
      --global \
      --custom-request-header='X-Client-Cert-Present:{client_cert_present}' \
      --custom-request-header='X-Client-Cert-Chain-Verified:{client_cert_chain_verified}' \
      --custom-request-header='X-Client-Cert-Error:{client_cert_error}' \
      --custom-request-header='X-Client-Cert-Hash:{client_cert_sha256_fingerprint}' \
      --custom-request-header='X-Client-Cert-Serial-Number:{client_cert_serial_number}' \
      --custom-request-header='X-Client-Cert-SPIFFE:{client_cert_spiffe_id}' \
      --custom-request-header='X-Client-Cert-URI-SANs:{client_cert_uri_sans}' \
      --custom-request-header='X-Client-Cert-DNSName-SANs:{client_cert_dnsname_sans}' \
      --custom-request-header='X-Client-Cert-Valid-Not-Before:{client_cert_valid_not_before}' \
      --custom-request-header='X-Client-Cert-Valid-Not-After:{client_cert_valid_not_after}'
    

Aggiungi intestazioni personalizzate mTLS alla mappa URL

Per il bilanciatore del carico delle applicazioni interno tra regioni, il bilanciatore del carico delle applicazioni esterno regionale o il bilanciatore del carico delle applicazioni interno regionale, puoi utilizzare le intestazioni personalizzate per passare le informazioni sulla connessione mTLS alla mappa URL.

Per elencare tutte le mappe URL nel progetto, utilizza il comando gcloud compute url-maps list:

   gcloud compute url-maps list
   

Prendi nota del nome della mappa URL per abilitare le intestazioni personalizzate. Questo nome verrà indicato come URL_MAP_NAME nel passaggio successivo.

globale

Per modificare la mappa URL di un bilanciatore del carico delle applicazioni interno tra regioni, utilizza il comando gcloud compute url-maps edit:

   gcloud compute url-maps edit URL_MAP_NAME --global
   

Di seguito è riportato un file YAML di esempio che mostra come utilizzare le variabili nelle intestazioni delle richieste personalizzate (requestHeadersToAdd). Puoi utilizzare le stesse variabili per inviare intestazioni delle risposte personalizzate (responseHeadersToAdd).

   headerAction:
      requestHeadersToAdd:
      - headerName: "X-Client-Cert-Present"
        headerValue: "{client_cert_present}"
      - headerName: "X-Client-Cert-Chain-Verified"
        headerValue: "{client_cert_chain_verified}"
      - headerName: "X-Client-Cert-Error"
        headerValue: "{client_cert_error}"
      - headerName: "X-Client-Cert-Hash"
        headerValue: "{client_cert_sha256_fingerprint}"
      - headerName: "X-Client-Cert-Serial-Number"
        headerValue: "{client_cert_serial_number}"
      - headerName: "X-Client-Cert-SPIFFE"
        headerValue: "{client_cert_spiffe_id}"
      - headerName: "X-Client-Cert-URI-SANs"
        headerValue: "{client_cert_uri_sans}"
      - headerName: "X-Client-Cert-DNSName-SANs"
        headerValue: "{client_cert_dnsname_sans}"
      - headerName: "X-Client-Cert-Valid-Not-Before"
        headerValue: "{client_cert_valid_not_before}"
      - headerName: "X-Client-Cert-Valid-Not-After"
        headerValue: "{client_cert_valid_not_after}"
      - headerName: "X-Client-Cert-Issuer-Dn"
        headerValue: "{client_cert_issuer_dn}"
      - headerName: "X-Client-Cert-Subject-Dn"
        headerValue: "{client_cert_subject_dn}"
      - headerName: "X-Client-Cert-Leaf"
        headerValue: "{client_cert_leaf}"
      - headerName: "X-Client-Cert-Chain"
        headerValue: "{client_cert_chain}"
   

regionale

Per modificare la mappa URL di un bilanciatore del carico delle applicazioni esterno regionale o di un bilanciatore del carico delle applicazioni interno regionale, utilizza il comando gcloud compute url-maps edit:

   gcloud compute url-maps edit URL_MAP_NAME --region=REGION
   

Di seguito è riportato un file YAML di esempio che mostra come utilizzare le variabili nelle intestazioni delle richieste personalizzate (requestHeadersToAdd). Puoi utilizzare le stesse variabili per inviare intestazioni delle risposte personalizzate (responseHeadersToAdd).

   defaultService: regions/REGION/backendServices/BACKEND_SERVICE_1
      name: regional-lb-map
      region: region/REGION
   headerAction:
      requestHeadersToAdd:
      - headerName: "X-Client-Cert-Present"
        headerValue: "{client_cert_present}"
      - headerName: "X-Client-Cert-Chain-Verified"
        headerValue: "{client_cert_chain_verified}"
      - headerName: "X-Client-Cert-Error"
        headerValue: "{client_cert_error}"
      - headerName: "X-Client-Cert-Hash"
        headerValue: "{client_cert_sha256_fingerprint}"
      - headerName: "X-Client-Cert-Serial-Number"
        headerValue: "{client_cert_serial_number}"
      - headerName: "X-Client-Cert-SPIFFE"
        headerValue: "{client_cert_spiffe_id}"
      - headerName: "X-Client-Cert-URI-SANs"
        headerValue: "{client_cert_uri_sans}"
      - headerName: "X-Client-Cert-DNSName-SANs"
        headerValue: "{client_cert_dnsname_sans}"
      - headerName: "X-Client-Cert-Valid-Not-Before"
        headerValue: "{client_cert_valid_not_before}"
      - headerName: "X-Client-Cert-Valid-Not-After"
        headerValue: "{client_cert_valid_not_after}"
      - headerName: "X-Client-Cert-Issuer-Dn"
        headerValue: "{client_cert_issuer_dn}"
      - headerName: "X-Client-Cert-Subject-Dn"
        headerValue: "{client_cert_subject_dn}"
      - headerName: "X-Client-Cert-Leaf"
        headerValue: "{client_cert_leaf}"
      - headerName: "X-Client-Cert-Chain"
        headerValue: "{client_cert_chain}"
   

Ottieni un certificato client utilizzando una CSR

Questa sezione fornisce un'opzione di configurazione aggiuntiva per generare un certificato client (foglia) firmato dal certificato della CA principale.

Per ottenere un certificato client, genera una richiesta di firma del certificato (CSR) e inviala al pool di CA.

  1. Crea un file di configurazione OpenSSL per generare la CSR per il certificato client.

    Il seguente file di configurazione (client.config) contiene la sezione [extension_requirements], che specifica le estensioni X.509 da includere nella CSR. Per scoprire di più sui requisiti per i certificati client, vedi Requisiti dei certificati.

    cat > client.config << EOF
    [req]
    default_bits              = 2048
    req_extensions            = extension_requirements
    distinguished_name        = dn_requirements
    prompt                    = no
    
    [extension_requirements]
    basicConstraints          = critical, CA:FALSE
    keyUsage                  = critical, nonRepudiation, digitalSignature, keyEncipherment
    extendedKeyUsage          = clientAuth
    
    [dn_requirements]
    countryName               = US
    stateOrProvinceName       = California
    localityName              = San Francisco
    0.organizationName        = example
    organizationalUnitName    = test
    commonName                = test.example.com
    emailAddress              = test@example.com
    
    EOF
    
  2. Esegui questo comando openssl per generare una CSR (csr.pem) e una chiave privata corrispondente (key.pem).

    openssl req -newkey rsa:2048 -nodes \
        -config client.config \
        -keyout key.pem \
        -out csr.pem
    
  3. Esegui il seguente comando gcloud privateca certificates create per inviare la CSR e richiedere il certificato client X.509 alla CA nel pool di CA.

    gcloud privateca certificates create \
         --issuer-pool CA_POOL \
         --issuer-location=us-central1 \
         --csr csr.pem \
         --cert-output-file CERT_FILENAME
    

    Sostituisci quanto segue:

    • CA_POOL: l'ID o il nome del pool CA.
    • CERT_FILENAME: il file della catena di certificati con codifica PEM, ordinato dalla foglia alla radice.
  4. Invia una richiesta HTTPS sicura all'indirizzo IP del bilanciatore del carico utilizzando il certificato SSL lato client. Il client presenta il proprio certificato per autenticarsi presso il bilanciatore del carico.

    curl -v --key key.pem --cert CERT_FILENAME https://IP_ADDRESS
    
    

    Sostituisci quanto segue:

    • CERT_FILENAME: il file della catena di certificati con codifica PEM ordinato dalla foglia alla radice.
    • IP_ADDRESS: l'indirizzo IP del bilanciatore del carico.

Passaggi successivi