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. Presumimos que você conheça oGoogle 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 as funções do Cloud Run, o Cloud Storage e a Proteção de dados sensíveis.

Como conceder permissões a contas de serviço

A primeira etapa é conceder permissões a duas contas de serviço: a do Cloud Run Functions e o agente de serviço do Cloud Data Loss Prevention.

Conceder permissões à conta de serviço padrão do App Engine

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

    • Administrador do DLP
    • Agente de serviço da API DLP
  5. Clique em Salvar.

Conceder permissões ao agente de serviço do Cloud Data Loss Prevention

O agente de serviço de prevenção contra perda de dados do Cloud é criado na primeira vez que é necessário.

  1. No Cloud Shell, crie o agente de serviço de prevenção contra perda de dados do Cloud 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 Google Cloud , abra a página IAM e administrador e selecione o projeto que você criou:

    Acessar IAM

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

  4. Localize o agente de serviço do Cloud Data Loss Prevention. 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. A Proteção de Dados Sensíveis 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:

    gcloud storage buckets create gs://[YOUR_QUARANTINE_BUCKET]
    gcloud storage buckets create gs://[YOUR_SENSITIVE_DATA_BUCKET]
    gcloud storage buckets create 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 os 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 Run

Nesta seção, apresentamos as etapas para a implantação do script Python contendo as duas funções do Cloud Run 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 das funções do Cloud Run:

    Acessar as funções do Cloud Run

  2. Selecione o projeto em que você ativou as funções do Cloud Run.

  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 a função do Cloud Run e o tópico 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. 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 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 a função do Cloud Run e o tópico 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 das funções do Cloud Run:

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

  2. Selecione o projeto em que você ativou as funções do Cloud Run.

  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 a função do Cloud Run e o tópico 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 a função do Cloud Run e o tópico 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 cp, substituindo [YOUR_QUARANTINE_BUCKET] pelo nome do bucket de quarentena:

    gcloud storage cp * gs://[YOUR_QUARANTINE_BUCKET]/

    A Proteção de Dados Sensíveis inspeciona e classifica cada arquivo enviado para o bucket de quarentena e o move para o bucket de destino apropriado com base na classificação dele.

  4. No Console do Cloud Storage, abra a página Navegador do Storage:

    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.