Esegui il deployment di un certificato globale gestito da Google con autorizzazione DNS


Questo tutorial illustra la procedura di deployment del certificato utilizzando un certificato gestito da Google con autorizzazione DNS come esempio.

I seguenti bilanciatori del carico supportano i certificati gestiti da Google con autorizzazione DNS:

  • Bilanciatore del carico delle applicazioni esterno globale
  • Bilanciatore del carico delle applicazioni classico
  • Bilanciatore del carico delle applicazioni interno tra regioni
  • Bilanciatore del carico di rete proxy esterno globale

Per un confronto dei tipi di autorizzazione di dominio supportati, consulta Autorizzazioni di dominio.

Se vuoi eseguire la migrazione di un certificato esistente a Certificate Manager, segui la procedura descritta in Eseguire la migrazione dei certificati a Certificate Manager.

Obiettivi

Questo tutorial mostra come completare le seguenti attività:

  • Crea un certificato gestito da Google emesso da un certificato pubblicamente attendibile autorità di certificazione con autorizzazione DNS mediante Gestione certificati.
  • Esegui il deployment del certificato in un bilanciatore del carico supportato utilizzando un proxy HTTPS di destinazione.

Per ulteriori informazioni sul processo di deployment dei certificati, consulta Panoramica.

Prima di iniziare

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Per il deployment del certificato è necessaria la versione 465.0.0 o successiva di gcloud CLI. Per controllare la versione di gcloud CLI, esegui questo comando:

    gcloud --version
    
  3. Per aggiornare gcloud CLI, esegui il seguente comando.

    gcloud components update
    
  4. Per completare le attività di questo tutorial, assicurati di disporre dei seguenti ruoli:

    • Proprietario Certificate Manager: obbligatorio per creare e gestire Risorse di Gestione certificati.
    • Amministratore del bilanciatore del carico Compute o Amministratore di rete Compute: obbligatorio per creare e gestire il proxy di destinazione HTTPS.
    • Amministratore DNS: obbligatorio se vuoi utilizzare Cloud DNS come soluzione DNS.

    Per ulteriori informazioni, consulta le seguenti risorse:

Crea un certificato gestito da Google con autorizzazione DNS

Completa i passaggi di questa sezione per creare un'autorizzazione DNS e un certificato gestito da Google che fa riferimento a questa autorizzazione DNS.

Crea un'autorizzazione DNS

Crea l'autorizzazione DNS come descritto in questa sezione. Se stai creando un'autorizzazione DNS per un certificato con caratteri jolly, ad esempio *.myorg.example.com, configura l'autorizzazione DNS per il dominio principale, ad esempio myorg.example.com.

gcloud

gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \
    --domain="DOMAIN_NAME" \
gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME

Il tipo di autorizzazione DNS predefinito per un certificato gestito da Google globale è FIXED_RECORD. Per usare l'autorizzazione DNS per progetto, esegui questo comando:

gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \
    --domain="DOMAIN_NAME" \
    --type="PER_PROJECT_RECORD" \
gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME

Sostituisci quanto segue:

  • AUTHORIZATION_NAME: il nome dell'autorizzazione DNS.
  • DOMAIN_NAME: il nome del dominio per cui sei creando questa autorizzazione DNS. Il nome di dominio deve essere un nome completo nome di dominio, ad esempio myorg.example.com.

Il comando restituisce un output simile al seguente. Utilizza il record CNAME dell'output per aggiungerlo alla configurazione DNS.

createTime: '2022-01-14T13:35:00.258409106Z'
dnsResourceRecord:
data: 0e40fc77-a37d-4eb8-8fe1-eea2e18d12d9.4.authorize.certificatemanager.goog.
name: _acme-challenge.myorg.example.com.
type: CNAME
domain: myorg.example.com
name: projects/myProject/locations/global/dnsAuthorizations/myAuthorization
updateTime: '2022-01-14T13:35:01.571086137Z'

Terraform

Per creare un'autorizzazione DNS, puoi utilizzare un google_certificate_manager_dns_authorization risorsa.

resource "google_certificate_manager_dns_authorization" "default" {
  name        = "${local.name}-dnsauth-${random_id.tf_prefix.hex}"
  description = "The default dns auth"
  domain      = local.domain
  labels = {
    "terraform" : true
  }
}

Per scoprire come applicare o rimuovere una configurazione Terraform, consulta: Comandi Terraform di base.

Aggiungi il record CNAME alla configurazione DNS

Se utilizzi Google Cloud per gestire il tuo DNS, completa i passaggi in questa sezione. In caso contrario, consulta la documentazione della soluzione DNS di terze parti.

Prima di completare i passaggi descritti in questa sezione, assicurati di aver creato una zona DNS pubblica.

Quando crei un'autorizzazione DNS, il comando gcloud CLI restituisce il record CNAME corrispondente. Devi aggiungere questo record CNAME al tuo DNS configurazione nella zona DNS del dominio di destinazione, come segue:

gcloud

  1. Avvia la transazione del record DNS:

    gcloud dns record-sets transaction start --zone="DNS_ZONE_NAME"
    

    Sostituisci DNS_ZONE_NAME con il nome della zona DNS di destinazione.

  2. Aggiungi il record CNAME alla zona DNS di destinazione:

    gcloud dns record-sets transaction add CNAME_RECORD \
       --name="_acme-challenge.DOMAIN_NAME." \
       --ttl="30" \
       --type="CNAME" \
       --zone="DNS_ZONE_NAME"
    

    Sostituisci quanto segue:

    • CNAME_RECORD: il valore dei dati completo del record CNAME fornito dal comando Google Cloud CLI che ha creato l'autorizzazione DNS corrispondente.
    • DOMAIN_NAME: il nome del dominio di destinazione. La il nome di dominio deve essere un nome di dominio completo, come myorg.example.com. Devi anche includere il punto finale dopo il nome di dominio di destinazione.
    • DNS_ZONE_NAME: il nome della zona DNS di destinazione.

    Vedi il seguente esempio:

    gcloud dns record-sets transaction add 0e40fc77-a37d-4eb8-8fe1-eea2e18d12d9.4.authorize.certificatemanager.goog. \
       --name="_acme-challenge.myorg.example.com." \
       --ttl="30" \
       --type="CNAME" \
       --zone="myorg-example-com"
    
  3. Esegui la transazione del record DNS per salvare le modifiche:

    gcloud dns record-sets transaction execute --zone="DNS_ZONE_NAME"
    

    Sostituisci DNS_ZONE_NAME con il nome del DNS di destinazione zona di destinazione.

Terraform

Per aggiungere il record CNAME alla configurazione DNS, puoi utilizzare una risorsa google_dns_record_set.

resource "google_dns_record_set" "cname" {
  name         = google_certificate_manager_dns_authorization.default.dns_resource_record[0].name
  managed_zone = google_dns_managed_zone.default.name
  type         = google_certificate_manager_dns_authorization.default.dns_resource_record[0].type
  ttl          = 300
  rrdatas      = [google_certificate_manager_dns_authorization.default.dns_resource_record[0].data]
}

Crea un certificato gestito da Google che fa riferimento all'autorizzazione DNS

Per creare un certificato gestito da Google che fa riferimento all'autorizzazione DNS creata nei passaggi precedenti, svolgi i seguenti passaggi:

Console

  1. Nella console Google Cloud, vai alla pagina Gestore certificati.

    Vai a Gestore dei certificati

  2. Nella pagina visualizzata, seleziona la scheda Certificati.

  3. Fai clic su Aggiungi certificato.

  4. Inserisci un nome per il certificato.

    Questo nome deve essere univoco per il progetto.

  5. (Facoltativo) Inserisci la Descrizione del certificato. La descrizione consente di identificare un certificato specifico in un secondo momento.

  6. Per Località, scegli Globale.

  7. In Ambito, scegli una delle seguenti opzioni:

    1. Predefinito: scegli l'impostazione predefinita per un Bilanciatore del carico delle applicazioni esterno globale, un Bilanciatore del carico delle applicazioni classico o un Bilanciatore del carico di rete proxy esterno globale
    2. Tutte le regioni: scegli tutte le regioni per un bilanciatore del carico delle applicazioni interno tra regioni
  8. In Tipo di certificato, scegli Crea certificato gestito da Google.

  9. In Tipo di autorità di certificazione, scegli Pubblica.

  10. Specifica i nomi di dominio del certificato. Inserisci un valore delimitato da virgole dei domini di destinazione. Inoltre, ogni nome di dominio deve essere un nome di dominio completo, ad esempio myorg.example.com.

  11. In Authorization type (Tipo di autorizzazione), scegli DNS Authorization (Autorizzazione DNS). Se il nome di dominio ha un'autorizzazione DNS associata, verrà rilevato automaticamente. Se al nome di dominio non è associata un'autorizzazione DNS:

    1. Fai clic su Crea autorizzazione DNS mancante per visualizzare la finestra di dialogo Crea DNS. Finestra di dialogo di autorizzazione.
    2. Nel campo Nome autorizzazione DNS, specifica il nome dell'autorizzazione DNS.
    3. Fai clic su Crea autorizzazione DNS. Verifica che il nome DNS sia associato al nome di dominio.
  12. Specifica un'etichetta da associare al certificato. Se necessario, puoi aggiungere più di un'etichetta. Per aggiungere un'etichetta, fai clic sul pulsante Aggiungi etichetta e specifica un key e un value per l'etichetta.

  13. Fai clic su Crea. Verifica che il nuovo certificato sia presente nell'elenco dei certificati.

gcloud

Per un bilanciatore del carico delle applicazioni esterno globale, un bilanciatore del carico delle applicazioni classico o Bilanciatore del carico di rete proxy esterno globale

Esegui questo comando:

gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --domains=DOMAIN_NAME \
    --dns-authorizations=AUTHORIZATION_NAME

Sostituisci quanto segue:

  • CERTIFICATE_NAME: un nome univoco del certificato.
  • DOMAIN_NAME: il dominio di destinazione del certificato. Il nome di dominio deve essere un nome di dominio completo, ad esempio myorg.example.com.
  • AUTHORIZATION_NAME: il nome dell'autorizzazione DNS che hai creato per questo certificato.

Per creare un certificato gestito da Google con un nome di dominio con caratteri jolly, utilizza la . Un certificato per nomi di dominio con caratteri jolly copre tutti i sottodomini di primo livello di un determinato dominio.

gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --domains="*.DOMAIN_NAME,DOMAIN_NAME" \
    --dns-authorizations=AUTHORIZATION_NAME

Sostituisci quanto segue:

  • CERTIFICATE_NAME: un nome univoco del certificato.
  • DOMAIN_NAME: il dominio di destinazione del certificato. Il prefisso asterisco (*.) indica un certificato jolly. Il dominio deve essere un nome di dominio completo, ad esempio myorg.example.com.
  • AUTHORIZATION_NAME: il nome dell'autorizzazione DNS che hai creato per questo certificato.

Per un bilanciatore del carico delle applicazioni interno tra regioni

Esegui questo comando:

gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --domains=DOMAIN_NAME \
    --dns-authorizations=AUTHORIZATION_NAME \
    --scope=all-regions

Sostituisci quanto segue:

  • CERTIFICATE_NAME: un nome univoco del certificato.
  • DOMAIN_NAME: il dominio di destinazione del certificato. Il nome di dominio deve essere un nome di dominio completo, ad esempio myorg.example.com.
  • AUTHORIZATION_NAME: il nome dell'autorizzazione DNS che hai creato per questo certificato.

Per creare un certificato gestito da Google con un nome di dominio jolly, utilizza il seguente comando. Un certificato per nomi di dominio con caratteri jolly copre tutti i sottodomini di primo livello di un determinato dominio.

gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --domains="*.DOMAIN_NAME,DOMAIN_NAME" \
    --dns-authorizations=AUTHORIZATION_NAME \
    --scope=all-regions

Sostituisci quanto segue:

  • CERTIFICATE_NAME: un nome univoco del certificato.
  • DOMAIN_NAME: il dominio di destinazione del certificato. La Il prefisso asterisco (*.) indica un certificato con caratteri jolly. Il nome di dominio deve essere un nome di dominio completo, ad esempio myorg.example.com.
  • AUTHORIZATION_NAME: il nome dell'autorizzazione DNS che hai creato per questo certificato.

Terraform

Utilizza una risorsa google_certificate_manager_certificate.

resource "google_certificate_manager_certificate" "root_cert" {
  name        = "${local.name}-rootcert-${random_id.tf_prefix.hex}"
  description = "The wildcard cert"
  managed {
    domains = [local.domain, "*.${local.domain}"]
    dns_authorizations = [
      google_certificate_manager_dns_authorization.default.id
    ]
  }
  labels = {
    "terraform" : true
  }
}

Verifica che il certificato sia attivo

Utilizza il seguente comando per verificare che il certificato stesso sia attivo prima di eseguire il deployment nel bilanciatore del carico. Potrebbero essere necessarie diverse ore prima che per impostare lo stato del certificato in ACTIVE.

gcloud certificate-manager certificates describe CERTIFICATE_NAME

Sostituisci CERTIFICATE_NAME con il nome del certificato gestito da Google di destinazione.

Il comando restituisce un output simile al seguente:

expireTime: '2022-05-07T05:03:49Z'
managed:
  authorizationAttemptInfo:
  -   domain: myorg.example.com
    state: AUTHORIZED
  dnsAuthorizations:
  -   projects/my-project/locations/global/dnsAuthorizations/myAuth
  domains:
  -   myorg.example.com
  state: ACTIVE
name: projects/myProject/locations/global/certificates/myCert
pemCertificate: |
  -----BEGIN CERTIFICATE-----
  [...]
  -----END CERTIFICATE-----
sanDnsnames:
-   myorg.example.com
updateTime: '2021-10-20T12:19:55.083385630Z'

Esegui il deployment del certificato su un bilanciatore del carico

Questa sezione illustra i passaggi necessari per eseguire il deployment a un bilanciatore del carico.

Prima di procedere con le attività in questa sezione, assicurati di aver completato quelle elencate nella sezione Creare un certificato gestito da Google con autorizzazione DNS.

A seconda del tipo di bilanciatore del carico, puoi implementare i certificati come segue:

Esegui il deployment del certificato utilizzando una mappa di certificati

Questa sezione descrive i passaggi per implementare un certificato utilizzando una mappa di certificati.

Crea una mappa di certificati

Crea una mappa di certificati che fa riferimento alla voce della mappa dei certificati associato al certificato:

gcloud

gcloud certificate-manager maps create CERTIFICATE_MAP_NAME

Sostituisci CERTIFICATE_MAP_NAME con il nome del target mappa di certificati.

Terraform

Per creare una mappa dei certificati, puoi utilizzare una risorsa google_certificate_manager_certificate_map.

resource "google_certificate_manager_certificate_map" "certificate_map" {
  name        = "${local.name}-certmap-${random_id.tf_prefix.hex}"
  description = "${local.domain} certificate map"
  labels = {
    "terraform" : true
  }
}

Creare una voce della mappa dei certificati

Crea una voce della mappa di certificati e associala al tuo certificato nonché alla tua mappa di certificati:

gcloud

gcloud certificate-manager maps entries create CERTIFICATE_MAP_ENTRY_NAME \
    --map="CERTIFICATE_MAP_NAME" \
    --certificates="CERTIFICATE_NAME" \
    --hostname="HOSTNAME"

Sostituisci quanto segue:

  • CERTIFICATE_MAP_ENTRY_NAME: un nome univoco del voce mappa di certificati
  • CERTIFICATE_MAP_NAME: il nome del certificato mappato a allegata da questa voce di mappa di certificati
  • CERTIFICATE_NAME: il nome del certificato che vuoi ottenere da associare a questa voce della mappa di certificati
  • HOSTNAME: il nome host da associare a questa voce della mappa dei certificati.

    Se crei certificati con un dominio con caratteri jolly, specifica anche il nome host con un carattere jolly, ad esempio *.example.com.

Terraform

Per creare una voce della mappa dei certificati, puoi utilizzare una risorsa google_certificate_manager_certificate_map_entry.

resource "google_certificate_manager_certificate_map_entry" "first_entry" {
  name        = "${local.name}-first-entry-${random_id.tf_prefix.hex}"
  description = "example certificate map entry"
  map         = google_certificate_manager_certificate_map.certificate_map.name
  labels = {
    "terraform" : true
  }
  certificates = [google_certificate_manager_certificate.root_cert.id]
  hostname     = local.domain
}

Verifica che la voce della mappa di certificati sia attiva

Utilizza il comando seguente per verificare che la voce della mappa di certificati sia attiva prima di collegare la mappa di certificati corrispondente al proxy di destinazione:

gcloud certificate-manager maps entries describe CERTIFICATE_MAP_ENTRY_NAME \
    --map="CERTIFICATE_MAP_NAME"

Sostituisci quanto segue:

  • CERTIFICATE_MAP_ENTRY_NAME: il nome della voce della mappa di certificati di destinazione
  • CERTIFICATE_MAP_NAME: il nome del certificato mappato a allegata da questa voce di mappa di certificati

Il comando restituisce un output simile al seguente:

certificates:
createTime: '2021-09-06T10:01:56.229472109Z'
hostname: example.com
name: projects/my-project/locations/global/certificateMaps/myCertMap/certificateMapEntries/myCertMapEntry
state: ACTIVE
updateTime: '2021-09-06T10:01:58.277031787Z'

Collega la mappa dei certificati al proxy di destinazione

Collega la mappa dei certificati configurata al proxy di destinazione:

gcloud

  1. Nella console Google Cloud, vai alla pagina Proxy di destinazione.

    Vai a Proxy di destinazione

  2. Prendi nota del nome del proxy di destinazione.

  3. Collega la mappa di certificati al proxy di destinazione:

    gcloud compute target-https-proxies update PROXY_NAME \
        --certificate-map="CERTIFICATE_MAP_NAME" \
        --global
    

    Sostituisci quanto segue:

    • PROXY_NAME: il nome del proxy di destinazione.
    • CERTIFICATE_MAP_NAME: il nome della mappa di certificati che fa riferimento alla voce della mappa di certificati e al certificato associato.

Terraform

Per allegare la mappa di certificati al proxy di destinazione, puoi utilizzare una risorsa google_compute_target_https_proxy.

Durante la configurazione di un proxy di destinazione, se colleghi direttamente i certificati TLS (SSL) e anche tramite una mappa di certificati, il proxy utilizza i certificati a cui viene fatto riferimento dalla mappa di certificati e ignora i certificati TLS (SSL) direttamente collegati.

Allega il certificato direttamente al proxy di destinazione

Per allegare il certificato direttamente al proxy, esegui il seguente comando:

gcloud compute target-https-proxies update PROXY_NAME \
    --url-map=URL_MAP \
    --global \
    --certificate-manager-certificates=CERTIFICATE_NAME

Sostituisci quanto segue:

  • PROXY_NAME: un nome univoco del proxy.
  • URL_MAP: il nome della mappa URL. Hai creato la mappa URL quando hai creato il bilanciatore del carico.
  • CERTIFICATE_NAME: il nome del certificato.

Esegui la pulizia

Per annullare le modifiche apportate in questo tutorial, completa i seguenti passaggi passaggi:

  1. Scollega la mappa di certificati dal proxy.

    Prima di scollegare la mappa dei certificati, tieni presente quanto segue:

    • Se sono presenti certificati TLS (SSL) collegati direttamente al proxy, il disaccoppiamento della mappa dei certificati fa sì che il proxy riprenda a utilizzare i certificati TLS (SSL) collegati direttamente.
    • Se non sono presenti certificati TLS (SSL) collegati direttamente al proxy, la mappa dei certificati non può essere scollegata dal proxy. Devi prima collegare almeno un certificato TLS (SSL) direttamente al proxy prima puoi scollegare la mappa di certificati.

    Per scollegare la mappa di certificati, esegui questo comando:

    gcloud compute target-https-proxies update PROXY_NAME \
        --clear-certificate-map
    

    Sostituisci PROXY_NAME con il nome del proxy di destinazione.

  2. Elimina la voce della mappa di certificati dalla mappa di certificati:

    gcloud certificate-manager maps entries delete CERTIFICATE_MAP_ENTRY_NAME \
        --map="CERTIFICATE_MAP_NAME"
    

    Sostituisci quanto segue:

    • CERTIFICATE_MAP_ENTRY_NAME: il nome del target della mappa di certificati.
    • CERTIFICATE_MAP_NAME: il nome del target mappa di certificati.
  3. Elimina la mappa dei certificati:

    gcloud certificate-manager maps delete CERTIFICATE_MAP_NAME
    

    Sostituisci CERTIFICATE_MAP_NAME con il nome della mappa dei certificati di destinazione.

  4. Elimina il certificato gestito da Google:

    gcloud certificate-manager certificates delete CERTIFICATE_NAME
    

    Sostituisci CERTIFICATE_NAME con il nome del target certificato.

  5. Elimina l'autorizzazione DNS:

    gcloud certificate-manager dns-authorizations delete AUTHORIZATION_NAME
    

    Sostituisci AUTHORIZATION_NAME con il nome del target Autorizzazione DNS.

Passaggi successivi