Este tópico descreve como encriptar dados localmente e carregá-los para o Cloud Storage com o Tink e o Cloud Key Management Service (Cloud KMS). O Tink é uma biblioteca de criptografia de código aberto escrita por criptógrafos e engenheiros de segurança da Google.
Vista geral
A encriptação por parte do cliente é qualquer encriptação realizada antes de enviar os seus dados para a nuvem. Quando usa a encriptação do lado do cliente, é responsável por criar e gerir as suas chaves de encriptação e encriptar os dados antes de os enviar para a nuvem.
Neste tópico, implementa a encriptação em envelope por parte do cliente com o Tink através de uma chave de encriptação no Cloud KMS.
Pode encontrar uma versão baseada no Terraform deste tutorial no repositório do GitHub kms-solutions.
Antes de começar
- Crie uma chave de encriptação simétrica do Cloud KMS para encriptação. Tome nota do URI da chave. Precisar dele mais tarde.
- Instale o Tink para utilização com o Cloud KMS.
- Crie um contentor no Cloud Storage para carregar os seus dados encriptados.
Funções necessárias
Para garantir que a sua conta de serviço tem as autorizações necessárias para usar chaves do Cloud KMS com o Tink,
peça ao seu administrador para conceder à sua conta de serviço a função do IAM
encriptar/desencriptar do CryptoKey do Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter
)
na sua chave.
O seu administrador também pode conceder à sua conta de serviço as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.
Encriptação de envelope com o Tink
Na encriptação de envelope, a chave do Cloud KMS funciona como uma chave de encriptação de chaves (KEK). Ou seja, é usada para encriptar chaves de encriptação de dados (DEK), que, por sua vez, são usadas para encriptar dados reais.
Depois de criar uma KEK no Cloud KMS, para encriptar cada mensagem, tem de:
- Gerar uma chave de encriptação de dados (DEK) localmente.
- Usar a DEK localmente para encriptar a mensagem.
- Use o Cloud KMS para encriptar (envolver) a DEK com a KEK.
- Armazenar os dados encriptados e a DEK envolvida.
Não precisa de implementar este processo de encriptação de envelope desde o início quando usa o Tink.
Para usar o Tink para a encriptação em envelope, fornece ao Tink um URI de chave e credenciais. O URI da chave aponta para a sua KEK no Cloud KMS e as credenciais permitem que o Tink use a KEK. O Tink gera a DEK, encripta os dados, envolve a DEK e, em seguida, devolve um único texto cifrado com os dados encriptados e a DEK envolvida.
O Tink suporta a encriptação de envelope em Python, Java, C++ e Go através da primitiva de encriptação autenticada com dados associados (AEAD).
Associe o Tink e o Cloud KMS
Para encriptar as DEKs geradas pelo Tink com a sua KEK no Cloud KMS, tem de obter o URI da sua 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 o artigo Obter um ID de recurso do Cloud KMS para ver detalhes sobre como obter o caminho para a sua chave.
Inicialize o Tink e encripte os dados
O Tink usa primitivas, ou seja, componentes fundamentais criptográficos que gerem os detalhes dos respetivos algoritmos subjacentes, para que possa realizar tarefas em segurança. Cada primitivo oferece uma API que processa uma tarefa específica. Aqui, estamos a usar o AEAD, pelo que usamos a primitiva AEAD do Tink.
Python
Python
Para saber como instalar e usar a biblioteca cliente do Cloud KMS, consulte o artigo Bibliotecas cliente do Cloud KMS.
Para se autenticar no Cloud KMS, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Java
Java
Para saber como instalar e usar a biblioteca cliente do Cloud KMS, consulte o artigo Bibliotecas cliente do Cloud KMS.
Para se autenticar no Cloud KMS, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Para mais informações sobre os primitivos e as interfaces suportados pelo Tink, consulte a página Introdução do Tink.
O que se segue?
- Saiba mais sobre o Tink.
- Saiba como usar a encriptação por parte do cliente com o Cloud SQL.