Classificação automática de dados confidenciais

A classificação automática de dados confidenciais é um recurso sem servidor que permite a detecção e a marcação automáticas de dados confidenciais. O recurso monitora continuamente as tabelas em um esquema específico e classifica suas colunas usando as categorias de classificação nativa e personalizada.

A classificação automática de dados confidenciais permite que os engenheiros e administradores de dados:

  • Demonstrar como a classificação automática de tabelas atende às necessidades internas de governança e conformidade.

  • Assegurarem-se de que os dados confidenciais sejam marcados adequadamente.

  • Assegurarem-se de que os controles de acesso corretos estejam em vigor para proteger os dados confidenciais.

Introdução

O fluxo de trabalho básico para classificar automaticamente os dados confidenciais consiste no seguinte:

  1. Crie um perfil de classificação que controle a frequência com que os dados confidenciais em um esquema são classificados automaticamente, inclusive se as tags do sistema devem ser aplicadas automaticamente após a classificação.

  2. Opcionalmente, use o perfil de classificação para mapear as tags definidas pelo usuário para as tags do sistema, de modo que uma coluna com dados confidenciais possa ser associada a uma tag definida pelo usuário com base em sua classificação. É possível adicionar o mapeamento de tags ao criar o perfil de classificação ou após criá-lo.

  3. Opcionalmente, adicione um classificador personalizado ao perfil de classificação para que os dados confidenciais possam ser classificados automaticamente com categorias semânticas e de privacidade definidas pelo usuário. É possível adicionar classificadores personalizados ao criar o perfil de classificação ou após criá-lo.

  4. Defina o perfil de classificação em um esquema para que as tabelas do esquema sejam classificadas automaticamente.

Para obter exemplos completos desse fluxo de trabalho, consulte Exemplos.

Sobre os perfis de classificação

Um engenheiro de dados cria um perfil de classificação criando uma instância da classe CLASSIFICATION_PROFILE para definir os critérios usados para classificar automaticamente as tabelas em um esquema. Esses critérios incluem:

  • Quanto tempo uma tabela deve existir antes de ser classificada automaticamente.

  • Quanto tempo antes as tabelas classificadas anteriormente devem ser reclassificadas.

  • Se o sistema e as tags personalizadas devem ser definidas nas colunas após a classificação automática.

  • Um mapeamento entre as tags de classificação do sistema e as tags de objetos definidos pelo usuário para que as tags definidas pelo usuário possam ser aplicadas automaticamente.

Quando o engenheiro de dados atribui o perfil de classificação a um esquema, os dados confidenciais nas tabelas do esquema são automaticamente classificados de acordo com o cronograma definido pelo perfil. Um engenheiro de dados pode atribuir o mesmo perfil de classificação a vários esquemas ou criar vários perfis de classificação se houver necessidade de definir critérios de classificação diferentes para diferentes esquemas.

O processo de classificação automática de dados requer acesso aos dados brutos da tabela. Os dados brutos incluem tabelas com uma política de mascaramento atribuída a uma coluna. No entanto, a Snowflake preserva a intenção de regular o acesso a dados protegidos usando uma função interna para classificar automaticamente os dados. A função interna pode acessar dados protegidos por uma política de mascaramento, mas essa função não é acessível aos usuários.

Para obter um exemplo de uso do comando CREATE CLASSIFICATION_PROFILE para criar um perfil de classificação, consulte Exemplos.

Sobre o mapeamento de tags

É possível usar o perfil de classificação para mapear as tags de sistema SEMANTIC_CATEGORY para uma ou mais tags de objeto. Esse mapeamento de tags permite que uma coluna com dados confidenciais seja automaticamente atribuída a uma tag definida pelo usuário com base em sua classificação. O mapeamento de tags pode ser adicionado durante a criação do perfil de classificação ou posteriormente, chamando o método <classification_profile_name>!SET_TAG_MAP.

Como as tags de objeto definidas pelo usuário podem ter uma política de mascaramento associada a elas, é possível usar um mapeamento de tags para ativar o mascaramento baseado em tag automático, o que facilita a proteção da coluna alinhada com a tag do sistema SEMANTIC_CATEGORY.

Independentemente de você estar definindo o mapeamento de tags ao criar o perfil de classificação ou depois, o conteúdo do mapeamento é especificado como um objeto JSON. Esse objeto JSON contém a chave 'column_tag_map', que é uma matriz de objetos que especificam uma tag definida pelo usuário, o valor da cadeia de caracteres dessa tag e as categorias semânticas às quais a tag está sendo mapeada. Depois que o mapeamento de tags for associado a um perfil de classificação e você classificar automaticamente as tabelas em um esquema, a tag será atribuída às colunas que correspondem às categorias semânticas.

A seguir, um exemplo de um mapeamento de tags:

'tag_map': {
  'column_tag_map': [
    {
      'tag_name':'tag_db.sch.pii',
      'tag_value':'Highly Confidential',
      'semantic_categories':[
        'NAME',
        'NATIONAL_IDENTIFIER'
      ]
    },
    {
      'tag_name': 'tag_db.sch.pii',
      'tag_value':'Confidential',
      'semantic_categories': [
        'EMAIL'
      ]
    }
  ]
}
Copy

Com base nesse mapeamento, se você tiver uma coluna de endereços de e-mail e o processo de classificação determinar que a coluna contém esses endereços, a tag tag_db.sch.pii = 'Confidential' será definida na coluna que contém os endereços de e-mail.

Se o seu mapeamento de tags incluir vários objetos JSON que mapeiam tags, valores de tags e valores de categorias, a ordem dos objetos JSON determinará qual tag e qual valor serão definidos na coluna se houver um conflito. Especifique os objetos JSON na ordem de atribuição desejada, da esquerda para a direita, ou de cima para baixo, se estiver formatando JSON.

Dica

Cada objeto no campo 'column_tag_map' tem apenas uma chave obrigatória: 'tag_name'. Se você não especificar um valor para a tag definida pelo usuário, o processo de classificação aplicará o valor recomendado da tag SEMANTIC_CATEGORY.

Se houver um conflito entre uma tag atribuída manualmente e uma tag aplicada pela classificação automática, ocorrerá um erro. Para obter informações sobre o rastreamento desses erros, consulte Solução de problemas.

Visualização dos resultados da classificação automática

É possível visualizar os resultados da classificação automática das seguintes maneiras:

  • Chame o procedimento armazenado SYSTEM$GET_CLASSIFICATION_RESULT. Por exemplo:

    CALL SYSTEM$GET_CLASSIFICATION_RESULT('mydb.sch.t1');
    
    Copy
  • Use uma função que tenha recebido a função de banco de dados SNOWFLAKE.GOVERNANCE_VIEWER para consultar a exibição DATA_CLASSIFICATION_LATEST. Por exemplo:

    SELECT * FROM snowflake.account_usage.data_classification_latest;
    
    Copy

Limitações

  • Os perfis de classificação não podem ser definidos em uma conta de leitor.

  • Somente um perfil de classificação pode ser definido em um esquema.

  • O mesmo perfil de classificação não pode ser definido em mais de 10.000 esquemas.

  • Um máximo de 10.000 tabelas pode ser classificado em um esquema.

Controle de acesso

Esta seção descreve os privilégios e as funções que permitem que você trabalhe com perfis de classificação e habilite a classificação automática de dados confidenciais.

Tarefa

Privilégio/função necessários

Notas

Criação de um perfil de classificação

Função de banco de dados SNOWFLAKE.CLASSIFICATION_ADMIN

Para obter informações sobre como conceder essa função de banco de dados a outras funções, consulte Como usar as funções de banco de dados SNOWFLAKE.

CREATE SNOWFLAKE.DATA_PRIVACY.CLASSIFICATION_PROFILE no esquema

Você precisa desse privilégio no esquema em que deseja criar a instância do perfil de classificação.

Chame os métodos em uma instância de perfil de classificação

Função de instância <classification_profile>!PRIVACY_USER

Para obter informações sobre como conceder essa função de instância a outras funções, consulte Funções de instância.

Definição do perfil de classificação em um esquema

EXECUTE AUTO CLASSIFICATION na conta

Esse privilégio é concedido ao ACCOUNTADMIN por padrão, que pode ser usado para conceder esse privilégio a outras funções.

MODIFY no esquema

Você precisa desse privilégio no esquema que contém a tabela que deseja classificar automaticamente.

APPLY TAG na conta

Listagem de perfis de classificação

Função de instância <classification_profile>!PRIVACY_USER

Descarte de perfis de classificação

OWNERSHIP na instância do perfil de classificação

Para obter um exemplo de concessão desses privilégios e funções de banco de dados à função de um engenheiro de dados, consulte Exemplo básico: classificação automática de tabelas em um esquema.

Custo da classificação automática de dados confidenciais

A classificação automática de dados confidenciais consome créditos, pois usa os recursos de computação sem servidor para classificar as tabelas no esquema. Para obter mais informações sobre os preços desse consumo, consulte a Tabela 5 em Snowflake Service Consumption Table.

É possível consultar exibições nos esquemas ACCOUNT_USAGE e ORGANIZATION_USAGE para determinar quanto foi gasto na classificação automática de dados confidenciais. Para monitorar o consumo de crédito, consulte as seguintes exibições:

Exibição METERING_HISTORY (ACCOUNT_USAGE)

Permite que você recupere o custo por hora da classificação automática, concentrando-se em SENSITIVE_DATA_CLASSIFICATION na coluna SERVICE_TYPE. Por exemplo:

SELECT
  service_type,
  start_time,
  end_time,
  entity_id,
  name,
  credits_used_compute,
  credits_used_cloud_services,
  credits_used,
  budget_id
  FROM snowflake.account_usage.metering_history
  WHERE service_type = 'SENSITIVE_DATA_CLASSIFICATION';
Copy
Exibição METERING_DAILY_HISTORY (ACCOUNT_USAGE e ORGANIZATION_USAGE)

Permite que você recupere o custo diário da classificação automática, concentrando-se em SENSITIVE_DATA_CLASSIFICATION na coluna SERVICE_TYPE. Por exemplo:

SELECT
  service_type,
  usage_date,
  credits_used_compute,
  credits_used_cloud_services,
  credits_used
  FROM snowflake.account_usage.metering_daily_history
  WHERE service_type = 'SENSITIVE_DATA_CLASSIFICATION';
Copy
USAGE_IN_CURRENCY_DAILY (ORGANIZATION_USAGE)

Permite que você recupere o custo diário da classificação automática, concentrando-se em SENSITIVE_DATA_CLASSIFICATION na coluna SERVICE_TYPE. Use essa exibição para determinar o custo em moeda, não em créditos.

Exemplos

Exemplo básico: classificação automática de tabelas em um esquema

Conclua estas etapas para classificar automaticamente uma tabela no esquema:

  1. Como administrador, dê ao engenheiro de dados as funções e os privilégios necessários para classificar automaticamente as tabelas em um esquema.

    USE ROLE ACCOUNTADMIN;
    
    GRANT USAGE ON DATABASE mydb TO ROLE data_engineer;
    GRANT MODIFY ON SCHEMA mydb.sch TO ROLE data_engineer;
    GRANT SELECT ON TABLE mydb.sch.t1 TO ROLE data_engineer;
    
    GRANT DATABASE ROLE SNOWFLAKE.CLASSIFICATION_ADMIN TO ROLE data_engineer;
    GRANT CREATE SNOWFLAKE.DATA_PRIVACY.CLASSIFICATION_PROFILE ON SCHEMA mydb.sch TO ROLE data_engineer;
    
    GRANT EXECUTE AUTO CLASSIFICATION ON ACCOUNT TO ROLE data_engineer;
    GRANT APPLY TAG ON ACCOUNT TO ROLE data_engineer;
    
    Copy
  2. Alterne para a função de engenheiro de dados:

    USE ROLE data_engineer;
    
    Copy
  3. Crie o perfil de classificação como uma instância da classe CLASSIFICATION_PROFILE:

    CREATE OR REPLACE SNOWFLAKE.DATA_PRIVACY.CLASSIFICATION_PROFILE
      my_classification_profile(
        {
          'minimum_object_age_for_classification_days': 1,
          'maximum_classification_validity_days': 30,
          'auto_tag': true
        });
    
    Copy
  4. Chame o método DESCRIBE na instância para confirmar suas propriedades:

    SELECT my_classification_profile!DESCRIBE();
    
    Copy
  5. Defina a instância do perfil de classificação no esquema, que inicia o processo em segundo plano de monitoramento das tabelas no esquema e as classifica automaticamente quanto a dados confidenciais.

    ALTER SCHEMA mydb.sch
     SET CLASSIFICATION_PROFILE = 'mydb.sch.my_classification_profile';
    
    Copy
  6. Chame o procedimento armazenado SYSTEM$GET_CLASSIFICATION_RESULT para obter os resultados da classificação automática.

    CALL SYSTEM$GET_CLASSIFICATION_RESULT('mydb.sch.t1');
    
    Copy
  7. Se você não precisar mais classificar automaticamente as tabelas em um esquema, desmarque o perfil de classificação do esquema:

    ALTER SCHEMA mydb.sch UNSET CLASSIFICATION_PROFILE;
    
    Copy
  8. Elimine os perfis de classificação que não são necessários usando o comando DROP CLASSIFICATION_PROFILE.

Exemplo: uso de um mapeamento de tags e classificadores personalizados

  1. Como administrador, conceda ao engenheiro de dados as funções e os privilégios de que ele precisa para classificar automaticamente as tabelas em um esquema e definir tags nas colunas.

  2. Crie o perfil de classificação.

    CREATE OR REPLACE SNOWFLAKE.DATA_PRIVACY.CLASSIFICATION_PROFILE
      my_classification_profile(
        {
          'minimum_object_age_for_classification_days': 1,
          'maximum_classification_validity_days': 30,
          'auto_tag': true
        });
    
    Copy
  3. Chame o método SET_TAG_MAP na instância para adicionar um mapeamento de tags ao perfil de classificação. Isso permite que tags personalizadas sejam aplicadas automaticamente em colunas com dados confidenciais.

    CALL my_classification_profile!SET_TAG_MAP(
      {'column_tag_map':[
        {
          'tag_name':'my_db.sch1.pii',
          'tag_value':'sensitive',
          'semantic_categories':['NAME']
        }]});
    
    Copy

    Como alternativa, você poderia ter adicionado esse mapeamento de tags ao criar o perfil de classificação.

  4. Chame o método SET_CUSTOM_CLASSIFIERS para adicionar classificadores personalizados ao perfil de classificação. Isso permite que os dados confidenciais sejam classificados automaticamente com categorias semânticas e de privacidade definidas pelo usuário.

    CALL my_classification_profile!set_custom_classifiers(
      {
        'medical_codes': medical_codes!list(),
        'finance_codes': finance_codes!list()
      });
    
    Copy

    Como alternativa, você poderia ter adicionado os classificadores personalizados ao criar o perfil de classificação.

  5. Chame o método DESCRIBE na instância para confirmar que o mapeamento de tags e os classificadores personalizados foram adicionados ao perfil de classificação.

    SELECT my_classification_profile!DESCRIBE();
    
    Copy
  6. Defina a instância do perfil de classificação no esquema.

    ALTER SCHEMA mydb.sch
     SET CLASSIFICATION_PROFILE = 'mydb.sch.my_classification_profile';
    
    Copy
  7. Anexe uma política de mascaramento à tag tag_db.sch.pii para ativar o mascaramento baseado em tag.

    ALTER TAG tag_db.sch.pii SET MASKING POLICY pii_mask;
    
    Copy

Exemplo: testes de um perfil de classificação antes de ativar a classificação automática

  1. Como administrador, conceda ao engenheiro de dados as funções e os privilégios de que ele precisa para classificar automaticamente as tabelas em um esquema e definir tags nas colunas.

  2. Crie o perfil de classificação com um mapeamento de tags e classificadores personalizados:

    CREATE OR REPLACE SNOWFLAKE.DATA_PRIVACY.CLASSIFICATION_PROFILE my_classification_profile2(
      {
        'minimum_object_age_for_classification_days':1,
        'auto_tag':true,
        'tag_map': {
          'column_tag_map':[
            {
              'tag_name':'tag_db.sch.pii',
              'tag_value':'highly sensitive',
              'semantic_categories':['NAME','NATIONAL_IDENTIFIER']
            },
            {
              'tag_name':'tag_db.sch.pii',
              'tag_value':'sensitive',
              'semantic_categories':['EMAIL','MEDICAL_CODE']
            }
          ]
        },
        'custom_classifiers': {
          'medical_codes': medical_codes!list(),
          'finance_codes': finance_codes!list()
        }
      }
    );
    
    Copy
  3. Chame o procedimento armazenado SYSTEM$CLASSIFY para testar os mapeamentos de tags na tabela table1 antes de ativar a classificação automática.

    CALL SYSTEM$CLASSIFY(
     'db.sch.table1',
     'db.sch.my_classification_profile'
    );
    
    Copy

    A chave tags na saída contém os detalhes sobre se a tag foi definida (true se definida, false caso contrário), o nome da tag definida e o valor da tag:

    {
      "classification_profile_config": {
        "classification_profile_name": "db.schema.my_classification_profile"
      },
      "classification_result": {
        "EMAIL": {
          "alternates": [],
          "recommendation": {
            "confidence": "HIGH",
            "coverage": 1,
            "details": [],
            "privacy_category": "IDENTIFIER",
            "semantic_category": "EMAIL",
            "tags": [
              {
                "tag_applied": true,
                "tag_name": "snowflake.core.semantic_category",
                "tag_value": "EMAIL"
              },
              {
                "tag_applied": true,
                "tag_name": "snowflake.core.privacy_category",
                "tag_value": "IDENTIFIER"
              },
              {
                "tag_applied": true,
                "tag_name": "tag_db.sch.pii",
                "tag_value": "sensitive"
              }
            ]
          },
          "valid_value_ratio": 1
        },
        "FIRST_NAME": {
          "alternates": [],
          "recommendation": {
            "confidence": "HIGH",
            "coverage": 1,
            "details": [],
            "privacy_category": "IDENTIFIER",
            "semantic_category": "NAME",
            "tags": [
              {
                "tag_applied": true,
                "tag_name": "snowflake.core.semantic_category",
                "tag_value": "NAME"
              },
              {
                "tag_applied": true,
                "tag_name": "snowflake.core.privacy_category",
                "tag_value": "IDENTIFIER"
              },
              {
                "tag_applied": true,
                "tag_name": "tag_db.sch.pii",
                "tag_value": "highly sensitive"
              }
            ]
          },
          "valid_value_ratio": 1
        }
      }
    }
    
  4. Após verificar que a classificação automática com base no perfil de classificação terá o resultado desejado, defina a instância do perfil de classificação no esquema.

    ALTER SCHEMA mydb.sch
     SET CLASSIFICATION_PROFILE = 'mydb.sch.my_classification_profile';
    
    Copy

Solução de problemas

Os erros de classificação automática são mantidos na tabela de evento padrão da conta. É possível usar a seguinte consulta para acessar as mensagens de erro:

SELECT
  record_type,
  record:severity_text::string log_level,
  parse_json(value) error_message
  FROM log_db.log_schema.log_table
  WHERE record_type='LOG' and scope:name ='snow.automatic_sensitive_data_classification'
  ORDER BY log_level;
Copy