O Cloud KMS é um serviço de gerenciamento de chaves hospedado na nuvem que permite gerenciar a criptografia dos seus serviços na nuvem da mesma forma que você faria localmente. Ele inclui suporte para criptografia, descriptografia, assinatura e verificação usando vários tipos e fontes de chaves, incluindo o Cloud HSM para chaves protegidas por hardware.
Neste tutorial, você vai aprender a usar os recursos avançados das APIs de segurança e privacidade do Google Cloud, incluindo:
- configuração de um bucket seguro do Cloud Storage;
- Gerenciamento de chaves e dados criptografados com o Cloud KMS
- visualização de registros de auditoria do Cloud Storage.
Você vai coletar dados do Enron Corpus para criptografá-los e carregá-los no Cloud Storage.
Você vai aprender a:
- Como criptografar dados e gerenciar chaves de criptografia usando o KMS (Key Management Service)
Você usará
- Cloud KMS
- Cloud Storage
- SDK Cloud
Configuração de ambiente autoguiada
Se você ainda não tem uma Conta do Google (Gmail ou Google Apps), crie uma. Faça login no Console do Google Cloud Platform (console.cloud.google.com) e crie um projeto:
Lembre-se do código do projeto, um nome exclusivo em todos os projetos do Google Cloud. O nome acima já foi escolhido e não servirá para você. Faremos referência a ele mais adiante neste codelab como PROJECT_ID
.
Em seguida, ative o faturamento no console do Cloud para usar os recursos do Google Cloud.
A execução por meio deste codelab terá um custo baixo, mas poderá ser mais se você decidir usar mais recursos ou se deixá-los em execução. Consulte a seção "limpeza" no final deste documento.
Novos usuários do Google Cloud Platform têm direito a uma avaliação sem custo financeiro de US$300.
Inicie o Cloud Shell
Neste codelab, você vai usar o Cloud Shell, um ambiente virtualizado sem custo financeiro executado no Google Cloud. No Console do GCP, clique no ícone do Cloud Shell na barra de ferramentas localizada no canto superior direito:
O provisionamento e a conexão com o ambiente levarão apenas alguns instantes para serem concluídos: Quando o processamento for concluído, você verá algo como:
Essa máquina virtual contém todas as ferramentas de desenvolvimento necessárias. Ela oferece um diretório principal permanente de 5 GB, além de ser executada no Google Cloud, o que aprimora o desempenho e a autenticação da rede. A menos que seja instruído de outra forma, execute todos os comandos nesse shell.
Para armazenar os dados deste tutorial, crie um bucket do Cloud Storage. Como os nomes de buckets do Cloud Storage precisam ser globalmente exclusivos, prefixe o nome do bucket com o ID do projeto:
$ export BUCKET_NAME=${GOOGLE_CLOUD_PROJECT}_enron_emails
Em seguida, crie o bucket:
$ gsutil mb gs://${BUCKET_NAME}
O Enron Corpus é um grande banco de dados com mais de 600 mil e-mails gerados por 158 funcionários da Enron Corporation. Esses dados foram copiados para o bucket do Cloud Storage chamado gs://enron_emails/
.
Faça o download de um dos arquivos de e-mail localmente:
$ gsutil cp gs://enron_emails/allen-p/inbox/1. . # <-- don't forget the dot!
Inspecione o arquivo baixado para verificar se ele é um e-mail:
$ tail 1.
O e-mail vai conter uma mensagem como:
Attached is the Delta position for 1/18... # ...
Além de e-mails, o bucket também contém imagens. Este tutorial usa e-mails e imagens em texto simples.
Antes de usar o Cloud KMS, é preciso ativar o serviço no seu projeto. Isso só precisa ser feito uma vez por projeto. Para ativar o serviço do Cloud KMS, execute o seguinte comando:
$ gcloud services enable cloudkms.googleapis.com \ --project "${GOOGLE_CLOUD_PROJECT}"
Isso pode levar até um minuto. O comando vai informar se a operação foi concluída.
Crie um keyring do Cloud KMS. No Cloud KMS, um keyring é uma coleção lógica de chaves criptográficas. O keyring contém metadados sobre as chaves, como a localização delas. Crie um keyring chamado my-keyring
na região global
:
$ gcloud kms keyrings create "my-keyring" \ --location "global"
Agora crie uma chave de criptografia chamada enron-emails
com a finalidade encryption
dentro do keyring que você acabou de criar.
$ gcloud kms keys create "enron-emails" \ --location "global" \ --keyring "my-keyring" \ --purpose "encryption"
Abra a interface da Web de chaves criptográficas e confira os recursos recém-criados. Essa opção está disponível em IAM e administrador no menu principal.
É possível ver e gerenciar keyrings e chaves criptográficas no console do Cloud.
Criptografe o conteúdo do e-mail que baixamos antes usando o Cloud KMS. Este tutorial usa a ferramenta de linha de comando gcloud
, mas também é possível criptografar dados usando a API Cloud KMS.
$ gcloud kms encrypt \ --location "global" \ --keyring "my-keyring" \ --key "enron-emails" \ --plaintext-file ./1. \ --ciphertext-file ./1.enc
Isso vai criar um novo arquivo no disco 1.enc
, que contém o conteúdo do arquivo criptografado. Agora que os dados estão criptografados com o Cloud KMS, faça upload do arquivo criptografado para o bucket do Cloud Storage.
$ gsutil cp ./1.enc gs://${BUCKET_NAME}
O Cloud KMS é integrado ao Google Cloud Identity and Access Management (IAM). Os papéis do IAM do Cloud KMS são divididos em duas categorias:
- Permissão para gerenciar chaves
- Permissão para usar chaves
Por exemplo, a função roles/cloudkms.admin
permite que o titular crie keyrings e chaves de criptografia, defina políticas do IAM e realize operações relacionadas ao gerenciamento. O roles/cloudkms.cryptoKeyEncrypterDecrypter
concede ao titular o direito de criptografar e descriptografar dados, mas não inclui permissões de gerenciamento.
Os papéis do IAM são herdados pelo recurso pai. Se alguém tiver o papel roles/cloudkms.admin
no projeto do Google Cloud, essa pessoa será administradora de todas as chaves nesse projeto. Se eles tiverem roles/cloudkms.admin
em um keyring, serão administradores de todas as chaves nesse keyring. Se eles tiverem roles/cloudkms.admin
em uma única chave criptográfica, serão apenas administradores dessa chave.
Para este exercício, use sua identidade:
$ export MY_IDENTITY=you@gmail.com # or you@example.com
Atribua à identidade a capacidade de gerenciar recursos do Cloud KMS no keyring criado acima usando a ferramenta de linha de comando gcloud
:
$ gcloud kms keyrings add-iam-policy-binding "my-keyring" \ --location "global" \ --member "user:${MY_IDENTITY}" \ --role "roles/cloudkms.admin"
O papel roles/cloudkms.admin
não inclui permissão para usar chaves, apenas para gerenciá-las. Para conceder à sua identidade a capacidade de criptografar e descriptografar dados usando a chave de criptografia enron-emails
:
$ gcloud kms keys add-iam-policy-binding "enron-emails" \ --location "global" \ --keyring "my-keyring" \ --member "user:${MY_IDENTITY}" \ --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"
O primeiro comando concede a função roles/cloudkms.admin
no Key Ring, que inclui todos os recursos filhos de chaves criptográficas. O segundo comando concede roles/cloudkms.cryptoKeyEncrypterDecrypter
, mas apenas na chave criptográfica enron-emails
.
Também é possível visualizar e atribuir papéis na interface do Cloud KMS no console do Google Cloud.
Além de criptografar um único arquivo, você também pode criptografar uma coleção de arquivos com alguns scripts. Este exemplo transmite todos os e-mails de allen-p, criptografa-os e faz upload dos valores criptografados resultantes para o bucket do Cloud Storage:
DIR="gs://enron_emails/allen-p" for file in $(gsutil ls ${DIR}/**); do ENC_NAME="$(basename ${file}).enc" gsutil cat ${file} \ | \ gcloud kms encrypt \ --location "global" \ --keyring "my-keyring" \ --key "enron-emails" \ --plaintext-file - \ --ciphertext-file - \ | \ gsutil -q cp - gs://${BUCKET_NAME}/${ENC_NAME} echo "Copied ${ENC_NAME}" done
Ele itera todos os arquivos no diretório especificado no bucket de exemplo do Cloud Storage, criptografa os arquivos usando o Cloud KMS e faz upload deles para o Google Cloud Storage.
Depois que o script for concluído, será possível conferir os arquivos criptografados na interface do Cloud Storage. Você verá algo como:
A Geração de registros de auditoria do Cloud tem dois fluxos de registros: "Registros de atividade do administrador" e "Registros de acesso a dados". Eles são gerados pelos serviços do Google Cloud para ajudar você a responder à pergunta "quem fez o quê, onde e quando?" nos seus projetos do Google Cloud Platform.
Para conferir a atividade de qualquer recurso no KMS, clique no keyring e selecione Ver atividade. Isso levará você à IU do Cloud Activity, onde é possível verificar a criação e todas as modificações feitas no keyring.
Você criptografou dados com sucesso usando o Cloud KMS e armazenou dados criptografados no Cloud Storage.
Limpeza
Libere os recursos criados durante este tutorial. Exclua o bucket do Cloud Storage criado anteriormente:
$ gsutil rm -r gs://${BUCKET_NAME}
Não é possível excluir os recursos do Cloud KMS. No entanto, é possível destruir o material da chave para que ele não possa ser usado novamente:
$ gcloud kms keys versions destroy "1" \ --location "global" \ --key "enron-emails" \ --keyring "my-keyring"
Abordamos
- Como usar o Cloud IAM para gerenciar permissões do Cloud KMS
- Como usar o Cloud KMS para criptografar dados
- Como usar o Cloud Storage para armazenar dados criptografados
- Como usar o Cloud Audit Logging para conferir todas as atividades de chaves e keyrings
Próximas etapas
- Usar o Cloud KMS para criptografar uma coluna em um banco de dados como o BigQuery
- Definir uma programação de rotação automática nas chaves do Cloud KMS
Saiba mais
- Saiba mais sobre como alternar chaves de criptografia.
- Leia sobre criptografia de envelope.
- Leia sobre a criptografia no servidor em buckets do Cloud Storage.
- Publique perguntas e encontre respostas no Stack Overflow com a tag google-cloud-kms.
Licença
Este conteúdo está sob a licença Atribuição 2.0 Genérica da Creative Commons.