En esta página se describe cómo implementar obligatoriamente el cifrado SSL/TLS en una instancia para asegurarse de que todas las conexiones estén cifradas. También puedes consultar más información sobre cómo usa Cloud SQL los certificados SSL/TLS autogestionados para conectarse de forma segura a las instancias de Cloud SQL.
Información general
Cloud SQL crea un certificado de servidor automáticamente cuando creas tu instancia. Te recomendamos que obligues a que todas las conexiones usen SSL/TLS.
SQL Server solo realiza la verificación de certificados cuando la solicitud del cliente especifica explícitamente que requiere una conexión cifrada. En este caso, el certificado de servidor debe instalarse en el equipo cliente. De lo contrario, los clientes podrán conectarse libremente sin tener que hacer cambios adicionales en sus cadenas de conexión o certificados, aunque configures la instancia consslMode
en ENCRYPTED_ONLY
.
Para obtener más información, consulta la sección Habilitar conexiones cifradas al motor de base de datos de la documentación de SQL Server.
Si aplicas SSL en una instancia, esta deberá reiniciarse. También es posible que tengas que reiniciar el servidor después de cambiar los certificados SSL o TLS. Si es necesario reiniciar la instancia, Cloud SQL lo hará automáticamente. El reinicio de una instancia puede provocar un tiempo de inactividad.Implementar obligatoriamente el cifrado SSL/TLS
Puedes usar la opción Modo SSL para aplicar el cifrado SSL de las siguientes formas:
Permite conexiones no SSL/no TLS y SSL/TLS. Este es el valor predeterminado.
Solo se permiten las conexiones cifradas con SSL/TLS.
Si seleccionas Permitir conexiones SSL/TLS y no SSL/TLS para tu instancia de Cloud SQL, se aceptarán las conexiones SSL/TLS, así como las conexiones no cifradas y no seguras. Si no necesitas SSL/TLS para todas las conexiones, se seguirán permitiendo las conexiones sin cifrar. Por este motivo, si accedes a tu instancia mediante una IP pública, te recomendamos que apliques SSL a todas las conexiones.
Puedes conectarte directamente a las instancias mediante certificados SSL/TLS o con el proxy de autenticación de Cloud SQL o los conectores de Cloud SQL. Si te conectas mediante el proxy de autenticación de Cloud SQL o los conectores de Cloud SQL, las conexiones se cifran automáticamente con SSL/TLS. Con el proxy de autenticación de Cloud SQL y los conectores de Cloud SQL, las identidades de cliente y servidor también se verifican automáticamente independientemente del modo SSL.
Al aplicar SSL, se asegura de que todas las conexiones estén cifradas.Para habilitar la opción que requiere SSL/TLS, haz lo siguiente:
Consola
-
En la Google Cloud consola, ve a la página Instancias de Cloud SQL.
- Para abrir la página Overview (Resumen) de una instancia, haz clic en su nombre.
- En el menú de navegación de SQL, haz clic en Conexiones.
- Selecciona la pestaña Seguridad.
- Selecciona una de las opciones siguientes:
- Permitir el tráfico de red sin cifrar (no recomendado)
- Permitir solo conexiones SSL. Esta opción solo permite conexiones que usen cifrado SSL/TLS.
gcloud
gcloud sql instances patch INSTANCE_NAME \ --ssl-mode=SSL_ENFORCEMENT_MODE
Sustituye SSL_ENFORCEMENT_MODE por una de las siguientes opciones:
ALLOW_UNENCRYPTED_AND_ENCRYPTED
permite conexiones no SSL/no TLS y SSL/TLS. Este es el valor predeterminado.ENCRYPTED_ONLY
solo permite conexiones cifradas con SSL/TLS.
Terraform
Para implementar obligatoriamente el cifrado SSL/TLS, usa un recurso de Terraform:
Aplica los cambios
Para aplicar la configuración de Terraform en un proyecto, sigue los pasos que se indican en las siguientes secciones. Google Cloud
Preparar Cloud Shell
- Abre Cloud Shell.
-
Define el Google Cloud proyecto Google Cloud predeterminado en el que quieras aplicar tus configuraciones de Terraform.
Solo tiene que ejecutar este comando una vez por proyecto y puede hacerlo en cualquier directorio.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Las variables de entorno se anulan si defines 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).
-
En Cloud Shell, crea un directorio y un archivo nuevo en ese directorio. El nombre del archivo debe tener la extensión
.tf
. Por ejemplo,main.tf
. En este tutorial, nos referiremos al archivo comomain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si estás siguiendo un tutorial, puedes copiar el código de ejemplo de cada sección o paso.
Copia el código de ejemplo en el archivo
main.tf
que acabas de crear.También puedes copiar el código de GitHub. Se recomienda cuando el fragmento de Terraform forma parte de una solución integral.
- Revisa y modifica los parámetros de ejemplo para aplicarlos a tu entorno.
- Guarda los cambios.
-
Inicializa Terraform. Solo tienes que hacerlo una vez por directorio.
terraform init
Si quieres usar la versión más reciente del proveedor de Google, incluye la opción
-upgrade
:terraform init -upgrade
Aplica los cambios
-
Revisa la configuración y comprueba que los recursos que va a crear o actualizar Terraform se ajustan a tus expectativas:
terraform plan
Haga las correcciones necesarias en la configuración.
-
Aplica la configuración de Terraform ejecutando el siguiente comando e introduciendo
yes
en la petición:terraform apply
Espera hasta que Terraform muestre el mensaje "Apply complete!".
- Abre tu Google Cloud proyecto para ver los resultados. En la Google Cloud consola, ve a tus recursos en la interfaz de usuario para asegurarte de que Terraform los ha creado o actualizado.
Eliminar los cambios
Para eliminar los cambios, sigue estos pasos:
- Para inhabilitar la protección contra la eliminación, en el archivo de configuración de Terraform, asigna el valor
false
al argumentodeletion_protection
.deletion_protection = "false"
- Aplica la configuración de Terraform actualizada ejecutando el siguiente comando e introduciendo
yes
en la petición:terraform apply
-
Para quitar los recursos que se hayan aplicado anteriormente con tu configuración de Terraform, ejecuta el siguiente comando e introduce
yes
en la petición:terraform destroy
REST v1
-
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
- 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 cifradas con SSL/TLS.
- INSTANCE_ID: el ID de 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, despliega una de estas opciones:
Deberías recibir una respuesta JSON similar a la siguiente:
REST v1beta4
-
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
- 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 cifradas con SSL/TLS.
- INSTANCE_ID: el ID de 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, despliega una de estas opciones:
Deberías recibir una respuesta JSON similar a la siguiente:
Certificados de servidor
Cloud SQL crea un certificado de servidor de forma automática cuando se crea la instancia. Mientras el certificado de servidor sea válido, no es necesario que gestiones activamente tu certificado de servidor. Cloud SQL te permite elegir entre tres jerarquías de autoridades de certificación (AC) diferentes. La jerarquía de AC que selecciones se convertirá en el modo de AC del servidor de la instancia. Si usas una AC por instancia como modo de AC de servidor para tu instancia, los certificados de servidor tienen una fecha de vencimiento de 10 años. Si usas una CA compartida o una CA gestionada por el cliente como modo de CA del servidor de tu instancia, el certificado de servidor tendrá una fecha de vencimiento de 1 año*. Una vez que haya pasado la fecha de vencimiento, el certificado de servidor dejará de ser válido y los clientes ya no podrán establecer una conexión segura con tu instancia mediante ese certificado. Si un cliente está configurado para verificar la CA 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 caducados fallarán. Para evitar interrupciones en las conexiones de los clientes, renueva el certificado del servidor antes de que caduque. Se te notifica periódicamente que el certificado del servidor está a punto de caducar. Las notificaciones se envían el siguiente número de días antes de la fecha de vencimiento: 90, 30, 10, 2 y 1.
* En el caso de las AC gestionadas por el cliente, la fecha de vencimiento del certificado de servidor puede ser inferior a 1 año si ha seleccionado una fecha de vencimiento más corta para el periodo de validez de su AC.
Listar y crear certificados de servidor
Para ver los detalles de los 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, puede ver los siguientes detalles:
- Estado del certificado: Próximo, Activo o Anterior
- Próximo: el certificado está disponible, pero no está activo. Para activar el certificado, sigue el procedimiento de rotación.
- Activo: el certificado está en uso.
- Anterior: el certificado ya no se utiliza. Para activar el certificado, utiliza el procedimiento de reversión.
- Creado: fecha y hora en que se creó el certificado.
- Caducidad: fecha y hora en las que caduca el certificado.
Antes de que caduque el certificado activo, puedes crear uno nuevo manualmente.
Consola
En las instancias que usan certificados de servidor autofirmados (AC por instancia):
-
En la Google Cloud consola, ve a la página Instancias de Cloud SQL.
- Para abrir la página Overview (Resumen) de una instancia, haz clic en su nombre.
- En el menú de navegación de SQL, haz clic en Conexiones.
- Selecciona la pestaña Seguridad.
- Ve a la sección Gestionar certificados de AC del servidor.
- Haz clic en Gestionar certificados para desplegarlo.
- Haz clic en Crear certificado de CA.
El nuevo certificado AC del servidor aparece en la ranura Próximo. Si quieres cambiar al nuevo certificado AC del servidor inmediatamente, sigue los pasos para rotar el certificado AC del servidor actualizando tus clientes y completando la rotación.
En las instancias que usan certificados de servidor emitidos por una AC compartida:
-
En la Google Cloud consola, ve a la página Instancias de Cloud SQL.
- Para abrir la página Overview (Resumen) de una instancia, haz clic en su nombre.
- En el menú de navegación de SQL, haz clic en Conexiones.
- Selecciona la pestaña Seguridad.
- Ve a la sección Gestionar certificados de servidor.
- Haz clic en Gestionar certificados para desplegarlo.
- Haz clic en Crear certificado de servidor.
El nuevo certificado de servidor aparece en la sección Próximo. Si quieres usar el nuevo certificado de servidor inmediatamente, realiza la rotación del certificado de servidor actualizando tus clientes y completando la rotación.
gcloud
En las instancias que usan certificados de servidor autofirmados (AC por instancia):
- Para obtener información sobre el certificado de servidor, usa el comando sql ssl server-ca-certs list:
gcloud sql ssl server-ca-certs list \ --instance=INSTANCE_NAME
- 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
- Descarga la información del certificado en un archivo PEM local:
gcloud sql ssl server-ca-certs list \ --format="value(cert)" \ --instance=INSTANCE_NAME > \ FILE_PATH/FILE_NAME.pem
- Actualiza todos tus clientes para que usen la nueva información copiando el archivo descargado en los hosts de tus clientes y sustituyendo los archivos
server-ca.pem
.
En las instancias que usan certificados de servidor emitidos por una AC compartida:
- Para obtener información sobre el certificado de servidor, usa el comando sql ssl server-certs list:
gcloud sql ssl server-certs list \ --instance=INSTANCE_NAME
- Para crear un certificado de servidor, usa el comando sql ssl server-certs create:
gcloud sql ssl server-certs create \ --instance=INSTANCE_NAME
- Descarga la información del certificado en un archivo PEM local:
gcloud sql ssl server-certs list \ --format="value(ca_cert.cert)" \ --instance=INSTANCE_NAME > \ FILE_PATH/FILE_NAME.pem
- Actualiza todos tus clientes para que usen la nueva información copiando el archivo descargado en los hosts de tus clientes y sustituyendo los archivos
server-ca.pem
.
Terraform
Para proporcionar información sobre el certificado del servidor como salida, usa una fuente de datos de Terraform:
- Añade lo siguiente a tu 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 }
- Para crear el archivo
server-ca.pem
, ejecuta el siguiente comando:terraform output db_latest_ca_cert > server-ca.pem
Usar conexiones cifradas
Consulta más información sobre cómo usa SQL Server las conexiones cifradas.
Verificación de la 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 (AC) del servidor de tu instancia de Cloud SQL.
En el caso de las instancias que usan una CA por instancia, al verificar la CA también se verifica la identidad del servidor, ya que cada instancia tiene una CA única. En las instancias que usan una AC compartida, es necesario verificar el nombre de host y la AC para verificar la identidad del servidor, ya que las ACs del servidor se comparten entre instancias.
Si tienes una AC por instancia, solo puedes realizar la verificación de la identidad del servidor basada en el nombre DNS en las instancias configuradas con Private Service Connect. Si tienes una AC compartida, puedes verificar la identidad del servidor basada en el nombre de DNS para todos los tipos de instancias, es decir, Private Service Connect, acceso a servicios privados e instancias de IP públicas.
Si usas una AC gestionada por el cliente, puedes verificar la cadena de confianza de la AC y realizar la verificación de la identidad del servidor basada en el nombre de DNS para cualquier tipo de instancia que use una AC gestionada por el cliente para su serverCAmode
.
Cuando seleccionas la opción de AC gestionada por el cliente para tu instancia, puedes insertar nombres DNS personalizados en el campo SAN del certificado de servidor. Para obtener más información, consulta el artículo Editar un campo SAN personalizado.
Para ver qué jerarquía de CA está configurada en una instancia de Cloud SQL, consulta los detalles de la instancia. Para obtener más información, consulta Ver información de la instancia.
Habilitar la verificación de identidad del servidor
Si seleccionas la AC compartida como modo de AC del servidor de tu instancia de Cloud SQL o configuras nombres DNS personalizados con valores SAN personalizados, te recomendamos que también habilites la verificación de la identidad del servidor.
Las instancias que usan una AC compartida como modo de AC de servidor contienen el nombre DNS de la instancia en el campo Nombre alternativo del sujeto (SAN) del certificado de servidor. Puedes obtener este nombre de DNS mediante la API de búsqueda de instancias y usar la respuesta como nombre de host para verificar la identidad del servidor. Debes configurar la resolución de DNS para el nombre de DNS.
Para habilitar la verificación de la identidad del servidor en una instancia que usa una CA compartida, sigue estos pasos:
Recupera el nombre de DNS.
Para ver información de resumen sobre una instancia de Cloud SQL, incluido el nombre DNS de la instancia, usa el comando
gcloud sql instances describe
:gcloud sql instances describe INSTANCE_NAME \ --project=PROJECT_ID
Haz las siguientes sustituciones:
- INSTANCE_NAME: el nombre de la instancia de Cloud SQL
- PROJECT_ID: el ID o el número de proyecto del Google Cloud proyecto que contiene la instancia
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 de 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
Crea el registro DNS en una zona DNS. Si te conectas de forma privada, crea el registro DNS en una zona DNS privada de la red de nube privada virtual (VPC) correspondiente.
Cuando te conectes a la instancia de Cloud SQL para SQL Server, configura el nombre DNS o la dirección IP como nombre de host. A continuación, habilita la verificación de la identidad del servidor especificando la marca
-N
parasqlcmd
o seleccionando la opción Cifrar conexión/Cifrado de SSMS.Otros controladores de SQL Server tienen marcas o configuraciones similares.
Siguientes pasos
- Gestionar certificados SSL/TLS en tu instancia de Cloud SQL.
- Consulta más información sobre cómo se gestiona el cifrado en Google Cloud.