Neste tópico, descrevemos como criptografar dados localmente e fazer o upload deles no Cloud Storage com o Tink e o Cloud Key Management Service (Cloud KMS). A Tink é uma biblioteca criptográfica de código aberto criada por criptógrafos e engenheiros de segurança do Google.
Visão geral
A criptografia no lado do cliente é qualquer criptografia realizada antes do envio dos dados para a nuvem. Ao usar a criptografia do lado do cliente, você é responsável por criar e gerenciar suas chaves de criptografia e criptografar seus dados antes de enviá-los para a nuvem.
Neste tópico, você vai implementar a criptografia de envelope do lado do cliente com o Tink usando uma chave de criptografia no Cloud KMS.
Encontre uma versão do blueprint baseada no Terraform deste tutorial no repositório do GitHub kms-solutions.
Antes de começar
- Crie uma chave de criptografia simétrica do Cloud KMS para criptografia. Anote o URI da chave. Você precisará disso mais tarde.
- Instale o Tink para usar com o Cloud KMS.
- Crie um bucket no Cloud Storage para fazer upload dos dados criptografados.
Funções exigidas
Para garantir que a conta de serviço tenha as permissões
necessárias para usar chaves do Cloud KMS com o Tink,
peça ao administrador para conceder à conta de serviço o
papel de criptografador/descriptografador de CryptoKey do Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter
) no sua chave.
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
O administrador também pode conceder à conta de serviço as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.
Criptografia de envelope com o Tink
Na criptografia de envelope, a chave do Cloud KMS atua como uma chave de criptografia de chaves (KEK, na sigla em inglês). Ou seja, ela é usada para criptografar chaves de criptografia de dados (DEK, na sigla em inglês), que, por sua vez, são usadas para criptografar dados reais.
Depois de criar uma KEK no Cloud KMS, faça o seguinte para criptografar cada mensagem:
- Gere uma chave de criptografia de dados (DEK, na sigla em inglês) localmente.
- Use essa DEK localmente para criptografar a mensagem.
- Use o Cloud KMS para criptografar (unir) a DEK com a KEK.
- Armazene os dados criptografados e a DEK unida.
Não é necessário implementar esse processo de criptografia de envelope do zero ao usar o Tink.
Para usar o Tink na criptografia de envelope, forneça um URI de chave e credenciais. O URI da chave aponta para a KEK no Cloud KMS, e as credenciais permitem que a Tink use a KEK. A Tink gera a DEK, criptografa os dados, une a DEK e retorna um único texto criptografado com os dados criptografados e a DEK unida.
O Tink suporta criptografia de envelope em Python, Java, C ++ e Go usando a criptografia autenticada com dados associados (AEAD, na sigla em inglês).
Conectar o Tink e o Cloud KMS
Para criptografar as DEKs geradas pelo Tink com a KEK no Cloud KMS, é necessário ter o URI da KEK. No Cloud KMS, o URI da KEK tem o seguinte formato:
gcp-kms://projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION
Consulte Como conseguir um ID de recurso do Cloud KMS para ver detalhes sobre como acessar o caminho para a chave.
Inicializar o Tink e criptografar dados
O Tink usa primitivos, elementos criptográficos que gerenciam os detalhes dos algoritmos subjacentes, para que você possa realizar tarefas com segurança. Cada primitivo oferece uma API que processa uma tarefa específica. Aqui, usamos o AEAD. Portanto, usamos o primitivo AEAD da Tink.
Python
Python
Para saber como instalar e usar a biblioteca de cliente do Cloud KMS, consulte Bibliotecas de cliente do Cloud KMS.
Para autenticar no Cloud KMS, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Java
Java
Para saber como instalar e usar a biblioteca de cliente do Cloud KMS, consulte Bibliotecas de cliente do Cloud KMS.
Para autenticar no Cloud KMS, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Para mais informações sobre as primitivas e interfaces compatíveis com o Tink, consulte a página Introdução do Tink.
A seguir
- Saiba mais sobre o Tink.
- Saiba como usar a criptografia do lado do cliente com o Cloud SQL.