Usar o Secret Manager para gerenciar secrets no Cloud SQL

Visão geral

Gerenciar informações confidenciais corretamente é uma parte essencial da criação de um fluxo de trabalho de desenvolvimento seguro. Para o Cloud SQL, recomendamos armazenar as informações confidenciais como secrets criados no Secret Manager. Os secrets incluem chaves de API, senhas, informações confidenciais ou credenciais que você pode usar para acessar um sistema confidencial.

O Secret Manager oferece conveniência e melhora a segurança. Também é possível aplicar o controle de versões aos seus secrets e compartilhá-los com toda a equipe. Para saber mais sobre como compartilhar secrets com sua equipe, consulte Controle de acesso (IAM).

Nesta página, descrevemos quatro casos de uso do Secret Manager para gerenciar secrets com o Cloud SQL:

Antes de começar

Antes de começar a usar o Secret Manager para processar secrets no Cloud SQL, faça o seguinte:

Nomes de usuário e senhas

Usar o Secret Manager para armazenar os nomes de usuário e as senhas das contas de usuário do Cloud SQL como secrets é uma maneira segura e confiável de gerenciar essas informações confidenciais.

Primeiro você precisa criar um usuário no Cloud SQL. Como parte da criação desse usuário, você precisa fornecer um nome de usuário e uma senha. Para mais informações sobre como criar um usuário no Cloud SQL, consulte Criar e gerenciar usuários.

Após a criação do usuário, crie um secret no Secret Manager para armazenar o nome de usuário e a senha. Isso garante que essas informações sensíveis não sejam perdidas. Para ver mais informações sobre como criar e acessar secrets no Secret Manager, consulte Como criar e acessar secrets.

Instâncias do Cloud SQL

Ao se conectar à sua instância do Cloud SQL, use o Secret Manager para gerenciar secrets e criar um fluxo de trabalho de desenvolvimento seguro.

Para começar, conecte-se à instância do Cloud SQL do seu computador local. Depois que a instância estiver em execução, use variáveis de ambiente para se conectar a ela. Alguns valores associados às variáveis são mais confidenciais, como o nome de conexão da instância. Para cada valor, é possível criar um secret no Secret Manager para armazenar e gerenciar essas informações. Para saber mais sobre como usar as variáveis de ambiente para se conectar à instância do Cloud SQL, consulte Configurar e executar o aplicativo de amostra.

No Gerenciador de secrets, é possível recuperar o nome da conexão da instância armazenado como um secret. Isso fornece um fluxo de trabalho flexível que pode ajudar sua equipe a compartilhar essas informações confidenciais em vários aplicativos e gerenciá-las de um local centralizado. Para mais informações sobre como recuperar secrets do Secret Manager, consulte Criar um secret com o Secret Manager.

Um aplicativo requer as informações nos secrets para começar. Essas informações incluem os valores associados às variáveis de ambiente usadas para se conectar ao aplicativo. O aplicativo acessa os secrets quando é iniciado e, em seguida, usa os secrets para configurar uma conexão com o Cloud SQL. Se as chaves secretas relevantes forem atualizadas no Secret Manager, talvez seja necessário reiniciar o aplicativo.

Certificados SSL/TLS

Se você se conectar a uma instância do Cloud SQL usando um endereço IP público ou particular, use um certificado Transport Layer Security (TLS) que proteja os dados enquanto eles são transmitidos. Cada certificado TLS inclui um certificado de chave pública e uma chave privada. Veja mais informações sobre a configuração de certificados TLS em Configurar certificados SSL/TLS.

Salve o certificado TLS, o certificado de chave pública e a chave privada como secrets para mantê-los seguros e compartilhá-los com sua equipe. Para ver mais informações sobre como criar e acessar secrets, consulte Criar um secret com o Secret Manager. Para mais informações sobre o compartilhamento de secrets, consulte Controle de acesso (IAM).

Cenários de recuperação de desastres

Se uma instância principal no Cloud SQL falhar, é possível promover uma réplica de leitura para a instância principal. Depois que a réplica de leitura se tornar a instância principal, vai ser necessário atualizar o nome da conexão da instância para refletir essa promoção. Se o nome da conexão da instância estiver armazenado em um secret, atualize-o com o nome da nova instância principal. Para mais informações, consulte Editar um secret.

Uma maneira de usar o Secret Manager para failovers é armazenar o nome da instância principal em um secret e configurar o conector do Cloud SQL para ser atualizado sempre que o secret for atualizado.

É possível usar o script de wrapper bash a seguir com o proxy do Cloud SQL Auth para detectar quando o valor do nome da conexão da instância é atualizado e reiniciar o proxy com o novo valor:

#!/bin/bash

SECRET_ID="my-secret-id" # TODO(developer): replace this value
REFRESH_INTERVAL=5
PORT=5432                # TODO(developer): change this port as needed

# Get the latest version of the secret and start the proxy
INSTANCE=$(gcloud secrets versions access "latest" --secret="$SECRET_ID")
cloud_sql_proxy -instances="$INSTANCE"=tcp:"$PORT" &
PID=$!

# Every 5s, get the latest version of the secret. If it's changed, restart the
# proxy with the new value.
while true; do
    sleep $REFRESH_INTERVAL
    NEW=$(gcloud secrets versions access "latest" --secret="$SECRET_ID")
    if [ "$INSTANCE" != "$NEW" ]; then
        INSTANCE=$NEW
        kill $PID
        wait $PID
        cloud_sql_proxy -instances="$INSTANCE"=tcp:"$PORT" &
        PID=$!
    fi
done

Para mais informações sobre como criar e acessar um secret que contenha o nome da conexão da instância da réplica primária, consulte Criar um secret com o Gerenciador de secrets. Para mais informações sobre como usar o proxy do Cloud SQL Auth, consulte Conectar-se ao Cloud SQL usando o proxy do Cloud SQL Auth.

A seguir