Neste documento, descrevemos como adicionar criptografia TLS a uma implantação do Spanner Omni em máquinas virtuais (VMs). Uma implantação com recursos de segurança de rede usa o Transport Layer Security (TLS) 1.3 para criptografar e autenticar a comunicação dentro da implantação e com os clientes dela. O Spanner Omni oferece TLS mútuo (mTLS) para aumentar a segurança, em que ambas as partes estabelecem autenticidade antes de trocar dados. O mTLS é opcional entre o cliente e o servidor, mas os servidores do Spanner Omni se comunicam entre si por mTLS.
A versão prévia do Spanner Omni não é compatível com a criptografia TLS e para de gravar dados 90 dias após a criação de uma implantação. Para acesso antecipado à edição com todos os recursos, entre em contato com o Google.
Antes de começar
Antes de começar, verifique se o ambiente atende aos seguintes requisitos:
Verifique se você tem acesso SSH a cada máquina na implantação. Com esse acesso, é possível fazer o download e executar o binário do Spanner Omni.
Sua rede precisa permitir a comunicação TCP nas portas de 15000 a 15025.
Cada máquina precisa ter armazenamento suficiente para hospedar os dados que a implantação processa.
Confira a página Requisitos do sistema para garantir que sua configuração atende aos requisitos.
Se você executar os binários na plataforma de virtualização do vSphere, desative a virtualização do TSC. Para fazer isso, adicione a configuração
monitor_control.virtual_rdtsc = FALSEao arquivo de configuração.vmxda máquina virtual.
Etapa 1: criar uma implantação sem criptografia TLS
Siga as etapas em Criar uma implantação de VM do Spanner Omni sem criptografia. Verifique se a implantação da VM sem criptografia e recursos de segurança funciona corretamente. Nesta página, presumimos que você criou uma implantação regional com três zonas.
Etapa 2: gerar os certificados
Você precisa criar três conjuntos de certificados:
| Tipo de certificado | Descrição |
|---|---|
| Certificados de API | Os certificados de API ajudam a proteger o servidor da API Spanner. |
| Certificados do servidor | Os certificados de servidor ajudam a proteger a comunicação entre servidores. |
| Certificados do cliente | Os usuários finais ou aplicativos usam certificados de cliente para estabelecer a identidade e a confiança com os servidores do Spanner Omni. |
Uma autoridade de certificação (CA) emite esses certificados. O Spanner Omni oferece ferramentas para criar uma CA e todos os três tipos de certificados. Siga estas etapas em uma das suas máquinas.
É possível criar esses certificados na estação de trabalho usando a CLI do Spanner Omni e transferir os arquivos de certificado para cada servidor do Spanner Omni. Para mais informações, consulte o Guia de início rápido sobre como usar a CLI Omni do Spanner.
Para gerar certificados, siga estas etapas:
- Criar uma autoridade certificadora (CA)
- Gerar certificados do servidor
- Gerar certificados do cliente
Criar uma autoridade certificadora (CA)
Essa autoridade é a CA raiz de todos os certificados de cliente e servidor que você gerar nas etapas a seguir.
spanner certificates create-ca --ca-certificate-directory=certs
O diretório certs contém o certificado da CA. Crie uma cópia desse certificado para usar como uma CA para certificados de API.
cp certs/ca.crt certs/ca-api.crt
O diretório $HOME/.spanner/private-keys contém a chave privada da CA.
Faça backup e proteja esse diretório. Um usuário com acesso à chave privada pode assinar certificados arbitrários que os clientes que confiam na CA autoassinada confiam.
Embora seja possível usar a mesma CA para todos os certificados, é obrigatório que os certificados de API e de cliente usem a mesma CA. Se quiser, crie
uma CA adicional (ou use uma CA confiável externamente) para os certificados da API.
Use a CA correta nas etapas a seguir ao criar
certificados. Este documento usa a mesma CA para todos os tipos de certificado.
Gerar certificados do servidor
Você gera dois tipos de certificados de servidor:
Certificado do servidor do Spanner: criptografa a comunicação entre os servidores do Spanner Omni.
Certificado da API: criptografa a comunicação de sistemas que interagem com a implantação.
Essa configuração oferece um gerenciamento mais flexível desses certificados, como uma rotação de certificados.
Criar o certificado do servidor do Spanner
Os servidores do Spanner Omni usam certificados de servidor para criptografar a comunicação entre si (comunicação entre servidores).
Execute o comando a seguir para criar o certificado do servidor. Substitua SERVER_LIST por uma lista separada por vírgulas de nomes de servidores ou sufixos do Spanner.
SERVER_NAMES=SERVER_LIST
spanner certificates create-server --hostnames=${SERVER_NAMES} --ca-certificate-directory certs --output-directory certs
Esse comando cria dois arquivos, server.crt e server.key, no diretório certs.
Criar o certificado da API
Os certificados de API criptografam a comunicação de sistemas que interagem com a implantação. Usar certificados separados para a API e a comunicação entre servidores permite gerenciar e revezar cada tipo de forma independente.
Crie o certificado da API executando o seguinte comando. Substitua LB_DNS pelo DNS do balanceador de carga.
SERVER_NAMES=LB_DNS
spanner certificates create-server --filename-prefix=api --hostnames=${SERVER_NAMES} --ca-certificate-directory certs --output-directory certs
Esse comando cria mais dois arquivos, api.crt e api.key, no diretório certs. Se necessário, use uma CA confiável externamente para os certificados da API.
Distribua os certificados para todos os servidores
Copie o diretório certs para todos os outros servidores na implantação para iniciá-los
com recursos de segurança de rede.
scp -r certs REMOTE_HOST:SPANNER_DIR/certs
Etapa 3: gerar certificados do cliente
É possível usar certificados do cliente para autenticar usuários e aplicativos no Spanner. Os certificados do cliente ativam o mTLS entre o cliente e o servidor.
Os certificados do cliente precisam ser assinados pela mesma CA do certificado da API
e conter um nome de usuário para autorização. Este exemplo usa o usuário admin, que é o padrão para cada banco de dados. Para mais informações sobre
usuários, papéis e opções de autenticação, consulte
Autenticação e autorização no Spanner Omni.
USERNAME=admin
spanner certificates create-client $USERNAME --output-directory clientcerts --ca-certificate-directory certs
Esse comando cria arquivos client.crt e client.key no diretório clientcerts. Envie esses arquivos para qualquer máquina que se conecte aos servidores da implantação.
Se você planeja usar os certificados de cliente com a biblioteca de cliente Java, gere a chave do certificado no formato PKCS#8. Use o comando a seguir:
USERNAME=admin
spanner certificates create-client $USERNAME \
--output-directory clientcerts \
--ca-certificate-directory certs \
--generate-pkcs8-key
Etapa 4: reiniciar os servidores
Depois de gerar e copiar os certificados para todos os servidores na sua implantação, reinicie cada um deles.
Implantação de servidor único
Para implantações de servidor único, execute o seguinte comando:
nohup spanner start-single-server \
--base-dir=BASE_DIR \
--certificate-directory=${HOME}/.spanner/certs \
--insecure-mode=false &
O servidor é iniciado. Consulte Etapa 7: interagir com a implantação.
Implantação de escalonamento horizontal
Para implantações de expansão horizontal, inicie o servidor em cada máquina. Os valores de server_address e zone precisam corresponder aos da configuração de implantação.
A rede precisa resolver server_address. Os servidores usam isso para comunicação interna. Execute o seguinte comando para iniciar o servidor raiz:
nohup spanner start \
--root \
--server-address=HOST_NAME \
--zone=ZONE_NAME \
--base-dir=BASE_DIR \
--certificate-directory=${HOME}/.spanner/certs \
--insecure-mode=false &
O comando a seguir mostra um exemplo com valores específicos:
nohup spanner start \
--root \
--server-address=rootserver1 \
--zone=us-central-1a \
--base-dir=./spanbasedir \
--certificate-directory=${HOME}/.spanner/certs \
--insecure-mode=false &
Para ativar o mTLS para clientes, use a flag
--enable-client-certificate-authentication=true ao iniciar o servidor.
nohup spanner start \
--root \
--server-address=HOST_NAME \
--zone=ZONE_NAME \
--base-dir=BASE_DIR \
--certificate-directory=${HOME}/.spanner/certs \
--insecure-mode=false \
--enable-client-certificate-authentication=true &
Com os servidores em execução em cada máquina, você está pronto para criar a implantação.
Etapa 5: criar um deployment com criptografia TLS
Execute o comando spanner deployment create em um dos servidores raiz para
criar a implantação. Para ativar a criptografia TLS, especifique o diretório base
com a flag --base-dir. Use o mesmo
BASE_DIR especificado ao iniciar o servidor raiz na
etapa anterior.
spanner deployment create \
--config-file=deployment.yaml \
--base-dir=BASE_DIR
O console de cada máquina mostra mensagens indicando que a implantação agora inclui criptografia TLS. Todos os servidores se comunicam entre si por um canal criptografado.
Etapa 6: (opcional) configurar um balanceador de carga
Para gerenciar e distribuir o tráfego de clientes entre os servidores na sua implantação, configure um balanceador de carga. Verifique se a configuração do balanceador de carga para a verificação de integridade usa HTTPS em vez de HTTP. Use os seguintes detalhes de configuração:
| Parâmetro | Valor |
|---|---|
| Protocolo | TCP |
| IP do back-end | Os endereços IP dos seus servidores. |
| Porta | 15000. Essa é a porta padrão. Se você usou uma porta diferente na flag --server-address, use essa porta.) |
| URL da verificação de integridade | https://IP_ADDRESS:15012/healthz |
| Estratégia de balanceamento | roundrobin (distribui solicitações sequencialmente entre servidores) |
Etapa 7: interagir com a implantação
É possível interagir com a implantação do Spanner Omni em qualquer VM usando a CLI do Spanner Omni.
Inclua a seguinte flag em cada comando para estabelecer uma conexão criptografada:
--ca-certificate-file=certs/ca-api.crt
Se você ativou o mTLS para clientes, inclua também a seguinte flag em cada comando:
--client-certificate-directory=clientcerts
Para fazer login e interagir com a implantação, siga estas etapas:
Fazer login no Spanner Omni
spanner auth login admin \ --ca-certificate-file=certs/ca-api.crt \ --deployment-endpoint=ENDPOINTA senha padrão é
admin.Successfully logged in as "admin"Criar um banco de dados
spanner --deployment-endpoint=ENDPOINT databases create mydb --ca-certificate-file=certs/ca-api.crtCreating database...done.Abra o SQL Shell
spanner sql --database=mydb --ca-certificate-file=certs/ca-api.crtConnected. spanner>Criar uma tabela e adicionar dados
spanner> create table names (nameId INT64 NOT NULL, name String(100)) Primary Key (nameId); Query OK, 0 rows affected (4.62 sec) spanner> insert names (nameId, name) values (1, "Jack"); Query OK, 1 rows affected (0.18 sec)Verificar os dados
Liste os bancos de dados:
spanner databases list --ca-certificate-file=certs/ca-api.crtNAME STATE VERSION_RETENTION_PERIOD EARLIEST_VERSION_TIME KMS_KEY_NAME ENABLE_DROP_PROTECTION mydb READY 1h 2025-02-07T12:25:30Z falseExtraia os dados da tabela:
spanner sql --database=mydb --ca-certificate-file=certs/ca-api.crtConnected. spanner> show tables; +----------------+ | Tables_in_mydb | +----------------+ | names | +----------------+ 1 rows in set (0.14 sec) spanner> select * from names; +--------+--------+ | nameId | name | +--------+--------+ | 1 | Jack | +--------+--------+ 1 rows in set (18.69 msecs)
Etapa 8: (opcional) escalonar a implantação
É possível adicionar servidores não raiz a uma zona para aumentar a capacidade dela. Para fazer isso, gere o certificado do servidor para os servidores não raiz, conforme explicado na Etapa 2: gerar os certificados, e inicie o servidor com o seguinte comando:
spanner start \
--server-address=NON_ROOT_MACHINE \
--join-servers=ROOT_SERVER1,ROOT_SERVER2,ROOT_SERVER3 \
--zone=us-central1-a \
--base-dir=./spandir \
--certificate-directory=${HOME}/.spanner/certs \
--insecure-mode=false
Próximas etapas
- Use bibliotecas de cliente e drivers JDBC para conectar seu aplicativo à implantação.
- Gerenciar usuários e papéis.