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 (server-ca.pem
) automáticamente cuando se crea la instancia. Te recomendamos aplicar todas las conexiones para que usen SSL/TLS.
sslMode
establecido en ENCRYPTED_ONLY
.
Para obtener más información, consulta la sección Habilitación de conexiones cifradas en el Motor de base de datos de 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
-
En la consola de Google Cloud, ve a la página Instancias de Cloud SQL.
- Para abrir la página de Descripción general de una instancia, haz clic en su nombre.
- Haz clic en Conexiones en el Menú de navegación de SQL.
- Selecciona la pestaña Seguridad.
- 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:
Aplica 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
- Inicia Cloud Shell
-
Establece el proyecto de Google Cloud predeterminado en el que deseas aplicar tus 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 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).
-
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 denominamain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
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.
- Revisa y modifica los parámetros de muestra que se aplicarán a tu entorno.
- Guarda los cambios.
-
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
-
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.
-
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!”.
- 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:
- Para inhabilitar la protección contra la eliminación, en tu archivo de configuración de Terraform, establece el argumento
deletion_protection
enfalse
.deletion_protection = "false"
- Para aplicar la configuración actualizada de Terraform, ejecuta el siguiente comando y, luego, ingresa
yes
cuando se te solicite:terraform apply
-
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
-
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
-
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. Sin embargo, el certificado tiene una fecha de vencimiento de 10 años. Después de esa fecha, ya no será válido, y los clientes no podrán establecer una conexión segura a la instancia mediante ese certificado. Se te notificará de forma periódica 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.
Puedes obtener información sobre tu certificado de servidor, como la fecha de creación y su vencimiento, o crear uno nuevo de forma manual.
Console
-
En la consola de Google Cloud, ve a la página Instancias de Cloud SQL.
- Para abrir la página de Descripción general de una instancia, haz clic en su nombre.
- Haz clic en Conexiones en el Menú de navegación de SQL.
- Selecciona la pestaña Seguridad.
- Ve a la sección Administrar certificados de servidor.
Puedes ver la fecha de vencimiento de tu certificado de servidor en la tabla.
gcloud
- Obtén información sobre el certificado de servicio:
gcloud beta sql ssl server-ca-certs list \ --instance=INSTANCE_NAME
- Crea un certificado de servidor:
gcloud beta sql ssl server-ca-certs create \ --instance=INSTANCE_NAME
- Descarga la información del certificado a un archivo PEM local:
gcloud beta sql ssl server-ca-certs list \ --format="value(cert)" \ --instance=INSTANCE_NAME > \ FILE_PATH/FILE_NAME.pem
- 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 archivos
server-ca.pem
existentes.
Terraform
Para proporcionar información del certificado del servidor como resultado, usa una fuente de datos de Terraform:
- 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 }
- 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.
¿Qué sigue?
- Administra certificados SSL/TLS en la instancia de Cloud SQL.
- Obtén más información sobre cómo se maneja la encriptación en Google Cloud.