Neste tutorial, mostramos como implementar um sistema automatizado de quarentena e classificação de dados usando o Cloud Storage e outros produtos do Google Cloud. Para seguir o tutorial, é necessário ter familiaridade com o Google Cloud e a programação básica do shell.
Em todas as organizações, os responsáveis pela segurança de dados como você lidam com uma quantidade cada vez maior de dados que precisam ser protegidos e tratados adequadamente. Colocar em quarentena e classificar os dados pode ser complicado e demorado, principalmente se for necessário realizar esses procedimentos com centenas ou milhares de arquivos por dia.
E se você pudesse selecionar cada arquivo, enviá-lo para um local de quarentena, classificá-lo automaticamente e movê-lo para o local adequado com base no resultado da classificação? Neste tutorial, mostramos como implementar esse sistema usando o Cloud Functions, o Cloud Storage e o Cloud Data Loss Prevention.
Objetivos
- Criar buckets do Cloud Storage a serem usados como parte do pipeline de quarentena e classificação.
- Criar um tópico e uma assinatura do Pub/Sub para notificá-lo quando o processamento do arquivo for concluído.
- Criar uma Função do Cloud simples que invoca a API DLP quando os arquivos são enviados.
- Fazer upload de alguns arquivos de amostra para o bucket de quarentena para invocar o Cloud Function. A função usa a API DLP para inspecionar e classificar os arquivos e movê-los para o bucket apropriado.
Custos
Neste tutorial, usamos componentes faturáveis do Google Cloud, incluindo:
- Cloud Storage
- Cloud Functions
- Cloud Data Loss Prevention
Use a calculadora de preços para gerar uma estimativa de custo com base no uso projetado.
Antes de começar
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Storage,Cloud Build Cloud Build, and Cloud Data Loss Prevention APIs.
Como conceder permissões a contas de serviço
A primeira etapa é conceder permissões a duas contas de serviço: a do Cloud Functions e a do Cloud DLP.
Conceder permissões à conta de serviço padrão do App Engine
No Console do Google Cloud, abra a página "IAM e administrador" e selecione o projeto que você criou:
Localize a conta de serviço do App Engine. Ela tem o formato
[PROJECT_ID]@appspot.gserviceaccount.com
. Substitua[PROJECT_ID]
pelo ID do projeto:Selecione o ícone de edição edit ao lado da conta de serviço.
Adicione os seguintes papéis:
- Cloud DLP > Administrador DLP
- Agente de serviço da API DLP (é preciso filtrar para esse papel poder localizar)
Clique em Save.
Conceder permissões à conta de serviço de proteção de dados sensíveis
O agente de serviço do Cloud DLP é criado na primeira vez que é necessário.
No Cloud Shell, crie um agente de serviço do Cloud DLP fazendo uma chamada para
InspectContent
:curl --request POST
"https://dlp.googleapis.com/v2/projects/PROJECT_ID/locations/us-central1/content:inspect"
--header "X-Goog-User-Project: PROJECT_ID"
--header "Authorization: Bearer $(gcloud auth print-access-token)"
--header 'Accept: application/json'
--header 'Content-Type: application/json'
--data '{"item":{"value":"google@google.com"}}'
--compressedSubstitua
PROJECT_ID
pelo ID do projeto.No Console do Google Cloud, abra a página IAM e administrador e selecione o projeto criado:
Marque a caixa de seleção Incluir concessões de papel fornecidas pelo Google.
Localize a conta de serviço do Agente de serviço do Cloud DLP. Ela tem o formato
service-[PROJECT_NUMBER]@dlp-api.iam.gserviceaccount.com
. Substitua[PROJECT_NUMBER]
pelo número do projeto.Selecione o ícone de edição edit ao lado da conta de serviço.
Adicione o papel Projeto > Visualizador e clique em Salvar.
Como criar o canal de quarentena e classificação
Nesta seção, você cria o pipeline de quarentena e classificação mostrado no diagrama a seguir.
Os números neste pipeline correspondem a estas etapas:
- Você faz upload de arquivos para o Cloud Storage.
- Você invoca um Cloud Function.
- O Cloud DLP inspeciona e classifica os dados.
- O arquivo é movido para o bucket apropriado.
Criar buckets do Cloud Storage
Seguindo as orientações descritas nas diretrizes de nomenclatura de bucket, crie três buckets nomeados com exclusividade, usado em todo este tutorial:
- Bucket 1: substitua
[YOUR_QUARANTINE_BUCKET]
por um nome exclusivo. - Bucket 2: substitua
[YOUR_SENSITIVE_DATA_BUCKET]
por um nome exclusivo. - Bucket 3: substitua
[YOUR_NON_SENSITIVE_DATA_BUCKET]
por um nome exclusivo.
Console
No Console do Google Cloud, abra o navegador do Cloud Storage:
Clique em Criar bucket.
Na caixa de texto Nome do bucket, insira o nome selecionado para
[YOUR_QUARANTINE_BUCKET]
e clique em Criar.Repita para os buckets
[YOUR_SENSITIVE_DATA_BUCKET]
e[YOUR_NON_SENSITIVE_DATA_BUCKET]
.
gcloud
Abra o Cloud Shell:
Crie três buckets usando os seguintes comandos:
gsutil mb gs://[YOUR_QUARANTINE_BUCKET] gsutil mb gs://[YOUR_SENSITIVE_DATA_BUCKET] gsutil mb gs://[YOUR_NON_SENSITIVE_DATA_BUCKET]
Criar um tópico e uma assinatura do Pub/Sub
console
Abra a página Tópicos do Pub/Sub:
Selecione Criar tópico.
Na caixa de texto, insira um nome para o tópico.
Marque a caixa de seleção Adicionar uma assinatura padrão.
Clique em Criar tópico.
gcloud
Abra o Cloud Shell:
Crie um tópico substituindo
[PUB/SUB_TOPIC]
pelo nome de sua escolha:gcloud pubsub topics create [PUB/SUB_TOPIC]
Crie uma assinatura substituindo
[PUB/SUB_SUBSCRIPTION]
pelo nome de sua escolha:gcloud pubsub subscriptions create [PUB/SUB_SUBSCRIPTION] --topic [PUB/SUB_TOPIC]
Criar as Funções do Cloud
Nesta seção, apresentamos as etapas para a implantação do script Python contendo os dois Cloud Functions a seguir:
- Uma função invocada quando um objeto é enviado ao Cloud Storage.
- Uma função invocada quando uma mensagem é recebida na fila do Pub/Sub.
O script Python usado para concluir este tutorial está contido em um repositório do GitHub. Para criar a primeira Função do Cloud, é necessário ativar as APIs corretas.
Para ativar as APIs, faça o seguinte:
- Se você estiver trabalhando no console, ao clicar em Criar função, será exibido um guia sobre como ativar as APIs necessárias para usar o Cloud Functions.
- Se você estiver trabalhando na gcloud CLI, deverá ativar manualmente as
seguintes APIs:
- API Artifact Registry
- API Eventarc
- API Cloud Run Admin
Como criar a primeira função
Console
Abra a página Visão geral do Cloud Functions:
Selecione o projeto em que você ativou o Cloud Functions.
Clique em Criar função.
Na caixa Nome da função, substitua o nome padrão por
create_DLP_job
.No campo Acionador, selecione Cloud Storage.
No campo Tipo de evento, selecione Finalizar/Criar.
No campo bucket, clique em Procurar, selecione o bucket de quarentena destacando o bucket na lista suspensa e clique em Selecionar.
Clique em Salvar.
Clique em Próximo.
Em Ambiente de execução, selecione Python 3.7.
Em Código-fonte, marque Editor in-line.
Substitua o texto na caixa main.py pelo conteúdo do arquivo
https://github.com/GoogleCloudPlatform/dlp-cloud-functions-tutorials/blob/master/gcs-dlp-classification-python/main.py
a seguir.Substitua:
[PROJECT_ID_DLP_JOB & TOPIC]
: o ID do projeto que hospeda o tópico da função do Cloud e do Pub/Sub;[YOUR_QUARANTINE_BUCKET]
: o nome do bucket em que você fará o upload dos arquivos a serem processados;[YOUR_SENSITIVE_DATA_BUCKET]
: o nome do bucket para o qual você passará os arquivos confidenciais;[YOUR_NON_SENSITIVE_DATA_BUCKET]
: o nome do bucket em que você fará o upload dos arquivos a serem processados;[PUB/SUB_TOPIC]
: o nome do tópico Pub/Sub criado anteriormente.
Na caixa de texto Ponto de entrada, substitua o texto padrão por:
create_DLP_job
.Substitua o texto na caixa de texto requirements.txt pelo conteúdo do seguinte arquivo:
https://github.com/GoogleCloudPlatform/dlp-cloud-functions-tutorials/blob/master/gcs-dlp-classification-python/requirements.txt.
Selecione Implantar.
Uma marca de seleção verde ao lado da função indica uma implantação bem-sucedida.
gcloud
Abra uma sessão do Cloud Shell e clone o repositório do GitHub que contém o código e alguns arquivos de dados de amostra:
Altere os diretórios para a pasta em que o repositório foi clonado:
cd ~dlp-cloud-functions-tutorials/gcs-dlp-classification-python/
Faça as seguintes substituições no arquivo main.py:
[PROJECT_ID_DLP_JOB & TOPIC]
: o ID do projeto que hospeda o tópico da função do Cloud e do Pub/Sub;[YOUR_QUARANTINE_BUCKET]
: o nome do bucket em que você fará o upload dos arquivos a serem processados;[YOUR_SENSITIVE_DATA_BUCKET]
: o nome do bucket para o qual você passará os arquivos confidenciais;[YOUR_NON_SENSITIVE_DATA_BUCKET]
: o nome do bucket em que você fará o upload dos arquivos a serem processados;[PUB/SUB_TOPIC
: o nome do tópico Pub/Sub criado anteriormente.
Implante a função, substituindo
[YOUR_QUARANTINE_BUCKET]
pelo nome do bucket:gcloud functions deploy create_DLP_job --runtime python37 \ --trigger-resource [YOUR_QUARANTINE_BUCKET] \ --trigger-event google.storage.object.finalize
Verifique se a função foi implantada:
gcloud functions describe create_DLP_job
Uma implantação bem-sucedida é indicada por um status pronto semelhante ao seguinte:
status: READY timeout: 60s
Quando a primeira função do Cloud Functions for implantada com sucesso, avance para a próxima seção para criar a segunda função.
Como criar a segunda função
Console
Abra a página Visão geral do Cloud Functions:
Selecione o projeto para o qual você ativou o Cloud Functions.
Clique em Criar função.
Na caixa Nome da função, substitua o nome padrão por
resolve_DLP
.No campo Acionador, selecione Pub/Sub.
No campo Selecionar um tópico do Cloud Pub/Sub, procure o tópico do Pub/Sub criado anteriormente.
Clique em Salvar.
Clique em Avançar.
Em Ambiente de execução, selecione Python 3.7.
Em Código-fonte, selecione Editor in-line.
Na caixa de texto Ponto de entrada, substitua o texto padrão por
resolve_DLP
.Substitua o texto na caixa main.py pelo conteúdo do seguinte arquivo: https://github.com/GoogleCloudPlatform/dlp-cloud-functions-tutorials/blob/master/gcs-dlp-classification-python/main.py. Faça as seguintes substituições
[PROJECT_ID_DLP_JOB & TOPIC]
: o ID do projeto que hospeda o tópico da função do Cloud e do Pub/Sub;[YOUR_QUARANTINE_BUCKET]
: o nome do bucket em que você fará o upload dos arquivos a serem processados;[YOUR_SENSITIVE_DATA_BUCKET]
: o nome do bucket para o qual você passará os arquivos confidenciais;[YOUR_NON_SENSITIVE_DATA_BUCKET]
: o nome do bucket em que você fará o upload dos arquivos a serem processados;[PUB/SUB_TOPIC
: o nome do tópico Pub/Sub criado anteriormente.
Clique em Deploy.
Uma marca de seleção verde ao lado da função indica uma implantação bem-sucedida.
gcloud
Abra (ou reabra) uma sessão do Cloud Shell e clone o repositório do GitHub que contém o código e alguns arquivos de dados de amostra:
Altere os diretórios para a pasta com o código Python:
cd gcs-dlp-classification-python/
Faça as seguintes substituições no arquivo
main.py
:[PROJECT_ID_DLP_JOB & TOPIC]
: o ID do projeto que hospeda o tópico da função do Cloud e do Pub/Sub;[YOUR_QUARANTINE_BUCKET]
: o nome do bucket em que você fará o upload dos arquivos a serem processados;[YOUR_SENSITIVE_DATA_BUCKET]
: o nome do bucket para o qual você passará os arquivos confidenciais;[YOUR_NON_SENSITIVE_DATA_BUCKET]
: o nome do bucket em que você fará o upload dos arquivos a serem processados;[PUB/SUB_TOPIC
: o nome do tópico Pub/Sub criado anteriormente.
Implante a função, substituindo
[PUB/SUB_TOPIC]
pelo seu tópico do Pub/Sub:gcloud functions deploy resolve_DLP --runtime python37 --trigger-topic [PUB/SUB_TOPIC]
Verifique se a função foi implantada:
gcloud functions describe resolve_DLP
Uma implantação bem-sucedida é indicada por um status pronto semelhante ao seguinte:
status: READY timeout: 60s
Quando o Cloud Function tiver sido implantado com êxito, avance para a próxima seção.
Fazer upload de arquivos de amostra para o bucket em quarentena
O repositório do GitHub associado a este artigo inclui arquivos de dados de amostra. A pasta contém alguns arquivos com dados confidenciais e outros com dados não confidenciais. Os dados confidenciais são classificados como contendo um ou mais dos seguintes valores INFO_TYPES
:
US_SOCIAL_SECURITY_NUMBER EMAIL_ADDRESS PERSON_NAME LOCATION PHONE_NUMBER
Os tipos de dados usados para classificar os arquivos de amostra são definidos na constante INFO_TYPES
no arquivo main.py
, que é definido inicialmente como 'FIRST_NAME,PHONE_NUMBER,EMAIL_ADDRESS,US_SOCIAL_SECURITY_NUMBER'
.
Se você ainda não tiver clonado o repositório, abra o Cloud Shell e clone o repositório do GitHub que contém o código e alguns arquivos de dados de amostra:
Altere pastas para os arquivos de dados de amostra:
cd ~/dlp-cloud-functions-tutorials/sample_data/
Copie os arquivos de dados de amostra para o bucket de quarentena usando o comando
gsutil
, substituindo[YOUR_QUARANTINE_BUCKET]
pelo nome do bucket de quarentena:gsutil -m cp * gs://[YOUR_QUARANTINE_BUCKET]/
O Cloud DLP inspeciona e classifica cada arquivo enviado para o bucket de quarentena e o move para o bucket de destino apropriado com base em sua classificação.
No console do Cloud Storage, abra a página Navegador de armazenamento:
Selecione um dos buckets de destino criados anteriormente e revise os arquivos enviados. Revise também os outros buckets criados.
Limpar
Depois de concluir o tutorial, você pode limpar os recursos que criou para que eles parem de usar a cota e gerar cobranças. Nas seções a seguir, você aprenderá a excluir e desativar esses recursos.
Excluir o projeto
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
A seguir
- Configure diferentes valores de tipos de dados válidos para
INFO_TYPES
. - Saiba mais sobre como inspecionar armazenamento e bancos de dados para dados confidenciais usando o Cloud DLP.
- Saiba mais sobre o Cloud Functions.
- Confira arquiteturas de referência, diagramas e práticas recomendadas do Google Cloud. Confira o Centro de arquitetura do Cloud.