Configurar certificados SSL/TLS

Esta página describe cómo aplicar el cifrado SSL/TLS a una instancia para garantizar que todas las conexiones estén cifradas. También puede obtener más información sobre cómo Cloud SQL usa certificados SSL/TLS autogestionados para conectarse a instancias de Cloud SQL de forma segura.

Descripción general

Cloud SQL crea automáticamente un certificado de servidor al crear la instancia. Recomendamos que todas las conexiones utilicen SSL/TLS .

Para validar la identidad del cliente/servidor mediante certificados SSL/TLS, debe crear un certificado de cliente y descargar los certificados a su máquina host del cliente MySQL.

Si aplica SSL a una instancia, esta deberá reiniciarse. También podría ser necesario reiniciarla después de cambiar los certificados SSL/TLS. Cuando se requiere un reinicio, Cloud SQL reinicia la instancia automáticamente. Reiniciar una instancia puede ocasionar tiempo de inactividad.

Aplicar el cifrado SSL/TLS

Puede utilizar la configuración del modo SSL para aplicar el cifrado SSL de las siguientes maneras:

  • Permitir conexiones SSL/TLS y no SSL/TLS. El certificado del cliente no se verifica para conexiones SSL/TLS. Esta es la opción predeterminada.

  • Permitir únicamente conexiones cifradas con SSL/TLS. El certificado del cliente no se verifica para conexiones SSL.

  • Permitir únicamente conexiones cifradas con SSL/TLS y con certificados de cliente válidos.

Si selecciona Permitir conexiones sin SSL/TLS y SSL/TLS para su instancia de Cloud SQL, se aceptarán las conexiones SSL/TLS, así como las conexiones sin cifrar y no seguras. Si no requiere SSL/TLS para todas las conexiones, las conexiones sin cifrar se permiten. Por este motivo, si accede a su instancia mediante una IP pública, le recomendamos encarecidamente que active SSL para todas las conexiones.

Puede conectarse directamente a las instancias mediante certificados SSL/TLS o mediante Cloud SQL Auth Proxy o Cloud SQL Connectors . Si se conecta mediante Cloud SQL Auth Proxy o Cloud SQL Connectors, las conexiones se cifran automáticamente con SSL/TLS. Con Cloud SQL Auth Proxy y Cloud SQL Connectors, las identidades del cliente y del servidor también se verifican automáticamente, independientemente de la configuración del modo SSL.

Para habilitar el requisito de SSL/TLS, haga lo siguiente:

Consola

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

    Ir a Instancias de Cloud SQL

  2. Para abrir la página Descripción general de una instancia, haga clic en el nombre de la instancia.
  3. Haga clic en Conexiones en el menú de navegación de SQL.
  4. Seleccione la pestaña Seguridad .
  5. Seleccione una de las siguientes opciones:
    • Permitir tráfico de red sin cifrar (no recomendado)
    • Permitir solo conexiones SSL. Esta opción solo permite conexiones con cifrado SSL/TLS. Los certificados no se validan.
    • Requerir certificados de cliente de confianza. Esta opción solo permite conexiones de clientes que utilicen un certificado de cliente válido y estén cifrados con SSL.

nube g

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

Reemplace SSL_ENFORCEMENT_MODE con una de las siguientes opciones:

  • ALLOW_UNENCRYPTED_AND_ENCRYPTED permite conexiones SSL/TLS y no SSL/TLS. En las conexiones SSL, el certificado del cliente no se verifica. Este es el valor predeterminado.
  • ENCRYPTED_ONLY solo permite conexiones cifradas con SSL/TLS. El certificado del cliente no se verifica para las conexiones SSL.
  • TRUSTED_CLIENT_CERTIFICATE_REQUIRED solo permite conexiones cifradas con SSL/TLS y con certificados de cliente válidos.
  • Para obtener más información, consulte Configuración de Cloud SQL para MySQL .

Terraformar

Para aplicar el cifrado SSL/TLS, utilice un recurso 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 {
      # The following SSL enforcement options only allow connections encrypted with SSL/TLS and with
      # valid client certificates. Please check the API reference for other SSL enforcement options:
      # https://cloud.google.com/sql/docs/postgres/admin-api/rest/v1beta4/instances#ipconfiguration
      ssl_mode = "TRUSTED_CLIENT_CERTIFICATE_REQUIRED"
    }
  }
  # 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
}

Aplicar los cambios

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

Preparar Cloud Shell

  1. Inicie Cloud Shell .
  2. Establecer el valor predeterminado Google Cloud Proyecto donde desea aplicar sus configuraciones 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 establece valores explícitos en el archivo de configuración de Terraform.

Preparar 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 , cree un directorio y un nuevo archivo dentro de él. El nombre del archivo debe tener la extensión .tf ; por ejemplo, main.tf En este tutorial, el archivo se denomina main.tf
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Si está siguiendo un tutorial, puede copiar el código de muestra en cada sección o paso.

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

    Opcionalmente, copie el código de GitHub. Esto se recomienda cuando el fragmento de Terraform forma parte de una solución integral.

  3. Revise y modifique los parámetros de muestra para aplicarlos a su entorno.
  4. Guarde sus cambios.
  5. Inicialice Terraform. Solo necesita hacerlo una vez por directorio.
    terraform init

    Opcionalmente, para utilizar la última versión del proveedor de Google, incluya la opción -upgrade :

    terraform init -upgrade

Aplicar los cambios

  1. Revise la configuración y verifique que los recursos que Terraform va a crear o actualizar coincidan con sus expectativas:
    terraform plan

    Realice correcciones en la configuración según sea necesario.

  2. Aplique la configuración de Terraform ejecutando el siguiente comando e ingresando yes en el indicador:
    terraform apply

    Espere hasta que Terraform muestre el mensaje "¡Aplicación completada!"

  3. Abre tu Google Cloud proyecto para ver los resultados. En el Google Cloud consola, navegue a sus recursos en la interfaz de usuario para asegurarse de que Terraform los haya creado o actualizado.

Eliminar los cambios

Para eliminar sus cambios, haga lo siguiente:

  1. Para deshabilitar la protección contra eliminación, en el archivo de configuración de Terraform configure el argumento deletion_protection en false .
    deletion_protection =  "false"
  2. Aplique la configuración actualizada de Terraform ejecutando el siguiente comando e ingresando yes en el mensaje:
    terraform apply
  1. Elimine los recursos aplicados previamente con su configuración de Terraform ejecutando el siguiente comando e ingresando yes en el mensaje:

    terraform destroy

REST versión 1

  1. Antes de utilizar cualquiera de los datos solicitados, realice las siguientes sustituciones:

    • PROJECT_ID : El ID del proyecto
    • SSL_ENFORCEMENT_MODE : utilice una de las siguientes opciones:
      • ALLOW_UNENCRYPTED_AND_ENCRYPTED : permite conexiones SSL/TLS y no SSL/TLS. En las conexiones SSL, el certificado del cliente no se verifica. Este es el valor predeterminado.
      • ENCRYPTED_ONLY : sólo permite conexiones cifradas con SSL/TLS.
      • TRUSTED_CLIENT_CERTIFICATE_REQUIRED : solo permite conexiones cifradas con SSL/TLS y con certificados de cliente válidos.
    • 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 su solicitud, expanda una de estas opciones:

    Debería recibir una respuesta JSON similar a la siguiente:

REST v1beta4

  1. Antes de utilizar cualquiera de los datos solicitados, realice las siguientes sustituciones:

    • PROJECT_ID : El ID del proyecto
    • SSL_ENFORCEMENT_MODE : utilice una de las siguientes opciones:
      • ALLOW_UNENCRYPTED_AND_ENCRYPTED : permite conexiones SSL/TLS y no SSL/TLS. En las conexiones SSL, el certificado del cliente no se verifica. Este es el valor predeterminado.
      • ENCRYPTED_ONLY : sólo permite conexiones cifradas con SSL/TLS.
      • TRUSTED_CLIENT_CERTIFICATE_REQUIRED : solo permite conexiones cifradas con SSL/TLS y con certificados de cliente válidos.
    • 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 su solicitud, expanda una de estas opciones:

    Debería recibir una respuesta JSON similar a la siguiente:

Certificados de servidor

Cloud SQL crea un certificado de servidor automáticamente al crear la instancia. Mientras el certificado de servidor sea válido, no es necesario que lo administre de forma activa. Cloud SQL le permite seleccionar entre tres jerarquías de autoridades de certificación (CA) diferentes. La jerarquía de CA que seleccione se convierte en el modo de CA de servidor de la instancia. Si utiliza una CA por instancia como modo de CA de servidor para su instancia, los certificados de servidor tienen una fecha de vencimiento de 10 años. Si utiliza una CA compartida o una CA administrada por el cliente como modo de CA de servidor de su instancia, el certificado de servidor tiene una fecha de vencimiento de 1 año * . Después de la fecha de vencimiento, el certificado de servidor deja de ser válido y los clientes ya no pueden establecer una conexión segura con su instancia mediante ese certificado. Si un cliente está configurado para verificar la CA o verificar el nombre de host en el certificado de servidor, las conexiones de ese cliente a las instancias de Cloud SQL con certificados de servidor vencidos fallarán. Para evitar interrupciones en las conexiones de los clientes, rote el certificado de servidor antes de que venza. Se le notifica periódicamente que el certificado del servidor está próximo a caducar. Las notificaciones se envían con la siguiente antelación: 90, 30, 10, 2 y 1 días.

* Para las CA administradas por el cliente, la fecha de vencimiento de su certificado de servidor podría ser más corta que 1 año si seleccionó una fecha de vencimiento más corta para el período de validez de su CA.

Enumerar y crear certificados de servidor

Para ver los detalles de los certificados de su servidor en el Google Cloud consola, vaya a la página Conexiones y haga clic en la pestaña Seguridad .

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

  • Estado del certificado : Próximo, Activo o Anterior
    • Próximamente : El certificado está disponible, pero no está activo. Para activarlo, utilice el procedimiento de rotación.
    • Activo : el certificado está en uso.
    • Anterior : El certificado ya no está en uso. Para reactivarlo, utilice el procedimiento de reversión.
  • Creado : La fecha y hora en que se creó el certificado.
  • Caduca : La fecha y hora en que caduca el certificado.

Antes de que caduque el certificado activo, puede crear un nuevo certificado manualmente.

Consola

Para instancias que utilizan certificados de servidor autofirmados (CA por instancia) :

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

    Ir a Instancias de Cloud SQL

  2. Para abrir la página Descripción general de una instancia, haga clic en el nombre de la instancia.
  3. Haga clic en Conexiones en el menú de navegación de SQL.
  4. Seleccione la pestaña Seguridad .
  5. Vaya a la sección Administrar certificados CA del servidor .
  6. Haga clic para expandir Administrar certificados .
  7. Haga clic en Crear nuevo certificado CA.

El nuevo certificado de CA del servidor aparece en la ranura Próximos . Si desea rotar al nuevo certificado de CA del servidor inmediatamente, proceda con la rotación del certificado de CA del servidor actualizando sus clientes y completando la rotación.

Para instancias que utilizan certificados de servidor emitidos por una CA compartida :

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

    Ir a Instancias de Cloud SQL

  2. Para abrir la página Descripción general de una instancia, haga clic en el nombre de la instancia.
  3. Haga clic en Conexiones en el menú de navegación de SQL.
  4. Seleccione la pestaña Seguridad .
  5. Vaya a la sección Administrar certificados de servidor .
  6. Haga clic para expandir Administrar certificados .
  7. Haga clic en Crear certificado de servidor .

El nuevo certificado de servidor aparece en la ranura "Próximos" . Si desea usarlo inmediatamente, proceda con la rotación de certificados de servidor actualizando sus clientes y completando la rotación.

nube g

Para instancias que utilizan certificados de servidor autofirmados (CA por instancia) :

  1. Para obtener información sobre el certificado del servidor, utilice 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, utilice el comando sql ssl server-ca-certs create :
    gcloud sql ssl server-ca-certs create \
    --instance=INSTANCE_NAME
  3. Descargue 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. Actualice todos sus clientes para usar la nueva información copiando el archivo descargado a las máquinas host de sus clientes y reemplazando los archivos server-ca.pem existentes.

Para instancias que utilizan certificados de servidor emitidos por una CA compartida :

  1. Para obtener información sobre el certificado del servidor, utilice el comando sql ssl server-certs list :
    gcloud sql ssl server-certs list \
       --instance=INSTANCE_NAME
  2. Para crear un certificado de servidor, utilice el comando sql ssl server-certs create :
    gcloud sql ssl server-certs create \
       --instance=INSTANCE_NAME
  3. Descargue 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. Actualice todos sus clientes para usar la nueva información copiando el archivo descargado a las máquinas host de sus clientes y reemplazando los archivos server-ca.pem existentes.

Terraformar

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

  1. Agregue lo siguiente a su 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 , ejecute el siguiente comando:
       terraform output db_latest_ca_cert > server-ca.pem
       

Certificados de cliente

Crear un nuevo certificado de cliente

Puede crear hasta 10 certificados de cliente para cada instancia. Para crearlos, debe tener el rol de Cloud SQL Admin .

A continuación se detallan algunos aspectos importantes que debe saber sobre los certificados de cliente:

  • Si pierde la clave privada de un certificado, deberá crear uno nuevo; la clave privada no se puede recuperar.
  • De forma predeterminada, el certificado de cliente tiene una fecha de vencimiento de 10 años.
  • No se le notifica cuando los certificados de cliente están próximos a vencer.
  • Su instancia de Cloud SQL debe estar en estado de ejecución para crear un certificado SSL.

Consola

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

    Ir a Instancias de Cloud SQL

  2. Para abrir la página Descripción general de una instancia, haga clic en el nombre de la instancia.
  3. Haga clic en Conexiones en el menú de navegación de SQL.
  4. Seleccione la pestaña Seguridad .
  5. Haga clic en Crear certificado de cliente .
  6. En el cuadro de diálogo Crear un certificado de cliente , agregue un nombre único.
  7. Haga clic en Crear .
  8. En la primera sección del cuadro de diálogo Nuevo certificado SSL creado , haga clic en Descargar client-key.pem para descargar la clave privada a un archivo llamado client-key.pem .
  9. En la segunda sección, haga clic en Descargar client-cert.pem para descargar el certificado de cliente a un archivo llamado client-cert.pem .
  10. En la tercera sección, haga clic en Descargar server-ca.pem para descargar el certificado del servidor a un archivo llamado server-ca.pem .
  11. Haga clic en Cerrar .

nube g

  1. Cree un certificado de cliente utilizando el comando ssl client-certs create :

    gcloud sql ssl client-certs create CERT_NAME client-key.pem \
    --instance=INSTANCE_NAME
  2. Recupere la clave pública del certificado que acaba de crear y cópiela en el archivo client-cert.pem con el comando ssl client-certs describe :

    gcloud sql ssl client-certs describe CERT_NAME \
    --instance=INSTANCE_NAME \
    --format="value(cert)" > client-cert.pem
  3. Copie el certificado del servidor en el archivo server-ca.pem usando el comando instances describe :

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

Terraformar

Para crear un certificado de cliente, utilice un recurso de Terraform :

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

REST versión 1

  1. Cree un certificado SSL/TLS y asígnele un nombre único para esta instancia:

    Antes de utilizar cualquiera de los datos solicitados, realice las siguientes sustituciones:

    • project-id : El ID del proyecto
    • instance-id : El ID de la instancia
    • client-cert-name : El nombre del certificado del cliente

    Método HTTP y URL:

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

    Cuerpo JSON de la solicitud:

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

    Para enviar su solicitud, expanda una de estas opciones:

    Debería recibir una respuesta JSON similar a la siguiente:

  2. Copie todo el contenido del certificado dentro de las comillas (pero no las comillas en sí) de la respuesta en archivos locales de la siguiente manera:
    1. Copie serverCaCert.cert en server-ca.pem .
    2. Copie clientCert.cert en client-cert.pem .
    3. Copie certPrivateKey en client-key.pem .
  3. Antes de utilizar cualquiera de los datos solicitados, realice las siguientes sustituciones:

    • project-id : El ID del proyecto
    • instance-id : El ID de la instancia
    • activation-policy : La política de activación es SIEMPRE o NUNCA

    Método HTTP y URL:

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

    Cuerpo JSON de la solicitud:

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

    Para enviar su solicitud, expanda una de estas opciones:

    Debería recibir una respuesta JSON similar a la siguiente:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
      "status": "PENDING",
      "user": "[email protected]",
      "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. Cree un certificado SSL/TLS y asígnele un nombre único para esta instancia:

    Antes de utilizar cualquiera de los datos solicitados, realice las siguientes sustituciones:

    • project-id : El ID del proyecto
    • instance-id : El ID de la instancia
    • client-cert-name : El nombre del certificado del cliente

    Método HTTP y URL:

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

    Cuerpo JSON de la solicitud:

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

    Para enviar su solicitud, expanda una de estas opciones:

    Debería recibir una respuesta JSON similar a la siguiente:

  2. Copie todo el contenido del certificado dentro de las comillas (pero no las comillas en sí) de la respuesta en archivos locales de la siguiente manera:
    1. Copie serverCaCert.cert en server-ca.pem .
    2. Copie clientCert.cert en client-cert.pem .
    3. Copie certPrivateKey en client-key.pem .
  3. Antes de utilizar cualquiera de los datos solicitados, realice las siguientes sustituciones:

    • project-id : El ID del proyecto
    • instance-id : El ID de la instancia
    • activation-policy : La política de activación es SIEMPRE o NUNCA

    Método HTTP y URL:

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

    Cuerpo JSON de la solicitud:

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

    Para enviar su solicitud, expanda una de estas opciones:

    Debería recibir una respuesta JSON similar a la siguiente:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
      "status": "PENDING",
      "user": "[email protected]",
      "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"
    }
    

En este punto, tienes:

  • Un certificado de servidor guardado como server-ca.pem .
  • Un certificado de clave pública de cliente guardado como client-cert.pem .
  • Una clave privada de cliente guardada como client-key.pem .

Según la herramienta que utilice para conectarse, estos tres elementos se especifican de forma diferente. Por ejemplo, al conectarse mediante un cliente MySQL, estos tres archivos son los valores para las opciones de comando --ssl-ca , --ssl-cert y --ssl-key , respectivamente. Para ver un ejemplo de conexión con un cliente MySQL y SSL/TLS, consulte Conexión con un cliente MySQL .

Verificación de identidad del servidor

La verificación de la identidad del servidor depende de la configuración de la jerarquía de la autoridad de certificación (CA) del servidor de su instancia de Cloud SQL.

En las instancias que utilizan una CA individual, la verificación de la CA también verifica la identidad del servidor, ya que cada instancia tiene una CA única. En las instancias que utilizan una CA compartida, es necesario verificar el nombre de host junto con la CA para verificar la identidad del servidor, ya que las CA del servidor se comparten entre las instancias.

Si tiene una CA por instancia, puede realizar la verificación de identidad del servidor basada en nombres DNS solo para las instancias configuradas con Conexión de Servicio Privado. Si tiene una CA compartida, puede realizar la verificación de identidad del servidor basada en nombres DNS para todos los tipos de instancias, es decir, Conexión de Servicio Privado , Acceso a Servicio Privado e instancias con IP pública.

Si está utilizando una CA administrada por el cliente, puede verificar la cadena de confianza de la CA y realizar una verificación de identidad del servidor basada en nombres DNS para cualquier tipo de instancia que utilice una CA administrada por el cliente para su serverCAmode .

Al seleccionar la opción de CA administrada por el cliente para su instancia, puede insertar nombres DNS personalizados en el campo SAN del certificado del servidor. Para obtener más información, consulte Editar un campo SAN personalizado .

Puede ver qué jerarquía de CA está configurada para una instancia de Cloud SQL consultando los detalles de la instancia. Para obtener más información, consulte Ver información de la instancia .

Habilitar la verificación de identidad del servidor

Si selecciona CA compartida como el modo de CA del servidor de su instancia de Cloud SQL o si configura nombres DNS personalizados usando valores SAN personalizados , le recomendamos que también habilite la verificación de identidad del servidor.

Las instancias que usan una CA compartida como modo de CA del servidor contienen el nombre DNS de la instancia en el campo Nombre Alternativo del Sujeto (SAN) del certificado del servidor. Puede obtener este nombre DNS mediante la API de búsqueda de instancias y utilizando la respuesta como nombre de host para la verificación de identidad del servidor. Debe configurar la resolución DNS para el nombre DNS.

Para habilitar la verificación de identidad del servidor para una instancia que utiliza una CA compartida, complete los siguientes pasos:

  1. Recuperar el nombre DNS.

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

      gcloud sql instances describe INSTANCE_NAME \
        --project=PROJECT_ID

      Realice las siguientes sustituciones:

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

      Configuración de red Formato de nombre DNS Nivel de nombre
      Conexión de servicio privado o dirección IP pública INSTANCE_UID . PROJECT_DNS_LABEL . REGION_NAME .sql.goog.

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

      Ejemplo :
      1a23b4cd5e67.1a2b345c6d27.us-central1.sql-psa.goog.
      Instancia
  2. Cree el registro DNS en una zona DNS . Si se conecta de forma privada, cree el registro DNS en una zona DNS privada de la red de nube virtual privada (VPC) correspondiente.

  3. Al conectarse a la instancia de Cloud SQL para MySQL, configure el nombre DNS como nombre de host. A continuación, habilite la verificación de identidad del servidor en su cliente.

    Por ejemplo, al usar el cliente MySQL, especifique el indicador --ssl-mode=VERIFY_IDENTITY . Otros controladores de cliente MySQL tienen indicadores de configuración similares.

¿Qué sigue?

,

Esta página describe cómo aplicar el cifrado SSL/TLS a una instancia para garantizar que todas las conexiones estén cifradas. También puede obtener más información sobre cómo Cloud SQL usa certificados SSL/TLS autogestionados para conectarse a instancias de Cloud SQL de forma segura.

Descripción general

Cloud SQL crea automáticamente un certificado de servidor al crear la instancia. Recomendamos que todas las conexiones utilicen SSL/TLS .

Para validar la identidad del cliente/servidor mediante certificados SSL/TLS, debe crear un certificado de cliente y descargar los certificados a su máquina host del cliente MySQL.

Si aplica SSL a una instancia, esta deberá reiniciarse. También podría ser necesario reiniciarla después de cambiar los certificados SSL/TLS. Cuando se requiere un reinicio, Cloud SQL reinicia la instancia automáticamente. Reiniciar una instancia puede ocasionar tiempo de inactividad.

Aplicar el cifrado SSL/TLS

Puede utilizar la configuración del modo SSL para aplicar el cifrado SSL de las siguientes maneras:

  • Permitir conexiones SSL/TLS y no SSL/TLS. El certificado del cliente no se verifica para conexiones SSL/TLS. Esta es la opción predeterminada.

  • Permitir únicamente conexiones cifradas con SSL/TLS. El certificado del cliente no se verifica para conexiones SSL.

  • Permitir únicamente conexiones cifradas con SSL/TLS y con certificados de cliente válidos.

Si selecciona Permitir conexiones sin SSL/TLS y SSL/TLS para su instancia de Cloud SQL, se aceptarán las conexiones SSL/TLS, así como las conexiones sin cifrar y no seguras. Si no requiere SSL/TLS para todas las conexiones, las conexiones sin cifrar se permiten. Por este motivo, si accede a su instancia mediante una IP pública, le recomendamos encarecidamente que active SSL para todas las conexiones.

Puede conectarse directamente a las instancias mediante certificados SSL/TLS o mediante Cloud SQL Auth Proxy o Cloud SQL Connectors . Si se conecta mediante Cloud SQL Auth Proxy o Cloud SQL Connectors, las conexiones se cifran automáticamente con SSL/TLS. Con Cloud SQL Auth Proxy y Cloud SQL Connectors, las identidades del cliente y del servidor también se verifican automáticamente, independientemente de la configuración del modo SSL.

Para habilitar el requisito de SSL/TLS, haga lo siguiente:

Consola

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

    Ir a Instancias de Cloud SQL

  2. Para abrir la página Descripción general de una instancia, haga clic en el nombre de la instancia.
  3. Haga clic en Conexiones en el menú de navegación de SQL.
  4. Seleccione la pestaña Seguridad .
  5. Seleccione una de las siguientes opciones:
    • Permitir tráfico de red sin cifrar (no recomendado)
    • Permitir solo conexiones SSL. Esta opción solo permite conexiones con cifrado SSL/TLS. Los certificados no se validan.
    • Requerir certificados de cliente de confianza. Esta opción solo permite conexiones de clientes que utilicen un certificado de cliente válido y estén cifrados con SSL.

nube g

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

Reemplace SSL_ENFORCEMENT_MODE con una de las siguientes opciones:

  • ALLOW_UNENCRYPTED_AND_ENCRYPTED permite conexiones SSL/TLS y no SSL/TLS. En las conexiones SSL, el certificado del cliente no se verifica. Este es el valor predeterminado.
  • ENCRYPTED_ONLY solo permite conexiones cifradas con SSL/TLS. El certificado del cliente no se verifica para las conexiones SSL.
  • TRUSTED_CLIENT_CERTIFICATE_REQUIRED solo permite conexiones cifradas con SSL/TLS y con certificados de cliente válidos.
  • Para obtener más información, consulte Configuración de Cloud SQL para MySQL .

Terraformar

Para aplicar el cifrado SSL/TLS, utilice un recurso 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 {
      # The following SSL enforcement options only allow connections encrypted with SSL/TLS and with
      # valid client certificates. Please check the API reference for other SSL enforcement options:
      # https://cloud.google.com/sql/docs/postgres/admin-api/rest/v1beta4/instances#ipconfiguration
      ssl_mode = "TRUSTED_CLIENT_CERTIFICATE_REQUIRED"
    }
  }
  # 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
}

Aplicar los cambios

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

Preparar Cloud Shell

  1. Inicie Cloud Shell .
  2. Establecer el valor predeterminado Google Cloud Proyecto donde desea aplicar sus configuraciones 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 establece valores explícitos en el archivo de configuración de Terraform.

Preparar 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 , cree un directorio y un nuevo archivo dentro de él. El nombre del archivo debe tener la extensión .tf ; por ejemplo, main.tf En este tutorial, el archivo se denomina main.tf
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Si está siguiendo un tutorial, puede copiar el código de muestra en cada sección o paso.

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

    Opcionalmente, copie el código de GitHub. Esto se recomienda cuando el fragmento de Terraform forma parte de una solución integral.

  3. Revise y modifique los parámetros de muestra para aplicarlos a su entorno.
  4. Guarde sus cambios.
  5. Inicialice Terraform. Solo necesita hacerlo una vez por directorio.
    terraform init

    Opcionalmente, para utilizar la última versión del proveedor de Google, incluya la opción -upgrade :

    terraform init -upgrade

Aplicar los cambios

  1. Revise la configuración y verifique que los recursos que Terraform va a crear o actualizar coincidan con sus expectativas:
    terraform plan

    Realice correcciones en la configuración según sea necesario.

  2. Aplique la configuración de Terraform ejecutando el siguiente comando e ingresando yes en el indicador:
    terraform apply

    Espere hasta que Terraform muestre el mensaje "¡Aplicación completada!"

  3. Abre tu Google Cloud proyecto para ver los resultados. En el Google Cloud consola, navegue a sus recursos en la interfaz de usuario para asegurarse de que Terraform los haya creado o actualizado.

Eliminar los cambios

Para eliminar sus cambios, haga lo siguiente:

  1. Para deshabilitar la protección contra eliminación, en el archivo de configuración de Terraform configure el argumento deletion_protection en false .
    deletion_protection =  "false"
  2. Aplique la configuración actualizada de Terraform ejecutando el siguiente comando e ingresando yes en el mensaje:
    terraform apply
  1. Elimine los recursos aplicados previamente con su configuración de Terraform ejecutando el siguiente comando e ingresando yes en el mensaje:

    terraform destroy

REST versión 1

  1. Antes de utilizar cualquiera de los datos solicitados, realice las siguientes sustituciones:

    • PROJECT_ID : El ID del proyecto
    • SSL_ENFORCEMENT_MODE : utilice una de las siguientes opciones:
      • ALLOW_UNENCRYPTED_AND_ENCRYPTED : permite conexiones SSL/TLS y no SSL/TLS. En las conexiones SSL, el certificado del cliente no se verifica. Este es el valor predeterminado.
      • ENCRYPTED_ONLY : sólo permite conexiones cifradas con SSL/TLS.
      • TRUSTED_CLIENT_CERTIFICATE_REQUIRED : solo permite conexiones cifradas con SSL/TLS y con certificados de cliente válidos.
    • 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 su solicitud, expanda una de estas opciones:

    Debería recibir una respuesta JSON similar a la siguiente:

REST v1beta4

  1. Antes de utilizar cualquiera de los datos solicitados, realice las siguientes sustituciones:

    • PROJECT_ID : El ID del proyecto
    • SSL_ENFORCEMENT_MODE : utilice una de las siguientes opciones:
      • ALLOW_UNENCRYPTED_AND_ENCRYPTED : permite conexiones SSL/TLS y no SSL/TLS. En las conexiones SSL, el certificado del cliente no se verifica. Este es el valor predeterminado.
      • ENCRYPTED_ONLY : sólo permite conexiones cifradas con SSL/TLS.
      • TRUSTED_CLIENT_CERTIFICATE_REQUIRED : solo permite conexiones cifradas con SSL/TLS y con certificados de cliente válidos.
    • 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 su solicitud, expanda una de estas opciones:

    Debería recibir una respuesta JSON similar a la siguiente:

Certificados de servidor

Cloud SQL crea un certificado de servidor automáticamente al crear la instancia. Mientras el certificado de servidor sea válido, no es necesario que lo administre de forma activa. Cloud SQL le permite seleccionar entre tres jerarquías de autoridades de certificación (CA) diferentes. La jerarquía de CA que seleccione se convierte en el modo de CA de servidor de la instancia. Si utiliza una CA por instancia como modo de CA de servidor para su instancia, los certificados de servidor tienen una fecha de vencimiento de 10 años. Si utiliza una CA compartida o una CA administrada por el cliente como modo de CA de servidor de su instancia, el certificado de servidor tiene una fecha de vencimiento de 1 año * . Después de la fecha de vencimiento, el certificado de servidor deja de ser válido y los clientes ya no pueden establecer una conexión segura con su instancia mediante ese certificado. Si un cliente está configurado para verificar la CA o verificar el nombre de host en el certificado de servidor, las conexiones de ese cliente a las instancias de Cloud SQL con certificados de servidor vencidos fallarán. Para evitar interrupciones en las conexiones de los clientes, rote el certificado de servidor antes de que venza. Se le notifica periódicamente que el certificado del servidor está próximo a caducar. Las notificaciones se envían con la siguiente antelación: 90, 30, 10, 2 y 1 días.

* Para las CA administradas por el cliente, la fecha de vencimiento de su certificado de servidor podría ser más corta que 1 año si seleccionó una fecha de vencimiento más corta para el período de validez de su CA.

Enumerar y crear certificados de servidor

Para ver los detalles de los certificados de su servidor en el Google Cloud consola, vaya a la página Conexiones y haga clic en la pestaña Seguridad .

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

  • Estado del certificado : Próximo, Activo o Anterior
    • Próximamente : El certificado está disponible, pero no está activo. Para activarlo, utilice el procedimiento de rotación.
    • Activo : el certificado está en uso.
    • Anterior : El certificado ya no está en uso. Para reactivarlo, utilice el procedimiento de reversión.
  • Creado : La fecha y hora en que se creó el certificado.
  • Caduca : La fecha y hora en que caduca el certificado.

Antes de que caduque el certificado activo, puede crear un nuevo certificado manualmente.

Consola

Para instancias que utilizan certificados de servidor autofirmados (CA por instancia) :

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

    Ir a Instancias de Cloud SQL

  2. Para abrir la página Descripción general de una instancia, haga clic en el nombre de la instancia.
  3. Haga clic en Conexiones en el menú de navegación de SQL.
  4. Seleccione la pestaña Seguridad .
  5. Vaya a la sección Administrar certificados CA del servidor .
  6. Haga clic para expandir Administrar certificados .
  7. Haga clic en Crear nuevo certificado CA.

El nuevo certificado de CA del servidor aparece en la ranura Próximos . Si desea rotar al nuevo certificado de CA del servidor inmediatamente, proceda con la rotación del certificado de CA del servidor actualizando sus clientes y completando la rotación.

Para instancias que utilizan certificados de servidor emitidos por una CA compartida :

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

    Ir a Instancias de Cloud SQL

  2. Para abrir la página Descripción general de una instancia, haga clic en el nombre de la instancia.
  3. Haga clic en Conexiones en el menú de navegación de SQL.
  4. Seleccione la pestaña Seguridad .
  5. Vaya a la sección Administrar certificados de servidor .
  6. Haga clic para expandir Administrar certificados .
  7. Haga clic en Crear certificado de servidor .

El nuevo certificado de servidor aparece en la ranura "Próximos" . Si desea usarlo inmediatamente, proceda con la rotación de certificados de servidor actualizando sus clientes y completando la rotación.

nube g

Para instancias que utilizan certificados de servidor autofirmados (CA por instancia) :

  1. Para obtener información sobre el certificado del servidor, utilice 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, utilice el comando sql ssl server-ca-certs create :
    gcloud sql ssl server-ca-certs create \
    --instance=INSTANCE_NAME
  3. Descargue 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. Actualice todos sus clientes para usar la nueva información copiando el archivo descargado a las máquinas host de sus clientes y reemplazando los archivos server-ca.pem existentes.

Para instancias que utilizan certificados de servidor emitidos por una CA compartida :

  1. Para obtener información sobre el certificado del servidor, utilice el comando sql ssl server-certs list :
    gcloud sql ssl server-certs list \
       --instance=INSTANCE_NAME
  2. Para crear un certificado de servidor, utilice el comando sql ssl server-certs create :
    gcloud sql ssl server-certs create \
       --instance=INSTANCE_NAME
  3. Descargue 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. Actualice todos sus clientes para usar la nueva información copiando el archivo descargado a las máquinas host de sus clientes y reemplazando los archivos server-ca.pem existentes.

Terraformar

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

  1. Agregue lo siguiente a su 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 , ejecute el siguiente comando:
       terraform output db_latest_ca_cert > server-ca.pem
       

Certificados de cliente

Crear un nuevo certificado de cliente

Puede crear hasta 10 certificados de cliente para cada instancia. Para crearlos, debe tener el rol de Cloud SQL Admin .

A continuación se detallan algunos aspectos importantes que debe saber sobre los certificados de cliente:

  • Si pierde la clave privada de un certificado, deberá crear uno nuevo; la clave privada no se puede recuperar.
  • De forma predeterminada, el certificado de cliente tiene una fecha de vencimiento de 10 años.
  • No se le notifica cuando los certificados de cliente están próximos a vencer.
  • Su instancia de Cloud SQL debe estar en estado de ejecución para crear un certificado SSL.

Consola

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

    Ir a Instancias de Cloud SQL

  2. Para abrir la página Descripción general de una instancia, haga clic en el nombre de la instancia.
  3. Haga clic en Conexiones en el menú de navegación de SQL.
  4. Seleccione la pestaña Seguridad .
  5. Haga clic en Crear certificado de cliente .
  6. En el cuadro de diálogo Crear un certificado de cliente , agregue un nombre único.
  7. Haga clic en Crear .
  8. En la primera sección del cuadro de diálogo Nuevo certificado SSL creado , haga clic en Descargar client-key.pem para descargar la clave privada a un archivo llamado client-key.pem .
  9. En la segunda sección, haga clic en Descargar client-cert.pem para descargar el certificado de cliente a un archivo llamado client-cert.pem .
  10. En la tercera sección, haga clic en Descargar server-ca.pem para descargar el certificado del servidor a un archivo llamado server-ca.pem .
  11. Haga clic en Cerrar .

nube g

  1. Cree un certificado de cliente utilizando el comando ssl client-certs create :

    gcloud sql ssl client-certs create CERT_NAME client-key.pem \
    --instance=INSTANCE_NAME
  2. Recupere la clave pública del certificado que acaba de crear y cópiela en el archivo client-cert.pem con el comando ssl client-certs describe :

    gcloud sql ssl client-certs describe CERT_NAME \
    --instance=INSTANCE_NAME \
    --format="value(cert)" > client-cert.pem
  3. Copie el certificado del servidor en el archivo server-ca.pem usando el comando instances describe :

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

Terraformar

Para crear un certificado de cliente, utilice un recurso de Terraform :

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

REST versión 1

  1. Cree un certificado SSL/TLS y asígnele un nombre único para esta instancia:

    Antes de utilizar cualquiera de los datos solicitados, realice las siguientes sustituciones:

    • project-id : El ID del proyecto
    • instance-id : El ID de la instancia
    • client-cert-name : El nombre del certificado del cliente

    Método HTTP y URL:

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

    Cuerpo JSON de la solicitud:

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

    Para enviar su solicitud, expanda una de estas opciones:

    Debería recibir una respuesta JSON similar a la siguiente:

  2. Copie todo el contenido del certificado dentro de las comillas (pero no las comillas en sí) de la respuesta en archivos locales de la siguiente manera:
    1. Copie serverCaCert.cert en server-ca.pem .
    2. Copie clientCert.cert en client-cert.pem .
    3. Copie certPrivateKey en client-key.pem .
  3. Antes de utilizar cualquiera de los datos solicitados, realice las siguientes sustituciones:

    • project-id : El ID del proyecto
    • instance-id : El ID de la instancia
    • activation-policy : La política de activación es SIEMPRE o NUNCA

    Método HTTP y URL:

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

    Cuerpo JSON de la solicitud:

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

    Para enviar su solicitud, expanda una de estas opciones:

    Debería recibir una respuesta JSON similar a la siguiente:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
      "status": "PENDING",
      "user": "[email protected]",
      "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. Cree un certificado SSL/TLS y asígnele un nombre único para esta instancia:

    Antes de utilizar cualquiera de los datos solicitados, realice las siguientes sustituciones:

    • project-id : El ID del proyecto
    • instance-id : El ID de la instancia
    • client-cert-name : El nombre del certificado del cliente

    Método HTTP y URL:

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

    Cuerpo JSON de la solicitud:

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

    Para enviar su solicitud, expanda una de estas opciones:

    Debería recibir una respuesta JSON similar a la siguiente:

  2. Copie todo el contenido del certificado dentro de las comillas (pero no las comillas en sí) de la respuesta en archivos locales de la siguiente manera:
    1. Copie serverCaCert.cert en server-ca.pem .
    2. Copie clientCert.cert en client-cert.pem .
    3. Copie certPrivateKey en client-key.pem .
  3. Antes de utilizar cualquiera de los datos solicitados, realice las siguientes sustituciones:

    • project-id : El ID del proyecto
    • instance-id : El ID de la instancia
    • activation-policy : La política de activación es SIEMPRE o NUNCA

    Método HTTP y URL:

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

    Cuerpo JSON de la solicitud:

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

    Para enviar su solicitud, expanda una de estas opciones:

    Debería recibir una respuesta JSON similar a la siguiente:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
      "status": "PENDING",
      "user": "[email protected]",
      "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"
    }
    

En este punto, tienes:

  • Un certificado de servidor guardado como server-ca.pem .
  • Un certificado de clave pública de cliente guardado como client-cert.pem .
  • Una clave privada de cliente guardada como client-key.pem .

Según la herramienta que utilice para conectarse, estos tres elementos se especifican de forma diferente. Por ejemplo, al conectarse mediante un cliente MySQL, estos tres archivos son los valores para las opciones de comando --ssl-ca , --ssl-cert y --ssl-key , respectivamente. Para ver un ejemplo de conexión con un cliente MySQL y SSL/TLS, consulte Conexión con un cliente MySQL .

Verificación de identidad del servidor

La verificación de la identidad del servidor depende de la configuración de la jerarquía de la autoridad de certificación (CA) del servidor de su instancia de Cloud SQL.

En las instancias que utilizan una CA individual, la verificación de la CA también verifica la identidad del servidor, ya que cada instancia tiene una CA única. En las instancias que utilizan una CA compartida, es necesario verificar el nombre de host junto con la CA para verificar la identidad del servidor, ya que las CA del servidor se comparten entre las instancias.

Si tiene una CA por instancia, puede realizar la verificación de identidad del servidor basada en nombres DNS solo para las instancias configuradas con Conexión de Servicio Privado. Si tiene una CA compartida, puede realizar la verificación de identidad del servidor basada en nombres DNS para todos los tipos de instancias, es decir, Conexión de Servicio Privado , Acceso a Servicio Privado e instancias con IP pública.

Si está utilizando una CA administrada por el cliente, puede verificar la cadena de confianza de la CA y realizar una verificación de identidad del servidor basada en nombres DNS para cualquier tipo de instancia que utilice una CA administrada por el cliente para su serverCAmode .

Al seleccionar la opción de CA administrada por el cliente para su instancia, puede insertar nombres DNS personalizados en el campo SAN del certificado del servidor. Para obtener más información, consulte Editar un campo SAN personalizado .

Puede ver qué jerarquía de CA está configurada para una instancia de Cloud SQL consultando los detalles de la instancia. Para obtener más información, consulte Ver información de la instancia .

Habilitar la verificación de identidad del servidor

Si selecciona CA compartida como el modo de CA del servidor de su instancia de Cloud SQL o si configura nombres DNS personalizados usando valores SAN personalizados , le recomendamos que también habilite la verificación de identidad del servidor.

Las instancias que usan una CA compartida como modo de CA del servidor contienen el nombre DNS de la instancia en el campo Nombre Alternativo del Sujeto (SAN) del certificado del servidor. Puede obtener este nombre DNS mediante la API de búsqueda de instancias y utilizando la respuesta como nombre de host para la verificación de identidad del servidor. Debe configurar la resolución DNS para el nombre DNS.

Para habilitar la verificación de identidad del servidor para una instancia que utiliza una CA compartida, complete los siguientes pasos:

  1. Recuperar el nombre DNS.

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

      gcloud sql instances describe INSTANCE_NAME \
        --project=PROJECT_ID

      Realice las siguientes sustituciones:

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

      Configuración de red Formato de nombre DNS Nivel de nombre
      Conexión de servicio privado o dirección IP pública INSTANCE_UID . PROJECT_DNS_LABEL . REGION_NAME .sql.goog.

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

      Ejemplo :
      1a23b4cd5e67.1a2b345c6d27.us-central1.sql-psa.goog.
      Instancia
  2. Cree el registro DNS en una zona DNS . Si se conecta de forma privada, cree el registro DNS en una zona DNS privada de la red de nube virtual privada (VPC) correspondiente.

  3. Al conectarse a la instancia de Cloud SQL para MySQL, configure el nombre DNS como nombre de host. A continuación, habilite la verificación de identidad del servidor en su cliente.

    Por ejemplo, al usar el cliente MySQL, especifique el indicador --ssl-mode=VERIFY_IDENTITY . Otros controladores de cliente MySQL tienen indicadores de configuración similares.

¿Qué sigue?