Como usar um proxy de DLP para interagir com o Cloud SQL

Este tutorial demonstra como usar um proxy que passa os resultados de uma consulta pelo Cloud Data Loss Prevention (Cloud DLP) para que os resultados retornados sejam tokenizados ou desidentificados. Este proxy é uma demonstração para este tutorial e não tem propósitos de produção.

O tutorial é destinado a administradores de bancos de dados, profissionais de segurança e arquitetos de nuvem interessados em usar o Cloud DLP para tokenizar e desidentificar dados armazenados no Cloud SQL. Neste tutorial, consideramos que você já conhece o Cloud Shell e o Cloud SQL.

Todas as organizações têm cada vez mais dados para armazenar, e muitos deles podem ser considerados dados confidenciais. Nem todo mundo que acessa esses dados armazenados precisa ver os dados confidenciais ao executar consultas no banco de dados.

Neste tutorial mostramos como permitir que os usuários acessem um banco de dados do Cloud SQL que contenha dados confidenciais evitando que esses dados sejam visualizados na análise dos resultados da consulta.

O diagrama a seguir mostra a arquitetura de implantação deste tutorial.

Arquitetura de implantação em que os usuários podem acessar o banco de dados do Cloud SQL.

Neste tutorial, mostramos como criar um proxy de DLP que atua como interface entre o Cloud SQL e um cliente SQL simples.

Objetivos

  • Criar um banco de dados e preencher uma tabela com dados confidenciais de exemplo.
  • Criar modelos do Cloud DLP.
  • Fazer o download do servidor proxy de DLP e dos arquivos JAR do cliente.
  • Configurar o proxy DLP para se conectar ao banco de dados da instância do Cloud SQL e para usar os modelos do Cloud DLP.
  • Testar os recursos do proxy.

Custos

Neste tutorial, usamos os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem ser qualificados para uma avaliação gratuita.

Ao concluir este tutorial, exclua os recursos criados para evitar o faturamento contínuo. Para mais informações, consulte Como fazer a limpeza.

Antes de começar

  1. Faça login na sua conta do Google.

    Se você ainda não tiver uma, inscreva-se.

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

    Acessar a página do 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 necessárias.

    Ative as APIs

Como criar um banco de dados do Cloud SQL para MySQL

Nesta seção, mostramos como criar uma instância do Cloud SQL, criar um banco de dados do Cloud SQL para MySQL e adicionar alguns dados confidenciais de exemplo.

  1. No Console do Cloud, ative o Cloud Shell.

    Ativar o Cloud Shell

    Na parte inferior do Console do Cloud, uma sessão do Cloud Shell é iniciada e exibe um prompt de linha de comando. O Cloud Shell é um ambiente com o SDK do Cloud pré-instalado com a ferramenta de linha de comando gcloud e os valores já definidos para seu projeto atual. A inicialização da sessão pode levar alguns segundos.

  2. Todos os comandos neste tutorial são executados no Cloud Shell.
  3. Copie os arquivos necessários para concluir o tutorial do bucket público do Cloud Storage do Google em uma pasta chamada gcp-dlp-tutorial:
    mkdir gcp-dlp-proxy-tutorial
    gsutil cp  gs://solutions-public-assets/dlp-cloudsql-proxy/*.* gcp-dlp-proxy-tutorial
    
  4. Defina o projeto do Cloud:
    gcloud config set project project-id
    

    Substitua:

    • project-id pelo ID do projeto do Cloud.
  5. Altere os diretórios para a pasta onde estão as cópias dos arquivos do tutorial:
    cd  gcp-dlp-proxy-tutorial
    
  6. Para ver uma lista de zonas, execute o seguinte comando:
    gcloud compute zones list
    

    Para saber mais sobre as zonas, consulte Geografia e regiões.

  7. Escolha uma zona para criar a instância do Cloud SQL e exporte a zona como uma variável de ambiente:
    export ZONE=zone
    

    Substitua:

    • zone pela zona escolhida para a criação da instância do Cloud SQL.
  8. Crie uma instância do Cloud SQL para MySQL chamada dlp-test-instance:
    gcloud sql instances create dlp-test-instance  --zone  $ZONE
    

    A instância é criada quando o resultado for semelhante a este:

    Creating Cloud SQL instance...done.
    Created [https://www.googleapis.com/sql/v1beta4/projects/[PROJECT_ID]/instances/dlp-test-instance].
    NAME               DATABASE_VERSION  LOCATION  TIER              PRIMARY_ADDRESS  PRIVATE_ADDRESS  STATUS
    dlp-test-instance  MYSQL_5_7         [ZONE]    db-n1-standard-1  35.195.26.16     -                RUNNABLE
    
  9. Defina a senha do usuário MySQL root@%.
    gcloud sql users set-password root \
      --host=% --instance=dlp-test-instance \
      --password=password
    

    Substitua:

    • password por uma senha forte.

    O resultado exibido é:

    Updating Cloud SQL user...done.
    
  10. Crie um banco de dados chamado dlp-test-db na instância:
    gcloud sql databases create  dlp-test-db --instance dlp-test-instance
    

    O resultado será semelhante a:

    Creating Cloud SQL database...done.
    Created database [dlp-test-db].
    instance: dlp-test-instance
    name: dlp-test-db
    project: project-id
    
  11. Crie um usuário chamado dlptester para o banco de dados:
    gcloud sql users create dlptester \
      --host=% --instance=dlp-test-instance --password=password-database
    

    Substitua:

    • password-database: substitua por uma senha forte. Anote a senha porque você precisará dela mais tarde no tutorial.

    O resultado exibido é:

    Creating Cloud SQL user...done.
    Created user [dlptester].
    
  12. Conecte-se à instância do Cloud SQL para MySQL:
    gcloud sql connect dlp-test-instance  --user=dlptester
    

    Quando solicitado, digite a password-database.

  13. No prompt do MySQL, crie uma tabela chamada TEST_DATA e preencha com algumas linhas de exemplos de dados confidenciais:
    source create_test_data.sql
    
  14. No prompt do MySQL, execute uma consulta para mostrar que os dados de teste foram carregados na tabela:
    select * from TEST_DATA LIMIT 10;
    

    Os resultados da consulta serão semelhantes a estes:

    MySQL [dlp-test-db]> select * from TEST_DATA LIMIT 10;
    +------+---------------------+--------------+-------------+--------+
    | id   | email               | phone        | ssn         | metric |
    +------+---------------------+--------------+-------------+--------+
    |    1 | mallory@example.org | 858-222-0222 | 222-22-2222 |      5 |
    |    2 | james@example.org   | 858-333-0333 | 333-33-3333 |      8 |
    |    3 | mallory@example.org | 858-222-0222 | 222-22-2222 |      8 |
    |    4 | maria@example.org   | 858-444-0444 | 444-44-4444 |      1 |
    |    1 | mallory@example.org | 858-222-0222 | 222-22-2222 |      5 |
    |    2 | james@example.org   | 858-333-0333 | 333-33-3333 |      8 |
    |    3 | mallory@example.org | 858-222-0222 | 222-22-2222 |      8 |
    |    4 | maria@example.org   | 858-444-0444 | 444-44-4444 |      1 |
    +------+---------------------+--------------+-------------+--------+
    8 rows in set (0.00 sec)
    
  15. Saia do cliente MySQL:
    exit
    

Como criar modelos do Cloud DLP

Nesta seção, você criará dois modelos do Cloud DLP. Um deles será um modelo de inspeção para buscar dados confidenciais, conforme definido pelos InfoTypes, nos dados nas tabelas TEST_DATA. O outro, um modelo de desidentificação para tokenizar os dados confidenciais definidos pelos InfoTypes.

Criar um modelo de inspeção

  1. No Console do Cloud, acesse a página Cloud DLP.

    ACESSAR O CLOUD DLP

  2. Clique em Criar e selecione Modelo.

  3. Preencha o campo Código do modelo com inspect-template-1.

  4. Clique em Continuar.

  5. Defina os InfoTypes como EMAIL_ADDRESS, PHONE_NUMBER e US_SOCIAL_SECURITY_NUMBER.

  6. Clique em Criar.

Criar modelo de desidentificação

Nesta seção, você criará um modelo de desidentificação chamado de-identify-template-1, configurado para substituir as informações confidenciais por valores alternativos gerados com o uso de hashes criptográficos. Para saber mais, consulte a seção cryptoHashConfig da documentação do Cloud DLP .

  1. Acesse o API Explorer.

  2. No campo pai, substitua [YOUR-PROJECT] pelo ID do projeto do Cloud.

  3. Selecione Executar e, quando solicitado, selecione Executar novamente.

    Você terá uma resposta 200 e um resultado semelhante a este:

    {
      "name": "projects/YOUR-PROJECT-ID/deidentifyTemplates/de-identify-template-1",
      "createTime": "2019-10-15T12:46:51.944253Z",
      "updateTime": "2019-10-15T12:46:51.944253Z",
      "deidentifyConfig": {
        "infoTypeTransformations": {
          "transformations": [
            {
              "infoTypes": [
                {
                  "name": "PHONE_NUMBER"
                },
                {
                  "name": "US_SOCIAL_SECURITY_NUMBER"
                },
                {
                  "name": "EMAIL_ADDRESS"
                }
              ],
              "primitiveTransformation": {
                "cryptoDeterministicConfig": {
                  "cryptoKey": {
                    "transient": {
                      "name": "abc"
                    }
                  },
                  "surrogateInfoType": {
                    "name": "S1"
                  }
    
  4. Para validar que o modelo de desidentificação foi salvo, volte para o API Explorer para fazer uma chamada para listar os modelos.

  5. Preencha o campo pai com projects/project-id.

  6. Selecione Executar e, quando solicitado, selecione Executar novamente.

    O modelo que você criou estará no resultado, que será semelhante ao seguinte:

    Resultado do API Explorer.

Como configurar e usar o proxy de DLP

Nesta seção, mostraremos como configurar o proxy de DLP, conectar-se ao proxy usando o cliente e testar se os resultados da consulta foram processados pelo Cloud DLP.

  1. No Cloud Shell, altere para o diretório com a pasta onde estão as cópias dos arquivos do tutorial:

    cd  ~/gcp-dlp-proxy-tutorial
    
  2. Edite o arquivo de configuração do servidor proxy do DLP:

    nano config.json
    
  3. Edite as linhas mostradas a seguir substituindo os marcadores pelos valores que refletem a configuração que você quer.

    "db_instance": "project_id:region:instance_name",
    "db_dbname": "dbase_name",
    "projectID": "project_id",
    "audit_template": "inspect_template",
     "deidentify_template": "deidentify_template",
    

    Substitua:

    • project_id pelo ID do projeto do Cloud;
    • region pelo nome da região correspondente à zona em que a instância do Cloud SQL foi criada. Por exemplo, se sua instância foi criada na zona us-central1-a, a região será us-central1..
    • instance_name pelo nome da instância do Cloud SQL, como dlp-test-instance;
    • dbase_name pelo nome do banco de dados, como dlp-test-db;
    • inspect_template pelo nome do modelo de inspeção, como inspect-template-1;
    • inspect_template pelo nome do modelo de desidentificação, como de-identify-template-1.
  4. Para iniciar o proxy DLP, execute o proxy em segundo plano, direcionando o resultado terminal para o arquivo log.txt:

    java -jar dlp-cloudsql-proxy-server.jar database_userpassword-databaselog.txt 2>&1 &
    

    Substitua:

    • database_user pelo nome de usuário do banco de dados;
    • password-database pela senha do usuário do banco de dados que você criou antes.
  5. Para verificar se o proxy de DLP está em execução, verifique se o processo está em execução:

    ps -ax | grep dlp-cloudsql-proxy-server.jar
    

    O processo que executa o proxy de DLP é mostrado no resultado:

    1233 pts/1    Sl     0:08 java -jar dlP-cloudsql-proxy-Server.jar dlptester XXXXXXXX
    1266 pts/1    S+     0:00 grep --color=auto dlp-cloud sql-proxy-Server
    

    Se não encontrar o processo em execução, verifique se há mensagens de erro no arquivo log.txt.

  6. Inicie o cliente simples fornecido para se conectar ao proxy de DLP na porta 5000:

    java -jar dlp-sql-proxy-client-0.1.0.jar 5000
    
  7. No cliente, execute uma consulta simples. Esse comando pode demorar alguns instantes, até que o processamento dos dados no Cloud DLP seja concluído e eles sejam retornados.

    select * from TEST_DATA LIMIT 10;
    

    No resultado da consulta, o número de telefone, o endereço de e-mail e os valores de SSN serão substituídos por valores alternativos com hashes geradas por criptografia. Compare isso com os resultados retornados antes, sem o proxy.

    Connected to SQL Proxy
    Enter query here (enter "quit" to disconnect):
    select * from TEST_DATA LIMIT 10;
    id: 1
    phone: S1(40):AYnPXA6QcxlpOITeaZZM3+U/s7KtXyTqv5KAbB8=
    metric: 5
    email: S1(48):AS8hnzz6g1fGCabK2cbhPn5X7Qvc7FKmLTXnKF1iKF2nRjGQ
    ssn: S1(40):AQ1jSCdIsctniCkCHNEbsc+kliJArHmM6bOJRg==
    
    id: 2
    phone: S1(40):AfiaKlOYHAzgWGtrkpvaCWUY1e2yvMaK7IQvM/M=
    metric: 8
    email: S1(48):ASF7UBFuZ/xUzXJjD1Ap745xcGmKpTjw+IwIBB/F/OX53w==
    ssn: S1(40):AWYXh7U8PhNUZu+fXLuLFS0KCMmcM5uKH17rig==
    
    id: 3
    phone: S1(40):AYnPXA6QcxlpOITeaZZM3+U/s7KtXyTqv5KAbB8=
    metric: 8
    email: S1(48):AS8hnzz6g1fGCabK2cbhPn5X7Qvc7FKmLTXnKF1iKF2nRjGQ
    ssn: S1(40):AQ1jSCdIsctniCkCHNEbsc+kliJArHmM6bOJRg==
    
    id: 4
    phone: S1(40):AXFnPkf620wIBXxW0uuBXSVERzRzvhdgbCdaYIw=
    metric: 1
    email: S1(48):AZgs1pfjEPLL6sDAcIZWuCZhC/saw/rQrujxAFy/O60uIA==
    ssn: S1(40):AatdICHDpwCc19ELEjCS8zAmeSVvx/1KB5/S2Q==
    
    End of query results
    
  8. Saia do cliente:

    quit
    
  9. Encerre o servidor proxy de DLP:

    killall java
    
  10. Grave o arquivo log.txt no terminal para mostrar o resultado do proxy de DLP:

    cat  log.txt
    

    O resultado da fase de auditoria é mostrado no final do arquivo, correspondendo aos três InfoTypes configurados antes:

    RunCommand
    DLP Result
    DLP Findings:
            Quote:                          Info type: PHONE_NUMBER Likelihood: VERY_LIKELY
            Quote:                          Info type: EMAIL_ADDRESS        Likelihood: LIKELY
            Quote:                          Info type: US_SOCIAL_SECURITY_NUMBER    Likelihood: VERY_LIKELY
            Quote:                          Info type: PHONE_NUMBER Likelihood: VERY_LIKELY
            Quote:                          Info type: EMAIL_ADDRESS        Likelihood: LIKELY
            Quote:                          Info type: US_SOCIAL_SECURITY_NUMBER    Likelihood: VERY_LIKELY
            Quote:                          Info type: PHONE_NUMBER Likelihood: VERY_LIKELY
            Quote:                          Info type: EMAIL_ADDRESS        Likelihood: LIKELY
            Quote:                          Info type: US_SOCIAL_SECURITY_NUMBER    Likelihood: VERY_LIKELY
            Quote:                          Info type: PHONE_NUMBER Likelihood: VERY_LIKELY
            Quote:                          Info type: EMAIL_ADDRESS        Likelihood: LIKELY
            Quote:                          Info type: US_SOCIAL_SECURITY_NUMBER    Likelihood: VERY_LIKELY
    
    Got DLP Result
    Sensitive information found
    write log: 1503994
    Logged Main.Query: 1503994
    

Limpar

A maneira mais fácil de eliminar o faturamento é excluir o projeto do Cloud que você criou para o tutorial. A outra opção é excluir os recursos individuais.

Exclua 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