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 o faturamento está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o projeto.

  4. Ative as APIs Cloud Functions, Cloud Storage, 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 Cloud, abra a página "IAM e administrador" e selecione o projeto que você criou:

    ACESSAR A PÁGINA "IAM E ADMINISTRADOR"

  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:

    • Projeto > Proprietário
    • Cloud DLP > Administrador do DLP
    • Service Management > Agente de serviço da API DLP
  5. Clique em Salvar.

Conceder permissões à conta de serviço DLP

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

    ACESSAR A PÁGINA "IAM E ADMINISTRADOR"

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

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

  4. 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 Cloud, abra o navegador do Cloud Storage:

    Acessar o navegador do 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:

    ACESSAR 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 OS TÓPICOS DO Pub/Sub

  2. Clique em Criar um tópico.

  3. Na caixa de texto que tem uma entrada com o formato PROJECTS/[YOUR_PROJECT_NAME]/TOPICS/, anexe o nome do tópico, como este:

    PROJECTS/[YOUR_PROJECT_NAME]/TOPICS/[PUB/SUB_TOPIC]
  4. Clique em Criar.

  5. Selecione o tópico recém-criado, clique nos três pontos (...) que seguem o nome do tópico e selecione Nova assinatura.

  6. Na caixa de texto que tem uma entrada no formato PROJECTS/[YOUR_PROJECT_NAME]/TOPICS/[PUB/SUB_TOPIC], anexe o nome da assinatura da seguinte maneira:

    PROJECTS/[YOUR_PROJECT_NAME]/TOPICS/[PUB/SUB_TOPIC]/[PUB/SUB_SUBSCRIPTION]
  7. Clique em Criar.

gcloud

  1. Abra o Cloud Shell:

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

Como criar a primeira 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, substitua o nome padrão por create_DLP_job.

  5. No campo Acionador, selecione Cloud Storage.

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

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

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

  9. Cole o código a seguir na caixa main.py, substituindo o texto atual:

    """ Copyright 2018, Google, Inc.
    
    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at
    
      http://www.apache.org/licenses/LICENSE-2.0
    
    Unless  required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
    
    Authors: Yuhan Guo, Zhaoyuan Sun, Fengyi Huang, Weimu Song.
    Date:    October 2018
    
    """
    
    from google.cloud import dlp
    from google.cloud import storage
    from google.cloud import pubsub
    import os
    
    # ----------------------------
    #  User-configurable Constants
    
    PROJECT_ID = '[PROJECT_ID_HOSTING_STAGING_BUCKET]'
    """The bucket the to-be-scanned files are uploaded to."""
    STAGING_BUCKET = '[YOUR_QUARANTINE_BUCKET]'
    """The bucket to move "sensitive" files to."""
    SENSITIVE_BUCKET = '[YOUR_SENSITIVE_DATA_BUCKET]'
    """The bucket to move "non sensitive" files to."""
    NONSENSITIVE_BUCKET = '[YOUR_NON_SENSITIVE_DATA_BUCKET]'
    """ Pub/Sub topic to notify once the  DLP job completes."""
    PUB_SUB_TOPIC = '[PUB/SUB_TOPIC]'
    """The minimum_likelihood (Enum) required before returning a match"""
    """For more info visit: https://cloud.google.com/dlp/docs/likelihood"""
    MIN_LIKELIHOOD = 'POSSIBLE'
    """The maximum number of findings to report (0 = server maximum)"""
    MAX_FINDINGS = 0
    """The infoTypes of information to match"""
    """For more info visit: https://cloud.google.com/dlp/docs/concepts-infotypes"""
    INFO_TYPES = [
        'FIRST_NAME', 'PHONE_NUMBER', 'EMAIL_ADDRESS', 'US_SOCIAL_SECURITY_NUMBER'
    ]
    
    # End of User-configurable Constants
    # ----------------------------------
    
    # Initialize the Google Cloud client libraries
    dlp = dlp.DlpServiceClient()
    storage_client = storage.Client()
    publisher = pubsub.PublisherClient()
    subscriber = pubsub.SubscriberClient()
    
    def create_DLP_job(data, done):
      """This function is triggered by new files uploaded to the designated Cloud Storage quarantine/staging bucket.
    
           It creates a dlp job for the uploaded file.
        Arg:
           data: The Cloud Storage Event
        Returns:
            None. Debug information is printed to the log.
        """
      # Get the targeted file in the quarantine bucket
      file_name = data['name']
      print('Function triggered for file [{}]'.format(file_name))
    
      # Prepare info_types by converting the list of strings (INFO_TYPES) into a list of dictionaries
      info_types = [{'name': info_type} for info_type in INFO_TYPES]
    
      # Convert the project id into a full resource id.
      parent = f"projects/{PROJECT_ID}"
    
      # Construct the configuration dictionary.
      inspect_job = {
          'inspect_config': {
              'info_types': info_types,
              'min_likelihood': MIN_LIKELIHOOD,
              'limits': {
                  'max_findings_per_request': MAX_FINDINGS
              },
          },
          'storage_config': {
              'cloud_storage_options': {
                  'file_set': {
                      'url':
                          'gs://{bucket_name}/{file_name}'.format(
                              bucket_name=STAGING_BUCKET, file_name=file_name)
                  }
              }
          },
          'actions': [{
              'pub_sub': {
                  'topic':
                      'projects/{project_id}/topics/{topic_id}'.format(
                          project_id=PROJECT_ID, topic_id=PUB_SUB_TOPIC)
              }
          }]
      }
    
      # Create the DLP job and let the DLP api processes it.
      try:
        dlp.create_dlp_job(parent=(parent), inspect_job=(inspect_job))
        print('Job created by create_DLP_job')
      except Exception as e:
        print(e)
    
    def resolve_DLP(data, context):
      """This function listens to the pub/sub notification from function above.
    
        As soon as it gets pub/sub notification, it picks up results from the
        DLP job and moves the file to sensitive bucket or nonsensitive bucket
        accordingly.
        Args:
            data: The Cloud Pub/Sub event
    
        Returns:
            None. Debug information is printed to the log.
        """
      # Get the targeted DLP job name that is created by the create_DLP_job function
      job_name = data['attributes']['DlpJobName']
      print('Received pub/sub notification from DLP job: {}'.format(job_name))
    
      # Get the DLP job details by the job_name
      job = dlp.get_dlp_job(request = {'name': job_name})
      print('Job Name:{name}\nStatus:{status}'.format(
          name=job.name, status=job.state))
    
      # Fetching Filename in Cloud Storage from the original dlpJob config.
      # See defintion of "JSON Output' in Limiting Cloud Storage Scans':
      # https://cloud.google.com/dlp/docs/inspecting-storage
    
      file_path = (
          job.inspect_details.requested_options.job_config.storage_config
          .cloud_storage_options.file_set.url)
      file_name = os.path.basename(file_path)
    
      info_type_stats = job.inspect_details.result.info_type_stats
      source_bucket = storage_client.get_bucket(STAGING_BUCKET)
      source_blob = source_bucket.blob(file_name)
      if (len(info_type_stats) > 0):
        # Found at least one sensitive data
        for stat in info_type_stats:
          print('Found {stat_cnt} instances of {stat_type_name}.'.format(
              stat_cnt=stat.count, stat_type_name=stat.info_type.name))
        print('Moving item to sensitive bucket')
        destination_bucket = storage_client.get_bucket(SENSITIVE_BUCKET)
        source_bucket.copy_blob(source_blob, destination_bucket,
                                file_name)  # copy the item to the sensitive bucket
        source_blob.delete()  # delete item from the quarantine bucket
    
      else:
        # No sensitive data found
        print('Moving item to non-sensitive bucket')
        destination_bucket = storage_client.get_bucket(NONSENSITIVE_BUCKET)
        source_bucket.copy_blob(
            source_blob, destination_bucket,
            file_name)  # copy the item to the non-sensitive bucket
        source_blob.delete()  # delete item from the quarantine bucket
      print('{} Finished'.format(file_name))
    
  10. Ajuste as seguintes linhas no código que você colou na caixa main.py, substituindo as variáveis pelo ID do seu projeto, pelos buckets correspondentes e pelos nomes do tópico e da assinatura do Pub/Sub que você já criou.

    [YOUR_QUARANTINE_BUCKET]
    [YOUR_SENSITIVE_DATA_BUCKET]
    [YOUR_NON_SENSITIVE_DATA_BUCKET]
    [PROJECT_ID_HOSTING_STAGING_BUCKET]
    [PUB/SUB_TOPIC]
    
  11. Na caixa de texto Função a ser executada, substitua hello_gcs por create_DLP_job.

  12. Cole o seguinte código na caixa de texto requirements.txt, substituindo o texto atual:

    google-cloud-dlp
    google-cloud-pubsub
    google-cloud-storage
    
    
  13. Clique em Salvar.

    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 para a qual o repositório foi clonado:

    cd gcs-dlp-classification-python/
  3. Ajuste as seguintes linhas no código na caixa main.py, substituindo as variáveis de bucket a seguir pelos buckets correspondentes criados anteriormente. Substitua também as variáveis de tópico e de assinatura do Pub/Sub pelos nomes escolhidos.

    [YOUR_QUARANTINE_BUCKET]
    [YOUR_SENSITIVE_DATA_BUCKET]
    [YOUR_NON_SENSITIVE_DATA_BUCKET]
    [PROJECT_ID_HOSTING_STAGING_BUCKET]
    [PUB/SUB_TOPIC]
    
  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, substitua o nome padrão por resolve_DLP.

  5. No campo Acionador, selecione Pub/Sub.

  6. No campo Tópico, insira [PUB/SUB_TOPIC].

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

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

  9. Cole o código a seguir na caixa main.py, substituindo o texto atual:

    """ Copyright 2018, Google, Inc.
    
    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at
    
      http://www.apache.org/licenses/LICENSE-2.0
    
    Unless  required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
    
    Authors: Yuhan Guo, Zhaoyuan Sun, Fengyi Huang, Weimu Song.
    Date:    October 2018
    
    """
    
    from google.cloud import dlp
    from google.cloud import storage
    from google.cloud import pubsub
    import os
    
    # ----------------------------
    #  User-configurable Constants
    
    PROJECT_ID = '[PROJECT_ID_HOSTING_STAGING_BUCKET]'
    """The bucket the to-be-scanned files are uploaded to."""
    STAGING_BUCKET = '[YOUR_QUARANTINE_BUCKET]'
    """The bucket to move "sensitive" files to."""
    SENSITIVE_BUCKET = '[YOUR_SENSITIVE_DATA_BUCKET]'
    """The bucket to move "non sensitive" files to."""
    NONSENSITIVE_BUCKET = '[YOUR_NON_SENSITIVE_DATA_BUCKET]'
    """ Pub/Sub topic to notify once the  DLP job completes."""
    PUB_SUB_TOPIC = '[PUB/SUB_TOPIC]'
    """The minimum_likelihood (Enum) required before returning a match"""
    """For more info visit: https://cloud.google.com/dlp/docs/likelihood"""
    MIN_LIKELIHOOD = 'POSSIBLE'
    """The maximum number of findings to report (0 = server maximum)"""
    MAX_FINDINGS = 0
    """The infoTypes of information to match"""
    """For more info visit: https://cloud.google.com/dlp/docs/concepts-infotypes"""
    INFO_TYPES = [
        'FIRST_NAME', 'PHONE_NUMBER', 'EMAIL_ADDRESS', 'US_SOCIAL_SECURITY_NUMBER'
    ]
    
    # End of User-configurable Constants
    # ----------------------------------
    
    # Initialize the Google Cloud client libraries
    dlp = dlp.DlpServiceClient()
    storage_client = storage.Client()
    publisher = pubsub.PublisherClient()
    subscriber = pubsub.SubscriberClient()
    
    def create_DLP_job(data, done):
      """This function is triggered by new files uploaded to the designated Cloud Storage quarantine/staging bucket.
    
           It creates a dlp job for the uploaded file.
        Arg:
           data: The Cloud Storage Event
        Returns:
            None. Debug information is printed to the log.
        """
      # Get the targeted file in the quarantine bucket
      file_name = data['name']
      print('Function triggered for file [{}]'.format(file_name))
    
      # Prepare info_types by converting the list of strings (INFO_TYPES) into a list of dictionaries
      info_types = [{'name': info_type} for info_type in INFO_TYPES]
    
      # Convert the project id into a full resource id.
      parent = f"projects/{PROJECT_ID}"
    
      # Construct the configuration dictionary.
      inspect_job = {
          'inspect_config': {
              'info_types': info_types,
              'min_likelihood': MIN_LIKELIHOOD,
              'limits': {
                  'max_findings_per_request': MAX_FINDINGS
              },
          },
          'storage_config': {
              'cloud_storage_options': {
                  'file_set': {
                      'url':
                          'gs://{bucket_name}/{file_name}'.format(
                              bucket_name=STAGING_BUCKET, file_name=file_name)
                  }
              }
          },
          'actions': [{
              'pub_sub': {
                  'topic':
                      'projects/{project_id}/topics/{topic_id}'.format(
                          project_id=PROJECT_ID, topic_id=PUB_SUB_TOPIC)
              }
          }]
      }
    
      # Create the DLP job and let the DLP api processes it.
      try:
        dlp.create_dlp_job(parent=(parent), inspect_job=(inspect_job))
        print('Job created by create_DLP_job')
      except Exception as e:
        print(e)
    
    def resolve_DLP(data, context):
      """This function listens to the pub/sub notification from function above.
    
        As soon as it gets pub/sub notification, it picks up results from the
        DLP job and moves the file to sensitive bucket or nonsensitive bucket
        accordingly.
        Args:
            data: The Cloud Pub/Sub event
    
        Returns:
            None. Debug information is printed to the log.
        """
      # Get the targeted DLP job name that is created by the create_DLP_job function
      job_name = data['attributes']['DlpJobName']
      print('Received pub/sub notification from DLP job: {}'.format(job_name))
    
      # Get the DLP job details by the job_name
      job = dlp.get_dlp_job(request = {'name': job_name})
      print('Job Name:{name}\nStatus:{status}'.format(
          name=job.name, status=job.state))
    
      # Fetching Filename in Cloud Storage from the original dlpJob config.
      # See defintion of "JSON Output' in Limiting Cloud Storage Scans':
      # https://cloud.google.com/dlp/docs/inspecting-storage
    
      file_path = (
          job.inspect_details.requested_options.job_config.storage_config
          .cloud_storage_options.file_set.url)
      file_name = os.path.basename(file_path)
    
      info_type_stats = job.inspect_details.result.info_type_stats
      source_bucket = storage_client.get_bucket(STAGING_BUCKET)
      source_blob = source_bucket.blob(file_name)
      if (len(info_type_stats) > 0):
        # Found at least one sensitive data
        for stat in info_type_stats:
          print('Found {stat_cnt} instances of {stat_type_name}.'.format(
              stat_cnt=stat.count, stat_type_name=stat.info_type.name))
        print('Moving item to sensitive bucket')
        destination_bucket = storage_client.get_bucket(SENSITIVE_BUCKET)
        source_bucket.copy_blob(source_blob, destination_bucket,
                                file_name)  # copy the item to the sensitive bucket
        source_blob.delete()  # delete item from the quarantine bucket
    
      else:
        # No sensitive data found
        print('Moving item to non-sensitive bucket')
        destination_bucket = storage_client.get_bucket(NONSENSITIVE_BUCKET)
        source_bucket.copy_blob(
            source_blob, destination_bucket,
            file_name)  # copy the item to the non-sensitive bucket
        source_blob.delete()  # delete item from the quarantine bucket
      print('{} Finished'.format(file_name))
    
  10. Ajuste as seguintes linhas no código que você colou na caixa main.py, substituindo as variáveis pelo ID do seu projeto, pelos buckets correspondentes e pelos nomes do tópico e da assinatura do Pub/Sub que você já criou.

    [YOUR_QUARANTINE_BUCKET]
    [YOUR_SENSITIVE_DATA_BUCKET]
    [YOUR_NON_SENSITIVE_DATA_BUCKET]
    [PROJECT_ID_HOSTING_STAGING_BUCKET]
    [PUB/SUB_TOPIC]
    
  11. Na caixa de texto Função a ser executada, substitua helloPubSub por resolve_DLP.

  12. Cole o trecho a seguir na caixa de texto requirements.txt, substituindo o texto atual:

    google-cloud-dlp
    google-cloud-pubsub
    google-cloud-storage
    
    
  13. Clique em Salvar.

    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. Ajuste as linhas a seguir no código na caixa main.py, substituindo as variáveis de bucket abaixo pelos buckets correspondentes criados anteriormente. Substitua também as variáveis de tópico e de assinatura do Pub/Sub pelos nomes escolhidos.

    [YOUR_QUARANTINE_BUCKET]
    [YOUR_SENSITIVE_DATA_BUCKET]
    [YOUR_NON_SENSITIVE_DATA_BUCKET]
    [PROJECT_ID_HOSTING_STAGING_BUCKET]
    [PUB/SUB_TOPIC]
    
  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 [‘PHONE_NUMBER', ‘EMAIL_ADDRESS'].

  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.

Limpeza

Depois de concluir este tutorial, é possível limpar os recursos criados no Google Cloud para que eles não consumam sua cota e você não receba cobranças por eles no futuro. Veja como excluir e desativar esses recursos nas seções a seguir.

Excluir o projeto

  1. No Console do 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