Vamos começar com o Cloud KMS

O Cloud KMS é um serviço de gerenciamento de chaves hospedado na nuvem que permite gerenciar as chaves criptográficas dos seus serviços na nuvem da mesma forma que você faria no local. Ela inclui suporte para criptografia, descriptografia, assinatura e verificação usando vários tipos de chave e fontes, incluindo o Cloud HSM para chaves protegidas por hardware.

Neste tutorial, você aprenderá a usar os recursos avançados das APIs de segurança e privacidade do Cloud, incluindo os seguintes:

  • configuração de um bucket seguro do Cloud Storage
  • Como gerenciar chaves e dados criptografados usando o Cloud KMS
  • visualização de registros de auditoria do Cloud Storage

Você usará os dados resumidos do Enron Corpus para criptografá-los e carregá-los no Cloud Storage.

Você aprenderá

  • Como criptografar dados e gerenciar chaves de criptografia usando o Key Management Service (KMS)

Você usará

  • Cloud KMS
  • Cloud Storage
  • SDK do Cloud

Configuração de ambiente personalizada

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 novo projeto:

Captura de tela de 10/02/2016 12:45:26.png

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, você precisará ativar 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 estão qualificados para um teste sem custo financeiro de US$ 300.

Iniciar Cloud Shell

Neste codelab, você usará o Cloud Shell, um ambiente virtualizado sem custo financeiro em execução 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 você receba uma instrução diferente, execute todos os comandos desse shell.

Para armazenar dados para este tutorial, crie um bucket do Cloud Storage. Como os nomes de bucket do Cloud Storage precisam ser exclusivos globalmente, use o ID do projeto como prefixo do nome do bucket:

$ 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.000 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 salvo para verificar se ele é, de fato, um e-mail:

$ tail 1.

O e-mail incluirá uma mensagem como esta:

Attached is the Delta position for 1/18...
# ...

Além dos e-mails, o bucket também contém imagens. Este tutorial usa imagens e e-mails de texto simples.

Antes de usar o Cloud KMS, você precisa ativar o serviço no seu projeto. Isso precisa ser feito apenas uma vez por projeto. Para ativar o serviço do Cloud KMS, execute este comando:

$ gcloud services enable cloudkms.googleapis.com \
    --project "${GOOGLE_CLOUD_PROJECT}"

A ativação pode levar até um minuto. O comando informará que o processo foi concluído.

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 o local delas. Crie um keyring chamado my-keyring na região global:

$ gcloud kms keyrings create "my-keyring" \
    --location "global"

Agora, crie uma chave criptográfica 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 IU da Web de chaves criptográficas e veja os recursos recém-criados. Disponível no menu IAM &administrador no menu principal.

É possível ver e gerenciar keyrings e chaves de criptografia no Console do Cloud.

Criptografe o conteúdo do e-mail que salvamos anteriormente usando o Cloud KMS. Neste tutorial, usamos 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 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 no 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, o papel roles/cloudkms.admin permite que o proprietário crie keyrings e chaves de criptografia, defina políticas do IAM e execute operações relacionadas ao gerenciamento. A roles/cloudkms.cryptoKeyEncrypterDecrypter concede ao detentor os dados de criptografia e descriptografia, mas não inclui permissões de gerenciamento.

Os papéis de IAM são herdados pelo recurso pai. Se alguém tiver o papel de roles/cloudkms.admin no projeto do Google Cloud, ele será um administrador de todas as chaves nesse projeto. Se o roles/cloudkms.admin tiver um keyring, ele será um administrador de todas as chaves nesse keyring. Se eles tiverem roles/cloudkms.admin em uma única chave de criptografia, 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"

Observe que o primeiro comando concede o papel roles/cloudkms.admin no keyring, que incluiria quaisquer recursos de chave criptográfica do filho. O segundo comando concede roles/cloudkms.cryptoKeyEncrypterDecrypter, mas apenas na chave criptográfica do enron-emails.

Também é possível ver e atribuir papéis na IU do Cloud KMS no Console do Cloud.

Além de criptografar um único arquivo, você também pode criptografar um conjunto de arquivos com um script. Este exemplo faz o streaming de todos os e-mails para allen-p, os criptografa e faz o 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

Isso faz a iteração de todos os arquivos no diretório específico no bucket do Cloud Storage de exemplo, criptografa-os usando o Cloud KMS e faz upload deles para seu Google Cloud Storage.

Depois que o script for concluído, será possível ver os arquivos criptografados na IU do Cloud Storage. Você verá algo parecido com:

O Cloud Audit Logging tem dois registros: Registros de atividades do administrador e Registros de acesso a dados. Eles são gerados pelos serviços do Google Cloud para você responder à pergunta sobre quem fez o quê, onde e quando nos projetos do Google Cloud Platform.

Para visualizar a atividade de qualquer recurso no KMS, clique no keyring e selecione View Activity. Você verá a 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

Liberar 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, você pode 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"

Vimos

  • Como usar o Cloud IAM para gerenciar as 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 ver 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 alternância automática nas chaves do Cloud KMS

Saiba mais

Licença

Este conteúdo está sob a licença Atribuição 2.0 Genérica da Creative Commons.