Configurar certificados SSL/TLS

Esta página descreve como aplicar a criptografia SSL/TLS a uma instância para garantir que todas as conexões sejam criptografadas. Saiba como o Cloud SQL usa certificados SSL/TLS autogerenciados para se conectar a instâncias do Cloud SQL com segurança.

Visão geral

O Cloud SQL cria um certificado de servidor automaticamente quando você cria a instância. Recomendamos que você imponha todas as conexões para usar SSL/TLS.

As conexões do SQL Server são criptografadas por padrão e exigem verificação de certificado.

Os seguintes drivers têm a criptografia ativada por padrão:

As versões anteriores de alguns drivers podem ter a criptografia desativada por padrão.

É necessário instalar o certificado do servidor na máquina cliente ou transmitir a flag TrustServerCertificate=true na string de conexão do cliente. Para mais informações, consulte Driver ODBC 18.0 para SQL Server lançado.

Caso contrário, os clientes poderão se conectar livremente sem outras mudanças nas strings de conexão ou nos certificados, mesmo que você configure a instância com sslMode definido como ENCRYPTED_ONLY.

Para mais informações, consulte a seção Ativar conexões criptografadas com o mecanismo de banco de dados na documentação do SQL Server.

Se você aplicar o SSL em uma instância, ela precisará ser reiniciada. Uma reinicialização também pode ser necessária depois que você alterar os certificados SSL/TLS. Quando uma reinicialização é necessária, o Cloud SQL reinicia a instância automaticamente para você. A reinicialização de uma instância pode gerar inatividade.

Aplicar criptografia SSL/TLS

Use a configuração modo SSL para aplicar a criptografia SSL das seguintes maneiras:

  • Permita conexões SSL/TLS e não SSL/não TLS. Esse é o padrão.

  • Permitir apenas conexões criptografadas com SSL/TLS.

Se você selecionar Permitir conexões não SSL/não TLS e SSL/TLS para a instância do Cloud SQL, serão aceitas tanto as conexões SSL/TLS quanto as não criptografadas e não seguras. Se você não exigir SSL/TLS para todas as conexões, ainda serão permitidas conexões não criptografadas. Por esse motivo, se você estiver acessando a instância usando um IP público, recomendamos que aplique SSL a todas as conexões.

É possível se conectar diretamente às instâncias usando certificados SSL/TLS ou usando o proxy de autenticação do Cloud SQL ou os conectores do Cloud SQL. Se você se conectar usando o proxy de autenticação do Cloud SQL ou os conectores do Cloud SQL, as conexões serão criptografadas automaticamente com SSL/TLS. Com o proxy de autenticação do Cloud SQL e os conectores do Cloud SQL, as identidades de cliente e servidor também são verificadas automaticamente, independentemente da configuração do modo SSL.

A aplicação de SSL garante que todas as conexões sejam criptografadas.

Para ativar a solicitação de SSL/TLS, faça o seguinte:

Console

  1. No console do Google Cloud , acesse a página Instâncias do Cloud SQL.

    Acesse "Instâncias do Cloud SQL"

  2. Para abrir a página Visão geral de uma instância, clique no nome da instância.
  3. Clique em Conexões no menu de navegação do SQL.
  4. Selecione a guia Segurança.
  5. Selecione uma destas opções:
    • Permitir tráfego de rede não criptografado (não recomendado)
    • Permitir somente conexões SSL. Essa opção só permite conexões que usam criptografia SSL/TLS.

gcloud

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

Substitua SSL_ENFORCEMENT_MODE por uma das seguintes opções:

  • ALLOW_UNENCRYPTED_AND_ENCRYPTED permite conexões não SSL/não TLS e SSL/TLS. Esse é o valor padrão.
  • ENCRYPTED_ONLY só permite conexões criptografadas com SSL/TLS.

Terraform

Para aplicar a criptografia SSL/TLS, use um recurso do Terraform:

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

Aplique as alterações

Para aplicar a configuração do Terraform em um projeto do Google Cloud , conclua as etapas nas seções a seguir.

Preparar o Cloud Shell

  1. Inicie o Cloud Shell.
  2. Defina o projeto padrão do Google Cloud em que você quer aplicar as configurações do Terraform.

    Você só precisa executar esse comando uma vez por projeto, e ele pode ser executado em qualquer diretório.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    As variáveis de ambiente serão substituídas se você definir valores explícitos no arquivo de configuração do Terraform.

Preparar o diretório

Cada arquivo de configuração do Terraform precisa ter o próprio diretório, também chamado de módulo raiz.

  1. No Cloud Shell, crie um diretório e um novo arquivo dentro dele. O nome do arquivo precisa ter a extensão .tf, por exemplo, main.tf. Neste tutorial, o arquivo é chamado de main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Se você estiver seguindo um tutorial, poderá copiar o exemplo de código em cada seção ou etapa.

    Copie o exemplo de código no main.tf recém-criado.

    Se preferir, copie o código do GitHub. Isso é recomendado quando o snippet do Terraform faz parte de uma solução de ponta a ponta.

  3. Revise e modifique os parâmetros de amostra para aplicar ao seu ambiente.
  4. Salve as alterações.
  5. Inicialize o Terraform. Você só precisa fazer isso uma vez por diretório.
    terraform init

    Opcionalmente, para usar a versão mais recente do provedor do Google, inclua a opção -upgrade:

    terraform init -upgrade

Aplique as alterações

  1. Revise a configuração e verifique se os recursos que o Terraform vai criar ou atualizar correspondem às suas expectativas:
    terraform plan

    Faça as correções necessárias na configuração.

  2. Para aplicar a configuração do Terraform, execute o comando a seguir e digite yes no prompt:
    terraform apply

    Aguarde até que o Terraform exiba a mensagem "Apply complete!".

  3. Abra seu projeto do Google Cloud para ver os resultados. No console do Google Cloud , navegue até seus recursos na UI para verificar se foram criados ou atualizados pelo Terraform.

Excluir as alterações

Para excluir as mudanças, faça o seguinte:

  1. Para desativar a proteção contra exclusão, no arquivo de configuração do Terraform, defina o argumento deletion_protection como false.
    deletion_protection =  "false"
  2. Para aplicar a configuração atualizada do Terraform, execute o comando a seguir e digite yes no prompt:
    terraform apply
  1. Remova os recursos aplicados anteriormente com a configuração do Terraform executando o seguinte comando e inserindo yes no prompt:

    terraform destroy

REST v1

  1. Antes de usar os dados da solicitação, faça as seguintes substituições:

    • PROJECT_ID: o ID do projeto
    • SSL_ENFORCEMENT_MODE: Use uma das seguintes opções:
      • ALLOW_UNENCRYPTED_AND_ENCRYPTED: permite conexões não SSL/não TLS e SSL/TLS.
      • ENCRYPTED_ONLY: só permite conexões criptografadas com SSL/TLS.
    • INSTANCE_ID: o ID da instância

    Método HTTP e URL:

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

    Corpo JSON da solicitação:

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

    Para enviar a solicitação, expanda uma destas opções:

    Você vai receber uma resposta JSON semelhante a esta:

REST v1beta4

  1. Antes de usar os dados da solicitação, faça as seguintes substituições:

    • PROJECT_ID: o ID do projeto
    • SSL_ENFORCEMENT_MODE: Use uma das seguintes opções:
      • ALLOW_UNENCRYPTED_AND_ENCRYPTED: permite conexões não SSL/não TLS e SSL/TLS.
      • ENCRYPTED_ONLY: só permite conexões criptografadas com SSL/TLS.
    • INSTANCE_ID: o ID da instância

    Método HTTP e URL:

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

    Corpo JSON da solicitação:

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

    Para enviar a solicitação, expanda uma destas opções:

    Você vai receber uma resposta JSON semelhante a esta:

Certificados do servidor

O Cloud SQL cria um certificado de servidor automaticamente quando você cria a instância. Desde que o certificado do servidor seja válido, não é necessário gerenciá-lo ativamente. O Cloud SQL permite selecionar entre três hierarquias de autoridade certificadora (CA) diferentes. A hierarquia de AC selecionada se torna o modo de AC do servidor da instância. Se você estiver usando a CA por instância como o modo de CA do servidor para sua instância, os certificados do servidor terão uma data de validade de 10 anos. Se você estiver usando uma CA compartilhada ou gerenciada pelo cliente como o modo de CA do servidor da sua instância, o certificado do servidor terá uma data de validade de 1 ano*. Após a data de validade, o certificado do servidor não é mais válido, e os clientes não podem mais estabelecer uma conexão segura com a instância usando esse certificado. Se um cliente estiver configurado para verificar a CA ou o nome do host no certificado do servidor, as conexões desse cliente com instâncias do Cloud SQL com certificados de servidor expirados vão falhar. Para evitar interrupções nas conexões do cliente, ative a rotação automática de certificados do servidor ou faça a rotação manual do certificado do servidor antes que ele expire. Você vai receber notificações periódicas de que o certificado do servidor está prestes a expirar. As notificações são enviadas nos seguintes dias antes da data de validade: 90, 30, 10, 2 e 1.

* Para ACs gerenciadas pelo cliente, a data de validade do certificado do servidor pode ser inferior a 1 ano se você tiver selecionado uma data de validade mais curta para o período de validade da AC.

Listar e criar certificados de servidor

Para ver os detalhes dos certificados do servidor no console do Google Cloud , acesse a página Conexões e clique na guia Segurança.

Na tabela de certificados, é possível ver os seguintes detalhes:

  • Status do certificado:Próximo, Ativo ou Anterior
    • Futuro: o certificado está disponível para uso, mas não está ativo. Para ativar o certificado, use o procedimento de rotação.
    • Ativo: o certificado está em uso.
    • Anterior: o certificado não está mais em uso. Para ativar o certificado, use o procedimento de reversão.
  • Criado: a data e a hora em que o certificado foi criado.
  • Expira: a data e a hora em que o certificado expira.

Antes que o certificado ativo expire, é possível criar um novo manualmente.

Console

Para instâncias que usam certificados de servidor autoassinados (CA por instância):

  1. No console do Google Cloud , acesse a página Instâncias do Cloud SQL.

    Acesse "Instâncias do Cloud SQL"

  2. Para abrir a página Visão geral de uma instância, clique no nome da instância.
  3. Clique em Conexões no menu de navegação do SQL.
  4. Selecione a guia Segurança.
  5. Acesse a seção Gerenciar certificados de CA do servidor.
  6. Clique para expandir a opção Gerenciar certificados.
  7. Clique em Criar certificado de CA.

O novo certificado de CA do servidor aparece no slot Próximo. Se você quiser fazer a rotação para o novo certificado de CA do servidor imediatamente, prossiga com a rotação do certificado de CA do servidor atualizando seus clientes e concluindo a rotação.

Para instâncias que usam certificados de servidor emitidos por uma CA compartilhada:

  1. No console do Google Cloud , acesse a página Instâncias do Cloud SQL.

    Acesse "Instâncias do Cloud SQL"

  2. Para abrir a página Visão geral de uma instância, clique no nome da instância.
  3. Clique em Conexões no menu de navegação do SQL.
  4. Selecione a guia Segurança.
  5. Acesse a seção Gerenciar certificados do servidor.
  6. Clique para expandir a opção Gerenciar certificados.
  7. Clique em Criar certificado do servidor.

O novo certificado de servidor aparece no slot Próximo. Se você quiser usar o novo certificado do servidor imediatamente, faça a rotação do certificado do servidor atualizando seus clientes e concluindo a rotação.

gcloud

Para instâncias que usam certificados de servidor autoassinados (CA por instância):

  1. Para receber informações sobre o certificado do servidor, use o comando sql ssl server-ca-certs list:
    gcloud sql ssl server-ca-certs list \
    --instance=INSTANCE_NAME
  2. Para criar um certificado de servidor, use o comando sql ssl server-ca-certs create:
    gcloud sql ssl server-ca-certs create \
    --instance=INSTANCE_NAME
  3. Faça o download das informações do certificado para um arquivo PEM local:
    gcloud sql ssl server-ca-certs list \
    --format="value(cert)" \
    --instance=INSTANCE_NAME > \
    FILE_PATH/FILE_NAME.pem
  4. Atualize todos os clientes para usar as novas informações. Basta copiar o arquivo transferido para as máquinas host do cliente, substituindo os arquivos server-ca.pem.

Para instâncias que usam certificados de servidor emitidos por uma CA compartilhada:

  1. Para receber informações sobre o certificado do servidor, use o comando sql ssl server-certs list:
    gcloud sql ssl server-certs list \
       --instance=INSTANCE_NAME
  2. Para criar um certificado de servidor, use o comando sql ssl server-certs create:
    gcloud sql ssl server-certs create \
       --instance=INSTANCE_NAME
  3. Faça o download das informações do certificado para um arquivo PEM local:
    gcloud sql ssl server-certs list \
       --format="value(ca_cert.cert)" \
       --instance=INSTANCE_NAME > \
       FILE_PATH/FILE_NAME.pem
  4. Atualize todos os clientes para usar as novas informações. Basta copiar o arquivo transferido para as máquinas host do cliente, substituindo os arquivos server-ca.pem.

Terraform

Para fornecer informações de certificado de servidor como saída, use uma fonte de dados do Terraform:

  1. Adicione o seguinte ao seu arquivo de configuração do 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 criar o arquivo server-ca.pem, execute o seguinte comando:
       terraform output db_latest_ca_cert > server-ca.pem
       

Usar conexões criptografadas

Saiba mais sobre como o SQL Server usa conexões criptografadas.

Confirmação de identidade do servidor

A confirmação de identidade do servidor depende da configuração da hierarquia da autoridade certificadora (CA) do servidor da instância do Cloud SQL.

Para instâncias que usam uma CA por instância, verificar a CA também verifica a identidade do servidor, já que cada instância tem uma CA exclusiva. Para instâncias que usam uma CA compartilhada, é necessário verificar o nome do host e a CA para confirmação de identidade do servidor, já que as CAs do servidor são compartilhadas entre as instâncias.

Se você tiver uma CA por instância, poderá realizar a confirmação de identidade do servidor com base no nome DNS apenas para instâncias configuradas com o Private Service Connect. Se você tiver uma CA compartilhada, poderá realizar a confirmação de identidade do servidor com base no nome DNS para todos os tipos de instâncias, ou seja, Private Service Connect, acesso a serviços particulares e instâncias de IP público.

Se você estiver usando uma CA gerenciada pelo cliente, poderá verificar a cadeia de confiança da CA e realizar a confirmação de identidade do servidor com base no nome DNS para qualquer tipo de instância que use uma CA gerenciada pelo cliente para o serverCAmode.

Ao selecionar a opção de AC gerenciada pelo cliente para sua instância, é possível inserir nomes de DNS personalizados no campo SAN do certificado do servidor. Para mais informações, consulte Editar um campo SAN personalizado.

Para ver qual hierarquia de AC está configurada para uma instância do Cloud SQL, consulte os detalhes da instância. Para mais informações, consulte Acessar informações da instância.

Ativar a confirmação de identidade do servidor

Se você selecionar a AC compartilhada como o modo de AC do servidor da instância do Cloud SQL ou se configurar nomes DNS personalizados usando valores SAN personalizados, recomendamos que você também ative a confirmação de identidade do servidor.

As instâncias que usam a CA compartilhada como o modo de CA do servidor contêm o nome DNS da instância no campo Nome alternativo do sujeito (SAN, na sigla em inglês) do certificado do servidor. É possível conseguir esse nome de DNS usando a API de pesquisa de instâncias e a resposta como um nome de host para a verificação de identidade do servidor. É necessário configurar a resolução de DNS para o nome de DNS.

Para ativar a confirmação de identidade do servidor em uma instância que usa uma CA compartilhada, siga estas etapas:

  1. Recupere o nome DNS.

    1. Para ver informações resumidas sobre uma instância do Cloud SQL, incluindo o nome DNS da instância, use o comando gcloud sql instances describe:

      gcloud sql instances describe INSTANCE_NAME \
        --project=PROJECT_ID

      Faça as seguintes substituições:

      • INSTANCE_NAME: o nome da instância do Cloud SQL
      • PROJECT_ID: o ID ou número do projeto do projeto do Google Cloud que contém a instância
    2. Na resposta, procure o campo dnsNames:. Esse campo pode retornar vários nomes de DNS, que têm os seguintes formatos:

      Configuração de rede Formato do nome DNS Nome do nível
      Private Service Connect ou endereço IP público INSTANCE_UID.PROJECT_DNS_LABEL.REGION_NAME.sql.goog.

      Exemplo:
      1a23b4cd5e67.1a2b345c6d27.us-central1.sql.goog.
      Instância
      Acesso a serviços particulares INSTANCE_UID.PROJECT_DNS_LABEL.REGION_NAME.sql-psa.goog.

      Exemplo:
      1a23b4cd5e67.1a2b345c6d27.us-central1.sql-psa.goog.
      Instância
  2. Crie o registro DNS em uma zona de DNS. Se você estiver se conectando de forma particular, crie o registro DNS em uma zona de DNS particular na rede de nuvem privada virtual (VPC) correspondente.

  3. Ao se conectar à instância do Cloud SQL para SQL Server, configure o nome DNS ou o endereço IP como o nome do host. Em seguida, ative a verificação de identidade do servidor especificando a flag -N para sqlcmd ou selecionando a opção Criptografar conexão/criptografia do SSMS.

    Outros drivers do SQL Server têm flags ou configurações semelhantes.

A seguir