Como automatizar a classificação de dados enviados para o Cloud Storage


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

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  4. Ative as APIs Cloud Functions, Cloud Storage,Cloud Build Cloud Build, and Cloud Data Loss Prevention.

    Ative as APIs

  5. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  6. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  7. Ative as APIs Cloud Functions, Cloud Storage,Cloud Build Cloud Build, and Cloud Data Loss Prevention.

    Ative as 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

  1. No Console do Google Cloud, abra a página "IAM e administrador" e selecione o projeto que você criou:

    Acessar IAM

  2. 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:

  3. Selecione o ícone de edição ao lado da conta de serviço.

  4. Adicione os seguintes papéis:

    • Cloud DLP > Administrador DLP
    • Agente de serviço da API DLP (é preciso filtrar para esse papel poder localizar)
  5. 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.

  1. 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"}}'
    --compressed

    Substitua PROJECT_ID pelo ID do projeto.

  2. No Console do Google Cloud, abra a página IAM e administrador e selecione o projeto criado:

    Acessar IAM

  3. Marque a caixa de seleção Incluir concessões de papel fornecidas pelo Google.

  4. 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.

  5. Selecione o ícone de edição ao lado da conta de serviço.

  6. 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.

Fluxo de trabalho de quarentena e classificação

Os números neste pipeline correspondem a estas etapas:

  1. Você faz upload de arquivos para o Cloud Storage.
  2. Você invoca um Cloud Function.
  3. O Cloud DLP inspeciona e classifica os dados.
  4. 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

  1. No Console do Google Cloud, abra o navegador do Cloud Storage:

    Acesse o Cloud Storage

  2. Clique em Criar bucket.

  3. Na caixa de texto Nome do bucket, insira o nome selecionado para [YOUR_QUARANTINE_BUCKET] e clique em Criar.

  4. Repita para os buckets [YOUR_SENSITIVE_DATA_BUCKET] e [YOUR_NON_SENSITIVE_DATA_BUCKET].

gcloud

  1. Abra o Cloud Shell:

    Acesse o Cloud Shell

  2. 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

  1. Abra a página Tópicos do Pub/Sub:

    Acessar tópicos do Pub/Sub

  2. Selecione Criar tópico.

  3. Na caixa de texto, insira um nome para o tópico.

  4. Marque a caixa de seleção Adicionar uma assinatura padrão.

  5. Clique em Criar tópico.

gcloud

  1. Abra o Cloud Shell:

    Acesse o Cloud Shell

  2. Crie um tópico substituindo [PUB/SUB_TOPIC] pelo nome de sua escolha:

    gcloud pubsub topics create [PUB/SUB_TOPIC]
  3. 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

  1. Abra a página Visão geral do Cloud Functions:

    Acesse o Cloud Functions

  2. Selecione o projeto em que você ativou o Cloud Functions.

  3. Clique em Criar função.

  4. Na caixa Nome da função, substitua o nome padrão por create_DLP_job.

  5. No campo Acionador, selecione Cloud Storage.

  6. No campo Tipo de evento, selecione Finalizar/Criar.

  7. No campo bucket, clique em Procurar, selecione o bucket de quarentena destacando o bucket na lista suspensa e clique em Selecionar.

  8. Clique em Salvar.

  9. Clique em Próximo.

  10. Em Ambiente de execução, selecione Python 3.7.

  11. Em Código-fonte, marque Editor in-line.

  12. 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.
  13. Na caixa de texto Ponto de entrada, substitua o texto padrão por: create_DLP_job.

  14. 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.

  15. Selecione Implantar.

    Uma marca de seleção verde ao lado da função indica uma implantação bem-sucedida.

    implantação bem-sucedida

gcloud

  1. 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:

    ABRIR NO Cloud Shell

  2. Altere os diretórios para a pasta em que o repositório foi clonado:

    cd ~dlp-cloud-functions-tutorials/gcs-dlp-classification-python/
  3. 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.
  4. 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
    
  5. 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

  1. Abra a página Visão geral do Cloud Functions:

    ACESSAR A PÁGINA "VISÃO GERAL" do Cloud Functions

  2. Selecione o projeto para o qual você ativou o Cloud Functions.

  3. Clique em Criar função.

  4. Na caixa Nome da função, substitua o nome padrão por resolve_DLP.

  5. No campo Acionador, selecione Pub/Sub.

  6. No campo Selecionar um tópico do Cloud Pub/Sub, procure o tópico do Pub/Sub criado anteriormente.

  7. Clique em Salvar.

  8. Clique em Avançar.

  9. Em Ambiente de execução, selecione Python 3.7.

  10. Em Código-fonte, selecione Editor in-line.

  11. Na caixa de texto Ponto de entrada, substitua o texto padrão por resolve_DLP.

  12. 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.
  13. Clique em Deploy.

    Uma marca de seleção verde ao lado da função indica uma implantação bem-sucedida.

    implantação bem-sucedida

gcloud

  1. 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:

    ABRIR NO Cloud Shell

  2. Altere os diretórios para a pasta com o código Python:

    cd gcs-dlp-classification-python/

  3. 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.
  4. 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]
  5. 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'.

  1. 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:

    ABRIR NO Cloud Shell

  2. Altere pastas para os arquivos de dados de amostra:

    cd ~/dlp-cloud-functions-tutorials/sample_data/
  3. 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.

  4. No console do Cloud Storage, abra a página Navegador de armazenamento:

    ACESSAR O NAVEGADOR do Cloud Storage

  5. 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

  1. No Console do Google Cloud, acesse a página Gerenciar recursos.

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

A seguir