Eseguire la migrazione dei certificati di terze parti a Gestore certificati


Questo tutorial mostra come eseguire la migrazione dei certificati di terze parti a un bilanciatore del carico utilizzando Certificate Manager.Google Cloud

Per eseguire la migrazione dei certificati di terze parti senza tempi di riposo, crea lo stesso numero di certificati gestiti da Google dei certificati di terze parti. Successivamente, consolida i certificati in un'unica mappa dei certificati e esegui il deployment della mappa dei certificati su un bilanciatore del carico utilizzando il DNS. Infine, aggiorna i record DNS A e AAAA in modo che puntino all'indirizzo IP del bilanciatore del carico.

Per trovare l'elenco dei bilanciatori del carico supportati, consulta la Panoramica di Certificate Manager.

Obiettivi

Questo tutorial mostra come completare le seguenti attività:

  • Crea certificati gestiti da Google con autorizzazione DNS.
  • Crea una mappa dei certificati per tutti i certificati.
  • Esegui il deployment dei certificati nel bilanciatore del carico utilizzando il DNS.
  • Aggiorna i record DNS A e AAAA in modo che puntino all'indirizzo IP del bilanciatore del carico.

Prima di iniziare

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Compute Engine, Certificate Manager APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the Compute Engine, Certificate Manager APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init

Ruoli obbligatori

Per completare le attività di questo tutorial, assicurati di disporre dei seguenti ruoli:

  • Proprietario di Certificate Manager (roles/certificatemanager.owner)

    Obbligatorio per creare e gestire le risorse di Certificate Manager.

  • Amministratore bilanciatore del carico Compute (roles/compute.loadBalancerAdmin) o Amministratore rete Compute (roles/compute.networkAdmin)

    Obbligatorio per creare e gestire il proxy di destinazione HTTPS.

  • Amministratore DNS (roles/dns.admin)

    Obbligatorio se vuoi utilizzare Cloud DNS come soluzione DNS.

Per ulteriori informazioni, consulta le seguenti risorse:

Creare certificati gestiti da Google

Crea lo stesso numero di certificati gestiti da Google con autorizzazione DNS (opzione consigliata) o certificati autogestiti rispetto ai certificati di terze parti. Prima di creare i certificati, crea un'autorizzazione DNS e aggiungi il record CNAME alla zona DNS autorevole per il tuo dominio.

Questa sezione elenca i passaggi e i comandi per creare certificati globali gestiti da Google. Per creare certificati gestiti da Google a livello di regione o tra regioni, consulta Creare un certificato gestito da Google.

Crea un'autorizzazione DNS

Un'autorizzazione DNS copre un solo nome di dominio. Devi creare un'autorizzazione DNS distinta per ogni nome di dominio che vuoi utilizzare con il certificato di destinazione.

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.

Console

Puoi creare un'autorizzazione DNS o collegarne una esistente quando crei un certificato. Per ulteriori informazioni, consulta Creare un certificato gestito da Google che fa riferimento all'autorizzazione DNS.

gcloud

Per creare un'autorizzazione DNS, utilizza il comando certificate-manager dns-authorizations create:

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

Sostituisci quanto segue:

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

I certificati gestiti da Google a livello globale utilizzano FIXED_RECORD come tipo di autorizzazione DNS predefinito. Per utilizzare l'autorizzazione DNS PER_PROJECT_RECORD, esegui il seguente comando:

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

Dopo aver creato l'autorizzazione DNS, verificala con il comando certificate-manager dns-authorizations describe:

gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME \

L'output è simile al seguente. Nell'output, individua la riga dnsResourceRecord e recupera il record CNAME (data, name e type) da aggiungere 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 una risorsa google_certificate_manager_dns_authorization.

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.

API

Per creare un'autorizzazione DNS, invia una richiesta POST al metodo dnsAuthorizations.create:

POST /v1/projects/PROJECT_ID/locations/global/dnsAuthorizations?dns_authorization_id=AUTHORIZATION_NAME"
{
  "domain": "DOMAIN_NAME",
  "type": "PER_PROJECT_RECORD" //optional
}

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del progetto Google Cloud.
  • AUTHORIZATION_NAME: il nome dell'autorizzazione DNS.
  • DOMAIN_NAME: il nome del dominio di destinazione per cui stai creando questa autorizzazione DNS. Il nome di dominio deve essere un nome di dominio completo, ad esempio myorg.example.com.

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

Per creare un certificato gestito da Google a livello globale che faccia riferimento all'autorizzazione DNS creata nei passaggi precedenti:

Console

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

    Vai a Gestore certificati

  2. Nella scheda Certificati, fai clic su Aggiungi certificato.

  3. Nel campo Nome certificato, inserisci un nome univoco per il certificato.

  4. (Facoltativo) Nel campo Descrizione, inserisci una descrizione per il certificato. La descrizione ti consente di identificare il certificato.

  5. Per Località, seleziona Globale.

  6. In Ambito, seleziona Predefinito.

  7. In Tipo di certificato, seleziona Crea un certificato gestito da Google.

  8. In Tipo di autorità di certificazione, seleziona Pubblica.

  9. Nel campo Nomi di dominio, specifica un elenco di nomi di dominio del certificato separati da virgole. Ogni nome di dominio deve essere un nome di dominio completo, ad esempio myorg.example.com. Il nome di dominio può anche essere un nome di dominio con caratteri jolly, ad esempio *.example.com.

  10. In Tipo di autorizzazione, seleziona Autorizzazione DNS.

    La pagina elenca le autorizzazioni DNS dei nomi di dominio. Se un nome di dominio non ha un'autorizzazione DNS associata, segui questi passaggi per crearne una:

    1. Fai clic su Crea autorizzazione DNS mancante.
    2. Nel campo Nome autorizzazione DNS, specifica il nome dell'autorizzazione DNS. Il tipo di autorizzazione DNS predefinito è FIXED_RECORD. Per gestire in modo indipendente i certificati in più progetti, seleziona la casella di controllo Autorizzazione per progetto.
    3. Fai clic su Crea autorizzazione DNS.
  11. Nel campo Etichette, specifica le etichette da associare al certificato. Per aggiungere un'etichetta, fai clic su Aggiungi etichetta e specifica una chiave e un valore per l'etichetta.

  12. Fai clic su Crea.

    Il nuovo certificato viene visualizzato nell'elenco dei certificati.

gcloud

Per creare un certificato globale gestito da Google con autorizzazione DNS, esegui il comando certificate-manager certificates create con il flag dns-authorizations:

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

Sostituisci quanto segue:

  • CERTIFICATE_NAME: il nome del certificato.
  • DOMAIN_NAME: il nome del dominio di destinazione. Il nome di dominio deve essere un nome di dominio completo, ad esempio myorg.example.com, o un dominio con carattere jolly, ad esempio *.myorg.example.com. Il prefisso asterisco (*.) indica un certificato jolly.
  • AUTHORIZATION_NAMES: un elenco separato da virgole dei nomi delle autorizzazioni DNS che hai creato per il 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
  }
}

API

Crea il certificato inviando una richiesta POST al metodo certificates.create come segue:

POST /v1/projects/PROJECT_ID/locations/global/certificates?certificate_id=CERTIFICATE_NAME
{
 "managed": {
  "domains": ["DOMAIN_NAME"],
  "dnsAuthorizations": [
   "projects/PROJECT_ID/locations/global/dnsAuthorizations/AUTHORIZATION_NAME",
  ],
 }
}

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del progetto Google Cloud.
  • CERTIFICATE_NAME: il nome del certificato.
  • DOMAIN_NAME: il nome del dominio di destinazione. Il nome di dominio deve essere un nome di dominio completo, ad esempio myorg.example.com, o un dominio con carattere jolly, ad esempio *.myorg.example.com. Il prefisso asterisco con punto (*.) indica un certificato jolly.
  • AUTHORIZATION_NAMES: un elenco separato da virgole dei nomi delle autorizzazioni DNS.

Aggiungi il record CNAME alla configurazione DNS

Se utilizzi una soluzione DNS di terze parti per gestire il tuo DNS, consulta la relativa documentazione per aggiungere il record CNAME alla configurazione DNS. Se utilizzi Google Cloud per gestire il DNS, completa i passaggi descritti in questa sezione.

Console

Per creare un insieme di record:

  1. Nella console Google Cloud, vai alla pagina Zone DNS.

    Vai alle zone Cloud DNS

  2. Fai clic sul nome della zona DNS in cui vuoi aggiungere il record.

  3. Nella pagina Dettagli zona, fai clic su Aggiungi standard.

  4. Nella pagina Crea set di record, inserisci il sottodominio della zona DNS nel campo Nome DNS.

    Quando inserisci il nome del sottodominio, assicurati che il nome del sottodominio, incluso il testo disattivato visualizzato nel campo Nome DNS, corrisponda al valore completo del campo dnsResourceRecord.name visualizzato nell'output del comando gcloud certificate-manager dns-authorizations describe.

    Vedi i seguenti esempi:

    • Se il valore del campo dnsResourceRecord.name è _acme-challenge.myorg.example.com. e il testo non selezionabile nel nome DNS è .example.com., inserisci _acme-challenge.myorg.

    • Se il valore del campo dnsResourceRecord.name è _acme-challenge.myorg.example.com. e il testo non selezionabile nel nome DNS è .myorg.example.com., inserisci _acme-challenge.

    • Se il valore del campo dnsResourceRecord.name è _acme-challenge_ujmmovf2vn55tgye.myorg.example.com. e il testo disattivato nel campo Nome DNS è .myorg.example.com., inserisci _acme-challenge_ujmmovf2vn55tgye.

  5. Nel campo Tipo di record risorsa, seleziona CNAME.

  6. Nel campo TTL, inserisci un valore numerico positivo per la durata del record della risorsa, ovvero per quanto tempo può essere memorizzato nella cache.

  7. Nell'elenco Unità TTL, seleziona l'unità di tempo, ad esempio30 minutes.

  8. Nel campo Nome canonico, inserisci il valore completo del campo dnsResourceRecord.data visualizzato nell'output del comando gcloud certificate-manager dns-authorizations describe.

  9. Per inserire ulteriori informazioni, fai clic su Aggiungi elemento.

  10. Fai clic su Crea.

gcloud

Quando crei un'autorizzazione DNS, il comando gcloud CLI restituisce il record CNAME corrispondente. Per aggiungere il record CNAME alla configurazione DNS nella zona DNS del dominio di destinazione, segui questi passaggi:

  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="VALIDATION_SUBDOMAIN_NAME.DOMAIN_NAME." \
        --ttl="30" \
        --type="CNAME" \
        --zone="DNS_ZONE_NAME"
    

    Sostituisci quanto segue:

    • CNAME_RECORD: il valore dei dati completo del record CNAME restituito dal comando Google Cloud CLI che ha creato l'autorizzazione DNS corrispondente.
    • VALIDATION_SUBDOMAIN_NAME: il prefisso del sottodominio della zona DNS, ad esempio _acme-challenge. Puoi copiare il nome dal log dei comandi gcloud certificate-manager dns-authorizations describe, come descritto in Creare un'autorizzazione DNS.
    • DOMAIN_NAME: il nome del dominio di destinazione.Il nome di dominio deve essere un nome di dominio completo, ad esempio 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 della zona DNS 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]
}

Verificare lo stato del certificato

Prima di implementare un certificato in un bilanciatore del carico, verifica che sia attivo. Potrebbero essere necessari alcuni minuti prima che lo stato del certificato passi a ACTIVE.

Console

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

    Vai a Gestore certificati

  2. Nella scheda Certificati, controlla la colonna Stato del certificato.

gcloud

Per verificare lo stato del certificato, esegui il seguente comando:

gcloud certificate-manager certificates describe CERTIFICATE_NAME

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

L'output è simile al seguente:

createTime: '2021-10-20T12:19:53.370778666Z'
expireTime: '2022-05-07T05:03:49Z'
managed:
  authorizationAttemptInfo:
  - domain: myorg.example.com
    state: AUTHORIZED
  dnsAuthorizations:
    - projects/myProject/locations/global/dnsAuthorizations/myCert
  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'

Se lo stato del certificato non è ACTIVE dopo diverse ore, verifica di aver aggiunto correttamente il record CNAME alla configurazione DNS.

Per ulteriori passaggi per la risoluzione dei problemi, consulta Risolvere i problemi di Certificate Manager.

Esegui il deployment del certificato su un bilanciatore del carico

Per implementare un certificato globale gestito da Google, segui i passaggi descritti in questa sezione e utilizza una mappa dei certificati.

Per eseguire il deployment del certificato gestito da Google in un bilanciatore del carico delle applicazioni esterno regionale o bilanciatore del carico delle applicazioni interno regionale o in un bilanciatore del carico delle applicazioni interno tra regioni, collegalo direttamente al proxy di destinazione.

Creare una mappa di certificati

Crea una mappa di certificati che fa riferimento alla voce mappa di certificati associata al tuo certificato:

gcloud

Per creare una mappa dei certificati, utilizza il comando gcloud certificate-manager maps create:

gcloud certificate-manager maps create CERTIFICATE_MAP_NAME

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

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 di certificati

Crea una voce della mappa di certificati e associala al certificato e alla mappa di certificati:

gcloud

Per creare una voce della mappa dei certificati, utilizza il comando gcloud certificate-manager maps entries create:

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: il nome della voce della mappa di certificati.
  • CERTIFICATE_MAP_NAME: il nome della mappa di certificati a cui è associata la voce della mappa di certificati.
  • CERTIFICATE_NAME: il nome del certificato da associare alla voce della mappa di certificati.
  • HOSTNAME: il nome host da associare alla voce della mappa dei certificati.

    Se crei certificati con un dominio 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 dei certificati sia attiva

Verifica che la voce della mappa dei certificati sia attiva prima di allegare la mappa dei certificati corrispondente al proxy di destinazione.

Per verificare la voce della mappa di certificati, utilizza il comando gcloud certificate-manager maps entries describe:

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.
  • CERTIFICATE_NAME: il nome del certificato da associare alla voce della mappa di certificati.

L'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

Puoi collegare la mappa dei certificati a un nuovo proxy target o a un proxy target esistente.

gcloud

Per collegare la mappa dei certificati a un nuovo proxy target, utilizza il comando gcloud compute target-https-proxies create:

gcloud compute target-https-proxies create PROXY_NAME \
    --certificate-map="CERTIFICATE_MAP_NAME" \
    --url-map="URL_MAP" \
    --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.
  • URL_MAP: il nome della mappa URL

Per collegare la mappa dei certificati a un proxy HTTPS di destinazione esistente, utilizza il comando gcloud compute target-https-proxies update. Se non conosci il nome del proxy di destinazione esistente, vai alla pagina Proxy di destinazione e prendi nota del nome del proxy di destinazione.

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

Dopo aver creato o aggiornato il proxy di destinazione, esegui il seguente comando per verificarlo:

gcloud compute target-https-proxies list

Terraform

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

Quando configuri un proxy di destinazione, se colleghi i certificati TLS (SSL) direttamente e anche tramite una mappa dei certificati, il proxy utilizza i certificati a cui fa riferimento la mappa dei certificati e ignora i certificati TLS (SSL) collegati direttamente.

Testa i certificati di cui è stato eseguito il deployment

Per ogni certificato di cui hai eseguito il deployment, verifica la connettività a ogni dominio covered dal certificato sull'indirizzo IP del bilanciatore del carico utilizzando il seguente comando:

openssl s_client -showcerts -servername DOMAIN_NAME -connect IP_ADDRESS:443

Sostituisci quanto segue:

  • DOMAIN_NAME: il nome del dominio di destinazione
  • IP_ADDRESS: l'indirizzo IP del bilanciatore del carico

Per ulteriori informazioni sul test della connettività, consulta Eseguire test con OpenSSL

Aggiorna record DNS

Sposta il traffico dal servizio di terze parti a Cloud Load Balancing. Consulta Aggiornare i record DNS A e AAAA in modo che puntino all'indirizzo IP del bilanciatore del carico.

Passaggi successivi