Esta página mostra uma forma de usar o Cloud Key Management Service para encriptar diretamente os dados da aplicação num cliente, antes de os transmitir através de uma rede.
Neste exemplo, os dados encriptados são transmitidos para Google Cloud e são armazenados num contentor do Cloud Storage. O Cloud Storage também suporta a encriptação automática do lado do servidor com chaves de encriptação geridas pelo cliente, o que automatiza todo este processo. Para proteger os dados da aplicação antes de os transmitir paraGoogle Cloud, recomendamos que use a biblioteca Tink.
A biblioteca Tink é uma biblioteca multiplataforma e multilingue que fornece APIs para tarefas criptográficas comuns. Pode ser usado para encriptar dados antes de estes serem introduzidos Google Cloud em armazenamentos de dados e suporta Java, Python, C++, Go, Objective-C e outros idiomas, bem como serviços de armazenamento de objetos e bases de dados relacionais.
Neste guia passo a passo, encripta um ficheiro com o Cloud KMS antes de o carregar para um contentor. Em seguida, transfere e desencripta os mesmos dados para que os possa ler no cliente.
Quando segue estas instruções, as suas chaves e todas as operações criptográficas permanecem no Google Cloud e tem de usar o Cloud KMS para a desencriptação. A encriptação simétrica não processada permite-lhe encriptar ou desencriptar dados localmente no local ou mover dados encriptados entre diferentes bibliotecas e fornecedores de serviços sem ter de os desencriptar primeiro.
Antes de começar
Na sua Google Cloud organização, precisa de autorização para criar
novos projetos, ativar a faturação, criar utilizadores e gerir autorizações
nestes projetos. A função
roles/resourcemanager.organizationAdmin
concede esta autorização.
Configuração
Recomendamos que use dois projetos e dois utilizadores para garantir a separação de funções. Se seguir os passos neste guia, os utilizadores e os serviços que gerem as chaves de encriptação são distintos dos utilizadores e dos serviços que as usam. Um projeto contém e gere as chaves, e o outro projeto armazena os dados encriptados num contentor do Cloud Storage e desencripta-os conforme necessário.
Crie projetos
Cria projetos na Google Cloud consola. Para obter instruções passo a passo, consulte o início rápido do Identity and Access Management.
Crie os seguintes projetos na sua organização:
Crie um Google Cloud projeto para conter o contentor do Cloud Storage usado para armazenar os segredos. Os segredos são armazenados como objetos no contentor. Este projeto chama-se STORAGE_PROJECT_ID.
Crie um segundo Google Cloud projeto para gerir as chaves do Cloud KMS usadas para encriptar e desencriptar o segredo. Este projeto chama-se KEY_PROJECT_ID.
Para cada projeto, ative a API Cloud KMS e ative a faturação seguindo os passos na secção Antes de começar do guia de início rápido do Cloud KMS.
Criar utilizadores
Cria utilizadores e concede-lhes funções na Google Cloud consola. Para ver instruções passo a passo, consulte o início rápido do Identity and Access Management.
Este procedimento cria dois utilizadores. O administrador de chaves gere as chaves de encriptação, e o utilizador de chaves pode encriptar e desencriptar dados com as chaves.
Realize este procedimento no projeto KEY_PROJECT_ID.
Crie a conta de administrador principal.
Conceda a função de gestão de identidade e de acesso
roles/cloudkms.admin
ao administrador da chave. Esta função permite que o administrador principal crie e faça a gestão de chaves.Crie a conta de utilizador principal.
Conceda a função do IAM
roles/cloudkms.cryptoKeyEncrypterDecrypter
ao utilizador principal. Esta função permite que o utilizador principal encriptar e desencriptar dados.
Crie um contentor de armazenamento
Realize este procedimento no projeto STORAGE_PROJECT_ID
.
- Crie um contentor de armazenamento denominado
STORAGE_BUCKET
. - Conceda a função
roles/storage.objectAdmin
no contentor de armazenamento STORAGE_BUCKET à conta de utilizador principal.
Crie uma chave de encriptação
Execute este procedimento como o utilizador administrador principal no projeto KEY_PROJECT_ID.
Crie um conjunto de chaves. O nome de um conjunto de chaves tem de ser exclusivo no projeto. Não é possível mudar o nome nem eliminar um conjunto de chaves. Use a Google Cloud CLI para criar um conjunto de chaves.
gcloud kms keyrings create KEY_RING \ --location LOCATION
Substitua o seguinte:
KEY_RING
: o nome a usar para o conjunto de chaves de armazenamento, por exemplo,storage
.LOCATION
: a localização onde quer criar o conjunto de chaves. Esta deve estar geograficamente perto da localização onde quer criar o contentor do Cloud Storage.
Crie uma chave de encriptação no conjunto de chaves. O nome da chave tem de ser exclusivo no anel de chaves. Não é possível mudar o nome nem eliminar as chaves, mas é possível destruir as respetivas versões. Use a Google Cloud CLI para criar a chave. É criada automaticamente uma versão inicial da chave e torna-se a versão principal.
gcloud kms keys create KEY_NAME \ --location LOCATION \ --keyring KEY_RING \ --purpose encryption
Substitua o seguinte:
LOCATION
: a localização onde criou o conjunto de chaves.KEY_NAME
: o nome a usar para a chave de armazenamento, por exemplo,storage
.KEY_RING
: o nome que usou para o conjunto de chaves de armazenamento, por exemplo,storage
.
Nota: para usar chaves de encriptação simétrica não processada, defina o campo de finalidade como
raw-encryption
.
Pode saber mais acerca da criação de conjuntos de chaves e chaves.
Encriptar o ficheiro que contém o segredo
Realize este procedimento como a conta de utilizador principal, trabalhando em ambos os projetos.
Na sua máquina local, guarde o Secret.
echo "SECRET_TEXT" > PATH_TO_SECRET
Substitua o seguinte:
SECRET_TEXT
: o segredo que quer proteger, em texto simples, por exemplo,this is a secret
.PATH_TO_SECRET
: o caminho onde quer criar o segredo, por exemplo,secret.txt
.
Encriptar o segredo através do Cloud KMS e da chave de encriptação.
gcloud kms encrypt \ --location LOCATION \ --keyring KEY_RING \ --key KEY_NAME \ --plaintext-file PATH_TO_SECRET \ --ciphertext-file PATH_TO_ENCRYPTED_SECRET
Substitua o seguinte:
LOCATION
: a localização onde criou o conjunto de chaves.KEY_RING
: o nome do conjunto de chaves.KEY_NAME
: o nome da chave de encriptação.PATH_TO_SECRET
: o caminho onde criou o segredo.PATH_TO_ENCRYPTED_SECRET
: o caminho onde quer guardar o segredo encriptado. Por exemplo,secret.txt.encrypted
.
Pode saber mais sobre a encriptação de dados seguindo o início rápido de encriptação de dados.
Em alternativa, use
raw-encrypt
para encriptação simétrica não processada.Carregue o ficheiro secreto encriptado para o contentor de armazenamento. Pode usar o seguinte comando da CLI gcloud:
gcloud storage cp PATH_TO_ENCRYPTED_SECRET gs://STORAGE_BUCKET
Pode saber mais acerca do carregamento de objetos para um contentor de armazenamento.
Opcional: elimine o ficheiro secreto de texto simples (
PATH_TO_SECRET
) do computador local. Esta é uma boa prática para ficheiros que contêm dados confidenciais não encriptados.
O contentor de armazenamento STORAGE_BUCKET
contém agora o ficheiro secreto encriptado, que é encriptado através da chave de encriptação KEY_NAME
.
Desencriptar o ficheiro que contém o segredo
Execute estes passos como a conta de utilizador principal, trabalhando em ambos os projetos.
Transfira o ficheiro secreto encriptado do contentor de armazenamento. Pode usar o seguinte comando da CLI gcloud:
gcloud storage cp gs://STORAGE_BUCKET/PATH_TO_ENCRYPTED_SECRET .
Pode saber mais acerca da transferência de objetos de um contentor de armazenamento.
Desencriptar o ficheiro com a mesma chave que usou para o encriptar.
gcloud kms decrypt --location LOCATION \ --keyring KEY_RING \ --key KEY_NAME \ --ciphertext-file PATH_TO_ENCRYPTED_SECRET \ --plaintext-file PATH_TO_DECRYPTED_SECRET
Substitua o seguinte:
LOCATION
: a localização onde criou o conjunto de chaves.KEY_RING
: o nome do conjunto de chaves.KEY_NAME
: o nome da chave de encriptação.PATH_TO_ENCRYPTED_SECRET
: o caminho para o segredo encriptado transferido, por exemplo,secret.txt.encrypted
.PATH_TO_DECRYPTED_SECRET
: o caminho onde quer guardar o segredo descifrado, por exemplo,secret_decrypted.txt
.
Pode saber mais sobre a desencriptação de dados seguindo o início rápido de encriptação de dados.
Em alternativa, use
raw-decrypt
para encriptação simétrica não processada.Agora, pode ler o texto simples descifrado do segredo através do comando
cat
ou de um editor de texto. Os conteúdos são idênticos aos conteúdos originais dePATH_TO_SECRET
.Opcional: elimine os ficheiros
PATH_TO_ENCRYPTED_SECRET
ePATH_TO_DECRYPTED_SECRET
do computador local.
Limpar
Para limpar, elimine todos os ficheiros que criou na máquina local e, de seguida, elimine os projetos KEY_PROJECT_ID
e STORAGE_PROJECT_ID
.
O que se segue?
- Leia mais sobre a gestão de segredos.
- Saiba mais sobre a separação de funções.
- Saiba como conceder, alterar e revogar o acesso a recursos.
- Saiba como criar uma conta de serviço.