Configurar certificados SSL/TLS

En esta página, se describe cómo aplicar la encriptación SSL/TLS en una instancia para garantizar que todas las conexiones estén encriptadas. También puedes obtener más información sobre cómo Cloud SQL usa certificados SSL/TLS autoadministrados para conectarse de forma segura a las instancias de Cloud SQL.

Descripción general

Cloud SQL crea un certificado de servidor automáticamente cuando se crea la instancia. Te recomendamos aplicar todas las conexiones para que usen SSL/TLS.

Las conexiones de SQL Server se encriptan de forma predeterminada y requieren la verificación de certificados.

Los siguientes controladores tienen la encriptación habilitada de forma predeterminada:

Es posible que las versiones anteriores de algunos controladores tengan la encriptación inhabilitada de forma predeterminada.

Debes instalar el certificado de servidor en la máquina cliente o pasar la marca TrustServerCertificate=true en la cadena de conexión del cliente. Para obtener más información, consulta Se lanzó el controlador ODBC 18.0 para SQL Server.

De lo contrario, los clientes podrán conectarse libremente sin necesidad de cambios adicionales en sus cadenas o certificados de conexión, incluso si configuras la instancia con sslMode establecido en ENCRYPTED_ONLY.

Para obtener más información, consulta la sección Habilita conexiones encriptadas al motor de base de datos en la documentación de SQL Server.

Si aplicas SSL para una instancia, debes reiniciarla. Es posible que también sea necesario reiniciar después de cambiar los certificados SSL/TLS. Cuando es necesario reiniciar, Cloud SQL reinicia la instancia automáticamente. El reinicio de una instancia puede generar tiempo de inactividad.

Aplica la encriptación SSL/TLS

Puedes usar la configuración de modo SSL para aplicar la encriptación SSL de las siguientes maneras:

  • Permite conexiones no SSL/no TLS y SSL/TLS. Esta es la opción predeterminada.

  • Solo permite conexiones encriptadas con SSL/TLS.

Si seleccionas Permitir conexiones no SSL/TLS y SSL/TLS para la instancia de Cloud SQL, se aceptarán conexiones SSL/TLS, así como conexiones no encriptadas y no seguras. Si no necesitas SSL/TLS para todas las conexiones, se permiten las conexiones sin encriptar. Por este motivo, si accedes a la instancia usando una IP pública, te recomendamos que apliques SSL para todas las conexiones.

Puedes conectarte directamente a las instancias a través de certificados SSL/TLS o con el proxy de autenticación de Cloud SQL o los conectores de Cloud SQL. Si te conectas a través del proxy de autenticación de Cloud SQL o los conectores de Cloud SQL, las conexiones se encriptarán de forma automática con SSL/TLS. Con el proxy de autenticación de Cloud SQL y los conectores de Cloud SQL, las identidades del cliente y del servidor también se verifican de forma automática, sin importar la configuración del modo SSL.

La aplicación de SSL garantiza que todas las conexiones estén encriptadas.

Para habilitar la aplicación forzosa de SSL/TLS, haz lo siguiente:

Console

  1. En la consola de Google Cloud , ve a la página Instancias de Cloud SQL.

    Ir a Instancias de Cloud SQL

  2. Para abrir la página de Descripción general de una instancia, haz clic en su nombre.
  3. Haz clic en Conexiones en el Menú de navegación de SQL.
  4. Selecciona la pestaña Seguridad.
  5. Selecciona una de las siguientes opciones:
    • Permitir el tráfico de red sin encriptar (no recomendado)
    • ¿Solo permitir conexiones SSL? Esta opción solo permite conexiones a través de la encriptación SSL/TLS.

gcloud

   gcloud sql instances patch INSTANCE_NAME \
   --ssl-mode=SSL_ENFORCEMENT_MODE
  

Reemplaza SSL_ENFORCEMENT_MODE por una de las siguientes opciones:

  • ALLOW_UNENCRYPTED_AND_ENCRYPTED: permite conexiones sin SSL/TLS y con SSL/TLS. Este es el valor predeterminado.
  • ENCRYPTED_ONLY: solo permite conexiones encriptadas con SSL/TLS.

Terraform

Para aplicar la encriptación SSL/TLS, usa un recurso de Terraform:

resource "google_sql_database_instance" "sqlserver_instance" {
  name             = "sqlserver-instance"
  region           = "asia-northeast1"
  database_version = "SQLSERVER_2019_STANDARD"
  root_password    = "INSERT-PASSWORD-HERE"
  settings {
    tier = "db-custom-2-7680"
    ip_configuration {
      ssl_mode = "ENCRYPTED_ONLY"
    }
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

Aplique los cambios

Para aplicar tu configuración de Terraform en un proyecto de Google Cloud , completa los pasos de las siguientes secciones.

Prepara Cloud Shell

  1. Inicia Cloud Shell
  2. Establece el proyecto de Google Cloud predeterminado en el que deseas aplicar tus parámetros de configuración de Terraform.

    Solo necesitas ejecutar este comando una vez por proyecto y puedes ejecutarlo en cualquier directorio.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Las variables de entorno se anulan si configuras valores explícitos en el archivo de configuración de Terraform.

Prepara el directorio

Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz).

  1. En Cloud Shell, crea un directorio y un archivo nuevo dentro de ese directorio. El nombre del archivo debe tener la extensión .tf, por ejemplo, main.tf. En este instructivo, el archivo se denomina main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Si sigues un instructivo, puedes copiar el código de muestra en cada sección o paso.

    Copia el código de muestra en el main.tf recién creado.

    De manera opcional, copia el código de GitHub. Esto se recomienda cuando el fragmento de Terraform es parte de una solución de extremo a extremo.

  3. Revisa y modifica los parámetros de muestra que se aplicarán a tu entorno.
  4. Guarda los cambios.
  5. Inicializa Terraform. Solo debes hacerlo una vez por directorio.
    terraform init

    De manera opcional, incluye la opción -upgrade para usar la última versión del proveedor de Google:

    terraform init -upgrade

Aplica los cambios

  1. Revisa la configuración y verifica que los recursos que creará o actualizará Terraform coincidan con tus expectativas:
    terraform plan

    Corrige la configuración según sea necesario.

  2. Para aplicar la configuración de Terraform, ejecuta el siguiente comando y, luego, escribe yes cuando se te solicite:
    terraform apply

    Espera hasta que Terraform muestre el mensaje “¡Aplicación completa!”.

  3. Abre tu proyecto de Google Cloud para ver los resultados. En la consola de Google Cloud , navega a tus recursos en la IU para asegurarte de que Terraform los haya creado o actualizado.

Borra los cambios

Para borrar tus cambios, haz lo siguiente:

  1. Para inhabilitar la protección contra eliminaciones, en tu archivo de configuración de Terraform, establece el argumento deletion_protection en false.
    deletion_protection =  "false"
  2. Para aplicar la configuración actualizada de Terraform, ejecuta el siguiente comando y, luego, ingresa yes cuando se te solicite:
    terraform apply
  1. Quita los recursos que se aplicaron antes con tu configuración de Terraform a través de la ejecución del siguiente comando y, luego, ingresa yes cuando se te solicite:

    terraform destroy

REST v1

  1. Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_ID: el ID del proyecto
    • SSL_ENFORCEMENT_MODE: Usa una de las siguientes opciones:
      • ALLOW_UNENCRYPTED_AND_ENCRYPTED: permite conexiones sin SSL/TLS y con SSL/TLS.
      • ENCRYPTED_ONLY: solo permite conexiones encriptadas con SSL/TLS.
    • INSTANCE_ID: El ID de la instancia

    Método HTTP y URL:

    PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID

    Cuerpo JSON de la solicitud:

    
    {
      "settings": {
        "ipConfiguration": {"sslMode": "SSL_ENFORCEMENT_MODE"}
      }
    }
    

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

REST v1beta4

  1. Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_ID: el ID del proyecto
    • SSL_ENFORCEMENT_MODE: Usa una de las siguientes opciones:
      • ALLOW_UNENCRYPTED_AND_ENCRYPTED: permite conexiones sin SSL/TLS y con SSL/TLS.
      • ENCRYPTED_ONLY: solo permite conexiones encriptadas con SSL/TLS.
    • INSTANCE_ID: El ID de la instancia

    Método HTTP y URL:

    PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID

    Cuerpo JSON de la solicitud:

    {
      "settings": {
        "ipConfiguration": {"sslMode": "SSL_ENFORCEMENT_MODE"}
      }
    }
    

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

Certificados de servidor

Cloud SQL crea un certificado de servidor de forma automática cuando se crea la instancia. Siempre que el certificado del servidor sea válido, no es necesario que lo administres de forma activa. Cloud SQL te permite seleccionar entre tres jerarquías de autoridad certificadora (CA) diferentes. La jerarquía de AC que selecciones se convertirá en el modo de AC del servidor de la instancia. Si usas la CA por instancia como el modo de CA del servidor para tu instancia, los certificados del servidor tienen una fecha de vencimiento de 10 años. Si usas una AC compartida o una AC administrada por el cliente como el modo de AC del servidor de tu instancia, el certificado del servidor tiene una fecha de vencimiento de 1 año*. Después de la fecha de vencimiento, el certificado del servidor ya no es válido y los clientes ya no pueden establecer una conexión segura a tu instancia con ese certificado. Si un cliente está configurado para verificar la AC o el nombre de host en el certificado del servidor, las conexiones de ese cliente a las instancias de Cloud SQL con certificados de servidor vencidos fallarán. Para evitar la interrupción de las conexiones de cliente, habilita la rotación automática del certificado de servidor o rota manualmente el certificado de servidor antes de que venza. Recibes notificaciones periódicas de que el certificado del servidor está por vencer. Las notificaciones se envían la siguiente cantidad de días antes de la fecha de vencimiento: 90, 30, 10, 2 y 1.

* En el caso de la AC administrada por el cliente, la fecha de vencimiento del certificado del servidor puede ser inferior a 1 año si seleccionaste una fecha de vencimiento más corta para el período de validez de tu AC.

Enumera y crea certificados de servidor

Para ver los detalles de tus certificados de servidor en la consola de Google Cloud , ve a la página Conexiones y haz clic en la pestaña Seguridad.

En la tabla de certificados, puedes ver los siguientes detalles:

  • Estado del certificado:Próximo, Activo o Anterior
    • Próximo: El certificado está disponible para su uso, pero no está activo. Para activar el certificado, usa el procedimiento de rotación.
    • Activo: El certificado está en uso.
    • Anterior: El certificado ya no está en uso. Para activar el certificado, usa el procedimiento de reversión.
  • Fecha de creación: Es la fecha y hora en que se creó el certificado.
  • Vencimiento: Es la fecha y hora en que vence el certificado.

Antes de que venza el certificado activo, puedes crear uno nuevo de forma manual.

Console

Para las instancias que usan certificados de servidor autofirmados (AC por instancia), haz lo siguiente:

  1. En la consola de Google Cloud , ve a la página Instancias de Cloud SQL.

    Ir a Instancias de Cloud SQL

  2. Para abrir la página de Descripción general de una instancia, haz clic en su nombre.
  3. Haz clic en Conexiones en el Menú de navegación de SQL.
  4. Selecciona la pestaña Seguridad.
  5. Ve a la sección Administra certificados de la AC del servidor.
  6. Haz clic para expandir Administrar certificados.
  7. Haz clic en Create new CA certificate.

El nuevo certificado de la AC del servidor aparece en la ranura Próximo. Si quieres rotar al nuevo certificado de la AC del servidor de inmediato, continúa con la rotación del certificado de la AC del servidor. Para ello, actualiza tus clientes y completa la rotación.

Para las instancias que usan certificados de servidor emitidos por una AC compartida, haz lo siguiente:

  1. En la consola de Google Cloud , ve a la página Instancias de Cloud SQL.

    Ir a Instancias de Cloud SQL

  2. Para abrir la página de Descripción general de una instancia, haz clic en su nombre.
  3. Haz clic en Conexiones en el Menú de navegación de SQL.
  4. Selecciona la pestaña Seguridad.
  5. Ve a la sección Administrar certificados de servidor.
  6. Haz clic para expandir Administrar certificados.
  7. Haz clic en Crear certificado del servidor.

El nuevo certificado de servidor aparece en la ranura Próximo. Si quieres usar el nuevo certificado de servidor de inmediato, continúa con la rotación del certificado de servidor. Para ello, actualiza tus clientes y completa la rotación.

gcloud

Para las instancias que usan certificados de servidor autofirmados (AC por instancia), haz lo siguiente:

  1. Para obtener información sobre el certificado del servidor, usa el comando sql ssl server-ca-certs list:
    gcloud sql ssl server-ca-certs list \
    --instance=INSTANCE_NAME
  2. Para crear un certificado de servidor, usa el comando sql ssl server-ca-certs create:
    gcloud sql ssl server-ca-certs create \
    --instance=INSTANCE_NAME
  3. Descarga la información del certificado a un archivo PEM local:
    gcloud sql ssl server-ca-certs list \
    --format="value(cert)" \
    --instance=INSTANCE_NAME > \
    FILE_PATH/FILE_NAME.pem
  4. Actualiza todos los clientes de MySQL a fin de usar la información nueva. Para ello, copia el archivo descargado en las máquinas anfitrionas de cliente y reemplaza los archivosserver-ca.pem existentes.

Para las instancias que usan certificados de servidor emitidos por una AC compartida, haz lo siguiente:

  1. Para obtener información sobre el certificado del servidor, usa el comando sql ssl server-certs list:
    gcloud sql ssl server-certs list \
       --instance=INSTANCE_NAME
  2. Para crear un certificado de servidor, usa el comando sql ssl server-certs create:
    gcloud sql ssl server-certs create \
       --instance=INSTANCE_NAME
  3. Descarga la información del certificado a un archivo PEM local:
    gcloud sql ssl server-certs list \
       --format="value(ca_cert.cert)" \
       --instance=INSTANCE_NAME > \
       FILE_PATH/FILE_NAME.pem
  4. Actualiza todos los clientes de MySQL a fin de usar la información nueva. Para ello, copia el archivo descargado en las máquinas anfitrionas de cliente y reemplaza los archivosserver-ca.pem existentes.

Terraform

Para proporcionar información del certificado del servidor como resultado, usa una fuente de datos de Terraform:

  1. Agrega lo siguiente al archivo de configuración de 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. Para crear el archivo server-ca.pem, ejecuta el siguiente comando:
       terraform output db_latest_ca_cert > server-ca.pem
       

Usa conexiones encriptadas

Obtén más información sobre cómo SQL Server usa las conexiones encriptadas.

Verificación de identidad del servidor

La verificación de identidad del servidor depende de la configuración de la jerarquía de la autoridad certificadora (AC) del servidor de tu instancia de Cloud SQL.

En el caso de las instancias que usan una AC por instancia, verificar la AC también verifica la identidad del servidor, ya que cada instancia tiene una AC única. En el caso de las instancias que usan una AC compartida, se requiere verificar el nombre de host y la AC para la verificación de identidad del servidor, ya que las AC del servidor se comparten entre las instancias.

Si tienes una CA por instancia, puedes realizar la verificación de identidad del servidor basada en el nombre de DNS solo para las instancias que están configuradas con Private Service Connect. Si tienes una CA compartida, puedes realizar la verificación de identidad del servidor basada en el nombre de DNS para todos los tipos de instancias, es decir, Private Service Connect, acceso privado a servicios y las instancias de IP pública.

Si usas una CA administrada por el cliente, puedes verificar la cadena de confianza de la CA y realizar la verificación de identidad del servidor basada en el nombre de DNS para cualquier tipo de instancia que use una CA administrada por el cliente para su serverCAmode.

Cuando seleccionas la opción de CA administrada por el cliente para tu instancia, puedes insertar nombres de DNS personalizados en el campo SAN del certificado del servidor. Para obtener más información, consulta Edita un campo de SAN personalizado.

Para ver qué jerarquía de AC está configurada para una instancia de Cloud SQL, consulta los detalles de la instancia. Para obtener más información, consulta Visualiza la información de la instancia.

Habilita la verificación de identidad del servidor

Si seleccionas la CA compartida como el modo de CA del servidor de tu instancia de Cloud SQL o si configuras nombres de DNS personalizados con valores de SAN personalizados, te recomendamos que también habilites la verificación de identidad del servidor.

Las instancias que usan la CA compartida como el modo de CA del servidor contienen el nombre de DNS de la instancia en el campo Nombre alternativo del sujeto (SAN) del certificado del servidor. Puedes obtener este nombre de DNS con la API de búsqueda de instancias y usar la respuesta como un nombre de host para la verificación de identidad del servidor. Debes configurar la resolución de DNS para el nombre de DNS.

Para habilitar la verificación de identidad del servidor en una instancia que usa una CA compartida, completa los siguientes pasos:

  1. Recupera el nombre de DNS.

    1. Para ver información resumida sobre una instancia de Cloud SQL, incluido el nombre de DNS de la instancia, usa el comando gcloud sql instances describe:

      gcloud sql instances describe INSTANCE_NAME \
        --project=PROJECT_ID

      Realiza los siguientes reemplazos:

      • INSTANCE_NAME: el nombre de la instancia de Cloud SQL
      • PROJECT_ID: el ID o el número del proyecto de Google Cloud que contiene la instancia
    2. En la respuesta, busca el campo dnsNames:. Este campo puede devolver varios nombres de DNS, que tienen los siguientes formatos:

      Configuración de red Formato del nombre de DNS Nivel de nombre
      Private Service Connect o Dirección IP pública INSTANCE_UID.PROJECT_DNS_LABEL.REGION_NAME.sql.goog.

      Ejemplo:
      1a23b4cd5e67.1a2b345c6d27.us-central1.sql.goog.
      Instancia
      Acceso privado a servicios INSTANCE_UID.PROJECT_DNS_LABEL.REGION_NAME.sql-psa.goog.

      Ejemplo:
      1a23b4cd5e67.1a2b345c6d27.us-central1.sql-psa.goog.
      Instancia
  2. Crea el registro DNS en una zona del DNS. Si te conectas de forma privada, crea el registro DNS en una zona del DNS privado en la red de nube privada virtual (VPC) correspondiente.

  3. Cuando te conectes a la instancia de Cloud SQL para SQL Server, configura el nombre de DNS o la dirección IP como el nombre de host. Luego, habilita la verificación de identidad del servidor especificando la marca -N para sqlcmd o seleccionando la opción Encriptar conexión/Encriptación de SSMS.

    Otros controladores de SQL Server tienen marcas o parámetros de configuración similares.

¿Qué sigue?