Configurazione dei certificati SSL/TLS

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

In questa pagina viene descritto come configurare un'istanza per utilizzare SSL/TLS. Puoi anche scoprire di più su come Cloud SQL utilizza i certificati SSL/TLS autogestiti per connetterti in modo sicuro alle istanze Cloud SQL.

Panoramica

Cloud SQL crea automaticamente un certificato del server (server-ca.pem) quando crei l'istanza. È consigliabile applicare tutte le connessioni per utilizzare SSL/TLS.

Per convalidare l'identità client/server utilizzando i certificati SSL/TLS, devi creare un certificato client e scaricare i certificati nella macchina host client MySQL.

Devi riavviare un'istanza dopo aver applicato SSL per l'istanza. Tuttavia, non è necessario riavviare l'istanza dopo aver modificato i certificati SSL/TLS. Se è necessario riavviare, l'operazione viene eseguita automaticamente durante l'evento di aggiornamento SSL.

Applica la crittografia SSL/TLS

La configurazione dell'istanza Cloud SQL in modo da accettare le connessioni SSL/TLS consente le connessioni SSL/TLS per l'istanza, ma le connessioni non criptate e non sicure continueranno a essere accettate. Se non richiedi SSL/TLS per tutte le connessioni, i client senza un certificato valido possono connettersi. Per questo motivo, se accedi all'istanza tramite IP pubblico, ti consigliamo vivamente di applicare SSL per tutte le connessioni.

Quando l'opzione Richiedi SSL/TLS è abilitata, puoi utilizzare il proxy di autenticazione Cloud SQL o i certificati SSL/TLS per connetterti all'istanza Cloud SQL. L'utilizzo del proxy di autenticazione Cloud SQL non richiede certificati SSL/TLS perché la connessione è criptata indipendentemente dall'impostazione.

Per attivare la richiesta di SSL/TLS:

Console

  1. In Google Cloud Console, vai alla pagina Istanze Cloud SQL.

    Vai alle istanze Cloud SQL

  2. Per aprire la pagina Panoramica di un'istanza, fai clic sul suo nome.
  3. Fai clic su Connections (Connessioni) nel menu di navigazione SQL.
  4. Seleziona la scheda Sicurezza.
  5. Fai clic su Consenti solo connessioni SSL.

gcloud

gcloud sql instances patch INSTANCE_NAME
--require-ssl
  

Terraform

Per applicare la crittografia SSL/TLS, utilizza una risorsa Terraform:

resource "google_sql_database_instance" "mysql_instance" {
  name             = "mysql-instance"
  region           = "asia-northeast1"
  database_version = "MYSQL_8_0"
  settings {
    tier              = "db-f1-micro"
    ip_configuration {
      require_ssl = "true"
    }
  }
  deletion_protection = false # set to true to prevent destruction of the resource
}

Applica le modifiche

Per applicare la configurazione Terraform in un progetto Google Cloud, completa i passaggi seguenti:

  1. Avvia Cloud Shell.
  2. Imposta il progetto Google Cloud a cui vuoi applicare la configurazione Terraform:
    export GOOGLE_CLOUD_PROJECT=PROJECT_ID
    
  3. Crea una directory e apri un nuovo file al suo interno. Il nome file deve avere l'estensione .tf, ad esempio main.tf:
    mkdir DIRECTORY && cd DIRECTORY && nano main.tf
    
  4. Copia l'esempio in main.tf.
  5. Esamina e modifica i parametri di esempio da applicare al tuo ambiente.
  6. Salva le modifiche premendo Ctrl-x, quindi y.
  7. Inizializza Terraform:
    terraform init
  8. Rivedi la configurazione e verifica che le risorse che Terraform creerà o aggiornerà corrispondano alle tue aspettative:
    terraform plan

    Apporta le correzioni necessarie alla configurazione.

  9. Applica la configurazione Terraform eseguendo il comando seguente e inserendo yes nel prompt:
    terraform apply

    Attendi finché Terraform non visualizza il messaggio "Applica completato".

  10. Apri il progetto Google Cloud per visualizzare i risultati. Nella console Google Cloud, vai alle tue risorse nell'interfaccia utente per assicurarti che Terraform le abbia create o aggiornate.

Elimina le modifiche

Per eliminare le modifiche, procedi come segue:

  1. Per disabilitare la protezione da eliminazione, nel file di configurazione Terraform imposta l'argomento deletion_protection su false.
    deletion_protection =  "false"
  2. Applica la configurazione Terraform aggiornata eseguendo il comando seguente e inserendo yes al prompt:
    terraform apply
  1. Rimuovi le risorse applicate in precedenza con la configurazione Terraform eseguendo il comando seguente e inserendo yes al prompt:

    terraform destroy

REST v1

  1. Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • project-id: l'ID progetto
    • instance-id: l'ID istanza

    Metodo HTTP e URL:

    PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id

    Corpo JSON richiesta:

    {
      "settings": {
        "ipConfiguration": {"requireSsl": "true"}
      }
    }
    

    Per inviare la richiesta, espandi una delle seguenti opzioni:

    Dovresti ricevere una risposta JSON simile alla seguente:

REST v1beta4

  1. Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • project-id: l'ID progetto
    • instance-id: l'ID istanza

    Metodo HTTP e URL:

    PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

    Corpo JSON richiesta:

    {
      "settings": {
        "ipConfiguration": {"requireSsl": "true"}
      }
    }
    

    Per inviare la richiesta, espandi una delle seguenti opzioni:

    Dovresti ricevere una risposta JSON simile alla seguente:

Certificati server

Cloud SQL crea automaticamente un certificato del server quando crei l'istanza. Finché il certificato server è valido, non devi gestire attivamente il certificato server. Tuttavia, il certificato ha una data di scadenza di 10 anni; dopo tale data, non sarà più valido e i client non potranno stabilire una connessione sicura alla tua istanza utilizzando tale certificato. Ti viene periodicamente comunicato che il certificato del server sta per scadere. Le notifiche vengono inviate il seguente numero di giorni prima della data di scadenza: 90, 30, 10, 2 e 1.

Puoi ottenere informazioni sul tuo certificato server, ad esempio quando è stato creato e quando scade oppure crearne uno nuovo manualmente.

Console

  1. In Google Cloud Console, vai alla pagina Istanze Cloud SQL.

    Vai alle istanze Cloud SQL

  2. Per aprire la pagina Panoramica di un'istanza, fai clic sul suo nome.
  3. Fai clic su Connections (Connessioni) nel menu di navigazione SQL.
  4. Seleziona la scheda Sicurezza.
  5. Scorri verso il basso fino alla sezione Gestisci i certificati server.

    Puoi vedere la data di scadenza del certificato del server nella tabella.

gcloud

  1. Ecco alcune informazioni sul certificato di servizio:
    gcloud beta sql ssl server-ca-certs list \
    --instance=INSTANCE_NAME
    
  2. Crea un certificato del server:
    gcloud beta sql ssl server-ca-certs create \
    --instance=INSTANCE_NAME
    
  3. Scarica le informazioni del certificato in un file PEM locale:
    gcloud beta sql ssl server-ca-certs list \
    --format="value(cert)" \
    --instance=INSTANCE_NAME > \
    FILE_PATH/FILE_NAME.pem
    
  4. Aggiorna tutti i client per utilizzare le nuove informazioni copiando il file scaricato nelle macchine host client, sostituendo i file server-ca.pem esistenti.

Terraform

Per fornire le informazioni del certificato del server come output, utilizza un'origine dati Terraform:

  1. Aggiungi quanto segue al tuo file di configurazione Terraform:
       data "google_sql_ca_certs" "ca_certs" {
         instance = google_sql_database_instance.default.name
       }
    
       locals {
         furthest_expiration_time = reverse(sort([for k, v in data.google_sql_ca_certs.ca_certs.certs : v.expiration_time]))[0]
         latest_ca_cert           = [for v in data.google_sql_ca_certs.ca_certs.certs : v.cert if v.expiration_time == local.furthest_expiration_time]
       }
    
       output "db_latest_ca_cert" {
         description = "Latest CA certificate used by the primary database server"
         value       = local.latest_ca_cert
         sensitive   = true
       }
       
  2. Per creare il file server-ca.pem, esegui questo comando:
       terraform output db_latest_ca_cert > server-ca.pem
       

Certificati client

Crea un nuovo certificato client

Puoi creare fino a 10 certificati client per ogni istanza. Per creare certificati client devi avere il ruolo IAM Cloud SQL Admin.

Di seguito sono riportate alcune informazioni importanti sui certificati client:

  • Se perdi la chiave privata di un certificato, devi crearne una nuova; la chiave privata non può essere recuperata.
  • Per impostazione predefinita, il certificato client ha una data di scadenza di 10 anni.
  • Non riceverai alcuna notifica quando i certificati client stanno per scadere.

Console

  1. In Google Cloud Console, vai alla pagina Istanze Cloud SQL.

    Vai alle istanze Cloud SQL

  2. Per aprire la pagina Panoramica di un'istanza, fai clic sul suo nome.
  3. Fai clic su Connections (Connessioni) nel menu di navigazione SQL.
  4. Seleziona la scheda Sicurezza.
  5. Fai clic su Crea certificato client.
  6. Nella finestra di dialogo Crea un certificato client, aggiungi un nome univoco.
  7. Fai clic su Crea.
  8. Nella prima sezione della finestra di dialogo Nuovo certificato SSL creato, fai clic su Scarica client-key.pem per scaricare la chiave privata in un file denominato client-key.pem.
  9. Nella seconda sezione, fai clic su Scarica client-cert.pem per scaricare il certificato client in un file denominato client-cert.pem.
  10. Nella terza sezione, fai clic su Scarica server-ca.pem per scaricare il certificato del server in un file denominato server-ca.pem.
  11. Fai clic su Chiudi.

gcloud

  1. Crea un certificato client utilizzando il comando ssl client-certs create:

    gcloud sql ssl client-certs create CERT_NAME client-key.pem \
    --instance=INSTANCE_NAME
    
  2. Recupera la chiave pubblica per il certificato che hai appena creato e copiala nel file client-cert.pem con il comando ssl client-certs describe:

    gcloud sql ssl client-certs describe CERT_NAME \
    --instance=INSTANCE_NAME \
    --format="value(cert)" > client-cert.pem
    
  3. Copia il certificato del server nel file server-ca.pem utilizzando il comando instances describe:

    gcloud sql instances describe INSTANCE_NAME \
    --format="value(serverCaCert.cert)" > server-ca.pem
    

Terraform

Per creare un certificato client, utilizza una risorsa Terraform:

resource "google_sql_ssl_cert" "mysql_client_cert" {
  common_name = "mysql_common_name"
  instance    = google_sql_database_instance.mysql_instance.name
}

REST v1

  1. Crea un certificato SSL/TLS, assegnandogli un nome univoco per questa istanza:

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • project-id: l'ID progetto
    • instance-id: l'ID istanza
    • client-cert-name: nome del certificato client

    Metodo HTTP e URL:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/sslCerts

    Corpo JSON richiesta:

    {
      "commonName" : "client-cert-name"
    }
    

    Per inviare la richiesta, espandi una delle seguenti opzioni:

    Dovresti ricevere una risposta JSON simile alla seguente:

  2. Copia tutti i contenuti del certificato tra virgolette (ma non le virgolette) dalla risposta ai file locali come segue:
    1. Copia serverCaCert.cert in server-ca.pem.
    2. Copia clientCert.cert in client-cert.pem.
    3. Copia certPrivateKey in client-key.pem.
  3. Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • project-id: l'ID progetto
    • instance-id: l'ID istanza
    • activation-policy: il criterio di attivazione è SEMPRE o MAI

    Metodo HTTP e URL:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/restart

    Corpo JSON richiesta:

    {
      "settings": {
        "activationPolicy": "activation-policy"
      }
    }
    

    Per inviare la richiesta, espandi una delle seguenti opzioni:

    Dovresti ricevere una risposta JSON simile alla seguente:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-20T21:30:35.667Z",
      "operationType": "RESTART",
      "name": "operation-id",
      "targetId": "instance-id",
      "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
      "targetProject": "project-id"
    }
    

REST v1beta4

  1. Crea un certificato SSL/TLS, assegnandogli un nome univoco per questa istanza:

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • project-id: l'ID progetto
    • instance-id: l'ID istanza
    • client-cert-name: nome del certificato client

    Metodo HTTP e URL:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/sslCerts

    Corpo JSON richiesta:

    {
      "commonName" : "client-cert-name"
    }
    

    Per inviare la richiesta, espandi una delle seguenti opzioni:

    Dovresti ricevere una risposta JSON simile alla seguente:

  2. Copia tutti i contenuti del certificato tra virgolette (ma non le virgolette) dalla risposta ai file locali come segue:
    1. Copia serverCaCert.cert in server-ca.pem.
    2. Copia clientCert.cert in client-cert.pem.
    3. Copia certPrivateKey in client-key.pem.
  3. Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • project-id: l'ID progetto
    • instance-id: l'ID istanza
    • activation-policy: il criterio di attivazione è SEMPRE o MAI

    Metodo HTTP e URL:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/restart

    Corpo JSON richiesta:

    {
      "settings": {
        "activationPolicy": "activation-policy"
      }
    }
    

    Per inviare la richiesta, espandi una delle seguenti opzioni:

    Dovresti ricevere una risposta JSON simile alla seguente:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-20T21:30:35.667Z",
      "operationType": "RESTART",
      "name": "operation-id",
      "targetId": "instance-id",
      "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
      "targetProject": "project-id"
    }
    

A questo punto, hai:

  • Un certificato server salvato come server-ca.pem.
  • Un certificato di chiave pubblica del client salvato come client-cert.pem.
  • Una chiave privata del client salvata come client-key.pem.

A seconda dello strumento che utilizzi per connetterti, questi tre elementi vengono specificati in modi diversi. Ad esempio, quando ti connetti utilizzando il client MySQL, questi tre file sono i valori rispettivamente per le opzioni di comando --ssl-ca, --ssl-cert e --ssl-key. Per una connessione di esempio utilizzando il client MySQL e SSL/TLS, vedi Connessione con il client MySQL.

Passaggi successivi