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 de forma automática cuando creas la instancia. Te recomendamos aplicar todas las conexiones para que usen SSL/TLS.
Para validar la identidad del cliente o servidor con certificados SSL/TLS, debes crear un certificado de cliente y descargar los certificados en tu máquina anfitrión de cliente PostgreSQL. Cuando aplicas SSL a una instancia, esta no requiere reiniciarse. Sin embargo, los cambios en los certificados SSL/TLS pueden provocar un reinicio automático de la instancia y pueden generar un tiempo de inactividad.Un cambio en la configuración del modo SSL solo se aplica a las conexiones nuevas. Si aplicas SSL y tu instancia tiene conexiones sin encriptar existentes, las conexiones permanecerán conectadas y sin encriptar. Para cerrar las conexiones sin encriptar y aplicar SSL en todas las conexiones, debes reiniciar tu instancia.
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. El certificado de cliente no está verificado para las conexiones SSL/TLS. Esta es la opción predeterminada.
Solo permite conexiones encriptadas con SSL/TLS. El certificado de cliente no está verificado para las conexiones SSL.
- Solo permite conexiones encriptadas con SSL/TLS y con certificados de cliente válidos.
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.
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. Los certificados no se validan.
- Exigir certificados de cliente de confianza Esta opción solo permite conexiones de clientes que usan un certificado de cliente válido y se encriptan con SSL. Si un cliente o un usuario se conecta a través de la autenticación de bases de datos de IAM, debe usar el proxy de autenticación de Cloud SQL o los conectores de Cloud SQL para aplicar la verificación de identidad del cliente.
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. Para las conexiones SSL, el certificado de cliente no está verificado. Este es el valor predeterminado.ENCRYPTED_ONLY
: solo permite conexiones encriptadas con SSL/TLS. El certificado de cliente no está verificado para las conexiones SSL.TRUSTED_CLIENT_CERTIFICATE_REQUIRED
: solo permite conexiones encriptadas con SSL/TLS y con certificados de cliente válidos. Si un cliente o un usuario se conecta a través de la autenticación de bases de datos de IAM, debe usar el proxy de autenticación de Cloud SQL o los conectores de Cloud SQL para aplicar la verificación de identidad del cliente. Si deseas obtener más información, consulta Configuración de Cloud SQL para PostgreSQL.
Terraform
Para aplicar la encriptación SSL/TLS, usa un recurso de Terraform:
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
- 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. Para las conexiones SSL, el certificado de cliente no está verificado. Este es el valor predeterminado.ENCRYPTED_ONLY
: solo permite conexiones encriptadas con SSL/TLS.TRUSTED_CLIENT_CERTIFICATE_REQUIRED
: solo permite conexiones encriptadas con SSL/TLS y con certificados de cliente válidos. Si un cliente o un usuario se conecta a través de la autenticación de bases de datos de IAM, debe usar el proxy de autenticación de Cloud SQL o los conectores de Cloud SQL para aplicar la verificación de identidad del cliente.
- 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. Para las conexiones SSL, el certificado de cliente no está verificado. Este es el valor predeterminado.ENCRYPTED_ONLY
: solo permite conexiones encriptadas con SSL/TLS.TRUSTED_CLIENT_CERTIFICATE_REQUIRED
: solo permite conexiones encriptadas con SSL/TLS y con certificados de cliente válidos. Si un cliente o un usuario se conecta a través de la autenticación de bases de datos de IAM, debe usar el proxy de autenticación de Cloud SQL o los conectores de Cloud SQL para aplicar la verificación de identidad del cliente.
- 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 dos jerarquías de autoridades certificadoras (AC) diferentes. La jerarquía de AC que selecciones se convertirá en el modo de AC del servidor de la instancia. Si usas la AC por instancia como el modo de AC del servidor para tu instancia, los certificados del servidor tienen una fecha de vencimiento de 10 años. Si usas una AC compartida como el modo de AC del servidor de tu instancia (versión preliminar), 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 con tu instancia mediante 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 interrupciones en las conexiones de los clientes, rota el certificado del servidor antes de que venza. 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. Antes de la fecha de vencimiento, puedes crear una nueva 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
Para instancias que usan certificados de servidor autofirmados (AC por instancia):
- 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
- 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 a un archivo PEM local:
gcloud 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.
Para instancias que usan certificados de servidor emitidos por una AC compartida (versión preliminar):
- Para obtener información sobre el certificado del servidor, usa el comando beta sql ssl server-certs list:
gcloud beta sql ssl server-certs list \ --instance=INSTANCE_NAME
- Para crear un certificado de servidor, usa el comando beta sql ssl server-certs create:
gcloud beta sql ssl server-certs create \ --instance=INSTANCE_NAME
- Descarga la información del certificado a un archivo PEM local:
gcloud beta sql ssl server-certs list \ --format="value(ca_cert.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
Certificados de clientes
Crea un nuevo certificado de cliente
Puedes crear hasta 10 certificados de cliente por instancia. Para crear certificados de cliente, debes tener el rol de IAM Cloud SQL Admin
.
A continuación, se indican algunos aspectos importantes que debes conocer sobre los certificados de cliente:
- Si pierdes la clave privada de un certificado, debes crear una nueva; la clave privada no se puede recuperar.
- De forma predeterminada, el certificado de cliente tiene una fecha de vencimiento de 10 años.
- No recibes notificaciones cuando los certificados de cliente se están acercando al vencimiento.
- La instancia de Cloud SQL debe estar en estado de ejecución para crear un certificado SSL.
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.
- Haz clic en Crear certificado de cliente.
- En el diálogo Crear un certificado de cliente, agrega un nombre único.
- Haz clic en Crear.
- En la primera sección del diálogo Se creó un nuevo certificado SSL, haz clic en Descargar client-key.pem para descargar la clave privada en un archivo llamado
client-key.pem
. - En la segunda sección, haz clic en Descargar client-cert.pem para descargar el certificado de cliente en un archivo llamado
client-cert.pem
. - En la tercera sección, haz clic en Descargar server-ca.pem para descargar el certificado de servidor en un archivo llamado
server-ca.pem
. - Haz clic en Cerrar.
gcloud
Crea un certificado de cliente mediante el comando
ssl client-certs create
:gcloud sql ssl client-certs create CERT_NAME client-key.pem \ --instance=INSTANCE_NAME
Recupera la clave pública del certificado que acabas de crear y cópiala en el archivo
client-cert.pem
con el comandossl client-certs describe
:gcloud sql ssl client-certs describe CERT_NAME \ --instance=INSTANCE_NAME \ --format="value(cert)" > client-cert.pem
Copia el certificado de servidor en el archivo
server-ca.pem
con el comandoinstances describe
:gcloud sql instances describe INSTANCE_NAME \ --format="value(serverCaCert.cert)" > server-ca.pem
Terraform
Para crear un certificado de cliente, usa un recurso de Terraform:
REST v1
Crea un certificado SSL/TLS y asígnale un nombre único para esta instancia:
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- project-id: el ID del proyecto
- instance-id: El ID de la instancia
- client-cert-name: El nombre del certificado de 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 tu solicitud, expande una de estas opciones:
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
- Copia todo el contenido del certificado que está entre comillas en la respuesta (pero no copies las comillas) en los archivos locales, como se indica a continuación:
- Copia
serverCaCert.cert
enserver-ca.pem
. - Copia
clientCert.cert
enclient-cert.pem
. - Copia
certPrivateKey
enclient-key.pem
.
- Copia
REST v1beta4
Crea un certificado SSL/TLS y asígnale un nombre único para esta instancia:
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- project-id: el ID del proyecto
- instance-id: El ID de la instancia
- client-cert-name: El nombre del certificado de 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 tu solicitud, expande una de estas opciones:
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
- Copia todo el contenido del certificado que está entre comillas en la respuesta (pero no copies las comillas) en los archivos locales, como se indica a continuación:
- Copia
serverCaCert.cert
enserver-ca.pem
. - Copia
clientCert.cert
enclient-cert.pem
. - Copia
certPrivateKey
enclient-key.pem
.
- Copia
En este punto tendrás los siguientes elementos:
- 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
sslrootcert
, sslcert
y sslkey
en la string de conexión de psql. Si deseas ver un ejemplo de conexión mediante un cliente psql y SSL/TLS, consulta Conéctate con un cliente psql.
Acerca de la 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.
Si tu instancia está configurada para usar la AC por instancia, verificar la AC también verifica la identidad del servidor, ya que cada instancia tiene una AC única.
Si tu instancia está configurada para usar la AC compartida (versión preliminar), se requiere verificar el nombre de host junto con la AC para la verificación de identidad del servidor, ya que las AC del servidor se comparten entre instancias.
Si tienes una AC por instancia, solo puedes realizar la verificación de identidad del servidor basada en el nombre de DNS para las instancias de Private Service Connect.
Si tienes una AC compartida (versión preliminar), puedes realizar la verificación de identidad del servidor basada en el nombre DNS para todos los tipos de instancias, como Private Service Connect, acceso a servicios privados e instancias de IP públicas.
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 Cómo ver la información de la instancia o la siguiente sección, Cómo habilitar la verificación de identidad del servidor.
Habilita la verificación de identidad del servidor
Si seleccionas AC compartidas como el modo de AC del servidor de tu instancia de Cloud SQL (Versión preliminar), te recomendamos que también habilites la verificación de identidad del servidor. Las instancias que usan la AC compartida como el modo de AC del servidor contienen el nombre de DNS de la instancia en el campo Nombre alternativo del asunto (SAN) del certificado del servidor. Puedes obtener este nombre de DNS con la API de búsqueda de instancias y usar la respuesta como 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, completa los siguientes pasos:
Recupera el nombre de DNS.
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
En la respuesta, verifica que aparezca el nombre de DNS. Este nombre tiene el siguiente patrón:
INSTANCE_UID.PROJECT_DNS_LABEL.REGION_NAME.sql.goog.
Por ejemplo:
1a23b4cd5e67.1a2b345c6d27.us-central1.sql.goog.
Crea el registro DNS en una zona de 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.
Cuando te conectes a la instancia de Cloud SQL para PostgreSQL, configura el nombre de DNS como el nombre de host. Luego, habilita la verificación de identidad del servidor en tu cliente.
Por ejemplo, cuando uses el cliente
psql
, especifica la marcasslmode=verify-full
. Otros controladores de clientes de PostgreSQL tienen marcas de configuración similares.
¿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.
- Conéctate a la instancia de Cloud SQL mediante certificados SSL/TLS.
- Obtén más información sobre cómo PostgreSQL usa certificados SSL/TLS.