Classer automatiquement les données sensibles

La classification automatique des données sensibles est une fonction sans serveur qui permet de détecter et de baliser automatiquement les données sensibles. Cette fonction surveille en permanence les tables d’un schéma spécifique et classe leurs colonnes à l’aide des catégories de classification natives et personnalisées.

La classification automatique des données sensibles permet aux ingénieurs et aux responsables des données d’effectuer les opérations suivantes :

  • Démontrer comment la classification automatique des tables répond aux besoins de gouvernance interne et de conformité.

  • Veiller à ce que les données sensibles soient correctement balisées.

  • Veiller à ce que les contrôles d’accès appropriés soient mis en place pour protéger les données sensibles.

Prise en main

Le workflow de base pour classer automatiquement les données sensibles est le suivant :

  1. Créez un profil de classification qui contrôle la fréquence à laquelle les données sensibles d’un schéma sont automatiquement classées, y compris si les balises du système doivent être automatiquement appliquées après la classification.

  2. En option, utilisez le profil de classification pour mapper les balises définies par l’utilisateur aux balises du système, de sorte qu’une colonne contenant des données sensibles puisse être associée à une balise définie par l’utilisateur en fonction de sa classification. Vous pouvez ajouter le mappage des balises lors de la création du profil de classification ou après sa création.

  3. En option, ajoutez un classificateur personnalisé au profil de classification afin que les données sensibles puissent être automatiquement classées avec des catégories sémantiques et de confidentialité définies par l’utilisateur. Vous pouvez ajouter des classificateurs personnalisés lors de la création du profil de classification ou après sa création.

  4. Définissez le profil de classification d’un schéma pour que les tables de ce schéma soient automatiquement classées.

Pour des exemples de bout en bout de ce workflow, voir Exemples.

À propos des profils de classification

Un ingénieur des données crée un profil de classification en créant une instance de la classe CLASSIFICATION_PROFILE afin de définir les critères utilisés pour classer automatiquement les tables d’un schéma. Ces critères comprennent :

  • Durée pendant laquelle une table doit exister avant d’être classée automatiquement.

  • Combien de temps avant que les tables précédemment classées ne soient reclassées ?

  • Indiquer si des balises système et des balises clientes doivent être ensemble sur les colonnes après la classification automatique.

  • Un mappage entre les balises de classification du système et les balises des objets définis par l’utilisateur afin que les balises définies par l’utilisateur puissent être appliquées automatiquement.

Lorsque l’ingénieur des données affecte le profil de classification à un schéma, les données sensibles des tables du schéma sont automatiquement classées selon la planification définie par le profil. Un ingénieur des données peut attribuer le même profil de classification à plusieurs schémas ou créer plusieurs profils de classification s’il est nécessaire de définir des critères de classification différents pour différents schémas.

Le processus de classification automatique des données nécessite l’accès aux données brutes de la table. Les données brutes comprennent les tables pour lesquelles une politique de masquage a été attribuée à une colonne. Cependant, Snowflake préserve l’intention de réglementer l’accès aux données protégées en utilisant un rôle interne pour classer automatiquement les données. Le rôle interne peut accéder aux données protégées par une politique de masquage, mais ce rôle n’est pas accessible aux utilisateurs.

Pour un exemple d’utilisation de la commande CREATE CLASSIFICATION_PROFILE pour créer un profil de classification, voir Exemples.

À propos du mappage des balises

Vous pouvez utiliser le profil de classification pour mapper les balises du système SEMANTIC_CATEGORY à une ou plusieurs balises d’objet. Ce mappage de balises permet d’attribuer automatiquement à une colonne contenant des données sensibles une balise définie par l’utilisateur en fonction de sa classification. Le mappage des balises peut être ajouté lors de la création du profil de classification ou ultérieurement en appelant la méthode <nom_profil_classification>!SET_TAG_MAP.

Comme les balises d’objet définies par l’utilisateur peuvent être associées à une politique de masquage, vous pouvez utiliser un mappage de balises pour activer le masquage automatique basé sur les balises, ce qui facilite la protection de la colonne alignée sur la balise du système SEMANTIC_CATEGORY.

Que vous définissiez le mappage des balises lors de la création du profil de classification ou après, le contenu du mappage est spécifié en tant qu’objet JSON. Cet objet JSON contient la clé 'column_tag_map', qui est un tableau d’objets spécifiant une balise définie par l’utilisateur, la valeur de la chaîne de cette balise et les catégories sémantiques auxquelles la balise est mappée. Une fois que le mappage de balises est associé à un profil de classification et que vous classez automatiquement les tables d’un schéma, la balise est affectée aux colonnes qui correspondent aux catégories sémantiques.

Voici un exemple de mappage de balises :

'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

Sur la base de ce mappage, si vous avez une colonne d’adresses e-mail et que le processus de classification détermine que la colonne contient ces adresses, la balise tag_db.sch.pii = 'Confidential' est ensemble sur la colonne contenant les adresses e-mail.

Si votre mappage de balises comprend plusieurs objets JSON qui mappent des balises, des valeurs de balises et des valeurs de catégories, l’ordre des objets JSON détermine quelle balise et quelle valeur doivent être définies sur la colonne en cas de conflit. Spécifiez les objets JSON dans l’ordre d’affectation souhaité, de gauche à droite, ou de haut en bas si vous formatez JSON.

Astuce

Chaque objet du champ 'column_tag_map' n’a qu’une seule clé obligatoire : 'tag_name'. Si vous ne spécifiez pas de valeur pour la balise définie par l’utilisateur, le processus de classification applique la valeur recommandée pour la balise SEMANTIC_CATEGORY.

En cas de conflit entre une balise attribuée manuellement et une balise appliquée par la classification automatique, une erreur se produit. Pour obtenir des informations sur le suivi de ces erreurs, voir Résolution des problèmes.

Voir les résultats de la classification automatique

Vous pouvez voir les résultats de la classification automatique de la manière suivante :

  • Appelez la procédure stockée SYSTEM$GET_CLASSIFICATION_RESULT. Par exemple :

    CALL SYSTEM$GET_CLASSIFICATION_RESULT('mydb.sch.t1');
    
    Copy
  • Utilisez un rôle auquel est attribué le rôle de base de données SNOWFLAKE.GOVERNANCE_VIEWER pour interroger la vue DATA_CLASSIFICATION_LATEST. Par exemple :

    SELECT * FROM snowflake.account_usage.data_classification_latest;
    
    Copy

Limitations

  • Les profils de classification ne peuvent pas être définis sur un compte de lecteur.

  • Un seul profil de classification peut être défini sur un schéma.

  • Le même profil de classification ne peut être défini sur plus de 10 000 schémas.

  • Un maximum de 10 000 tables peuvent être classées dans un schéma.

Contrôle d’accès

Cette section décrit les privilèges et les rôles qui vous permettent de travailler avec les profils de classification et d’activer la classification automatique des données sensibles.

Tâche

Privilège/rôle exigé

Remarques

Créer un profil de classification

Rôle de base de données SNOWFLAKE.CLASSIFICATION_ADMIN

Pour des informations sur l’attribution de ce rôle de base de données à d’autres rôles, voir À l’aide des rôles de base de données SNOWFLAKE.

CREATE SNOWFLAKE.DATA_PRIVACY.CLASSIFICATION_PROFILE sur le schéma

Vous devez disposer de ce privilège sur le schéma dans lequel vous souhaitez créer l’instance de profil de classification.

Appeler les méthodes sur une instance de profil de classification

<profil_de_classification>!PRIVACY_USER rôle de l’instance

Pour des informations sur l’attribution de ce rôle d’instance à d’autres rôles, voir Rôles des instances.

Définir le profil de classification d’un schéma

EXECUTE AUTO CLASSIFICATION sur le compte

Ce privilège est accordé par défaut à ACCOUNTADMIN, qui peut être utilisé pour accorder ce privilège à d’autres rôles.

MODIFY sur le schéma

Vous devez disposer de ce privilège sur le schéma qui contient la table que vous souhaitez classer automatiquement.

APPLY TAG sur le compte

Lister les profils de classification

<profil_de_classification>!PRIVACY_USER rôle de l’instance

Supprimer les profils de classification

OWNERSHIP sur l’instance de profil de classification

Pour un exemple de l’octroi de ces privilèges et des rôles de base de données au rôle d’un ingénieur des données, voir Exemple de base : Classification automatique des tables dans un schéma.

Coût de la classification automatique des données sensibles

La classification automatique des données sensibles consomme des crédits car elle utilise les ressources de calcul sans serveur pour classer les tables du schéma. Pour plus d’informations sur le tarif de cette consommation, voir la table 5 dans Snowflake Service Consumption Table.

Vous pouvez interroger les vues des schémas ACCOUNT_USAGE et ORGANIZATION_USAGE pour déterminer le montant consacré à la classification automatique des données sensibles. Pour suivre la consommation des crédits, interrogez les vues suivantes :

Vue METERING_HISTORY (ACCOUNT_USAGE)

Vous permet de récupérer le coût horaire de la classification automatique en vous concentrant sur SENSITIVE_DATA_CLASSIFICATION dans la colonne SERVICE_TYPE. Par exemple :

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
Vue METERING_DAILY_HISTORY (ACCOUNT_USAGE et ORGANIZATION_USAGE)

Vous permet de récupérer le coût journalier de la classification automatique en vous concentrant sur SENSITIVE_DATA_CLASSIFICATION dans la colonne SERVICE_TYPE. Par exemple :

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)

Vous permet de récupérer le coût journalier de la classification automatique en vous concentrant sur SENSITIVE_DATA_CLASSIFICATION dans la colonne SERVICE_TYPE. Utilisez cette vue pour déterminer le coût en devises et non en crédits.

Exemples

Exemple de base : Classification automatique des tables dans un schéma

Procédez comme suit pour classer automatiquement une table dans le schéma :

  1. En tant qu’administrateur, donnez à l’ingénieur des données les rôles et privilèges dont il a besoin pour classer automatiquement les tables dans un schéma.

    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. Passez au rôle d’ingénieur des données :

    USE ROLE data_engineer;
    
    Copy
  3. Créez le profil de classification en tant qu’instance de la 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. Appelez la méthode DESCRIBE sur l’instance pour confirmer ses propriétés :

    SELECT my_classification_profile!DESCRIBE();
    
    Copy
  5. Définissez l’instance du profil de classification sur le schéma, ce qui lance le processus en arrière-plan de surveillance des tables du schéma et de classification automatique des données sensibles.

    ALTER SCHEMA mydb.sch
     SET CLASSIFICATION_PROFILE = 'mydb.sch.my_classification_profile';
    
    Copy
  6. Appelez la procédure stockée SYSTEM$GET_CLASSIFICATION_RESULT pour obtenir les résultats de la classification automatique.

    CALL SYSTEM$GET_CLASSIFICATION_RESULT('mydb.sch.t1');
    
    Copy
  7. Si vous n’avez plus besoin de classer automatiquement les tables d’un schéma, désactivez le profil de classification du schéma :

    ALTER SCHEMA mydb.sch UNSET CLASSIFICATION_PROFILE;
    
    Copy
  8. Supprimez les profils de classification inutiles à l’aide de la commande DROP CLASSIFICATION_PROFILE.

Exemple : Utilisation d’un mappage de balises et de classificateurs personnalisés

  1. En tant qu’administrateur, donnez à l’ingénieur des données les rôles et privilèges dont il a besoin pour classer automatiquement les tables dans un schéma et définir des balises sur les colonnes.

  2. Créez le profil de classification.

    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. Appelez la méthode SET_TAG_MAP sur l’instance pour ajouter un mappage de balises au profil de classification. Cela permet d’appliquer automatiquement des balises personnalisées sur les colonnes qui contiennent des données sensibles.

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

    Vous auriez également pu ajouter cette carte de balise lors de la création du profil de classification.

  4. Appelez la méthode SET_CUSTOM_CLASSIFIERS pour ajouter des classificateurs personnalisés au profil de classification. Cela permet de classer automatiquement les données sensibles selon des catégories sémantiques et de confidentialité définies par l’utilisateur.

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

    Vous auriez également pu ajouter les classificateurs personnalisés lors de la création du profil de classification.

  5. Appelez la méthode DESCRIBE sur l’instance pour confirmer que le mappage des balises et les classificateurs personnalisés ont été ajoutés au profil de classification.

    SELECT my_classification_profile!DESCRIBE();
    
    Copy
  6. Définissez l’instance du profil de classification sur le schéma.

    ALTER SCHEMA mydb.sch
     SET CLASSIFICATION_PROFILE = 'mydb.sch.my_classification_profile';
    
    Copy
  7. Attachez une politique de masquage à la balise tag_db.sch.pii pour activer le masquage basé sur les balises.

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

Exemple : Test d’un profil de classification avant d’activer la classification automatique

  1. En tant qu’administrateur, donnez à l’ingénieur des données les rôles et privilèges dont il a besoin pour classer automatiquement les tables dans un schéma et définir des balises sur les colonnes.

  2. Créez le profil de classification avec un mappage de balises et des classificateurs personnalisés :

    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. Appelez la procédure stockée SYSTEM$CLASSIFY pour tester les mappages de balises sur la table table1 avant d’activer la classification automatique.

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

    La clé tags de la sortie contient des informations sur la définition de la balise (true si elle est définie, false sinon), le nom de la balise définie et la valeur de la balise :

    {
      "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. Après avoir vérifié que la classification automatique basée sur le profil de classification donnera le résultat souhaité, définissez l’instance du profil de classification sur le schéma.

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

Résolution des problèmes

Les erreurs de classification automatique sont conservées dans la table d’événements par défaut du compte. Vous pouvez utiliser la requête suivante pour accéder aux messages d’erreur :

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