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 :
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.
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.
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.
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 ?
Si les balises du système et les balises personnalisées sont automatiquement ensemble sur les colonnes après la classification. Vous pouvez décider si vous souhaitez que Snowflake applique automatiquement les balises suggérées ou si vous préférez examiner les attributions de balises proposées, puis les appliquer vous-même.
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 <classification_profile_name>!SET_TAG_MAP.
Étant donné que 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. Si vous choisissez d’appliquer automatiquement des balises après la classification, vous pouvez automatiser l’ensemble du processus de protection des colonnes à l’aide d’une politique de masquage basée sur la classification des données. Lorsque de nouvelles données sont ajoutées à un schéma, les politiques de masquage basées sur les balises sont automatiquement affectées aux colonnes contenant des données sensibles.
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'
]
}
]
}
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 omettez les clés tag_value
et semantic_categories
, la balise définie par l’utilisateur est appliquée à chaque colonne à laquelle la balise du système SEMANTIC_CATEGORY est appliquée, et la valeur de la balise définie par l’utilisateur correspondra à la valeur de la balise SEMANTIC_CATEGORY pour une colonne donnée.
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.
Mise en œuvre de la classification automatique des clients¶
Snowflake vous permet de définir des classificateurs personnalisés qui utilisent une logique personnalisée pour identifier et classer les données sensibles. Par exemple, vous pouvez créer un identificateur personnalisé qui utilise une expression régulière pour identifier les catégories ICD-10 et les classer dans la catégorie sémantique ICD_10_CODES
.
Après avoir créé un classificateur personnalisé, vous pouvez l’ajouter au profil de classification afin que Snowflake classe automatiquement les données en fonction de sa logique. Vous pouvez ajouter le classificateur personnalisé lors de la création du profil de classification ou en appelant la méthode <classification_profile_name>!SET_CUSTOM_CLASSIFIERS.
L’ajout de classificateurs personnalisés et d’un mappage dans votre profil de classification constitue une solution de gouvernance puissante. Il vous permet de classer automatiquement les données en fonction de votre connaissance de ce qui est sensible et d’appliquer une balise définie par l’utilisateur que vous pouvez suivre. Si vous utilisez cette balise définie par l’utilisateur pour mettre en œuvre le masquage basé sur la balise, vos données sensibles spécifiques au domaine sont automatiquement protégées par une politique de masquage lorsque des données sont ajoutées à un schéma.
Important
La classification automatique enregistre la définition d’un classificateur personnalisé, et non une référence. Si vous modifiez le classificateur personnalisé, vous devez utiliser la méthode SET_CUSTOM_CLASSIFIERS pour mettre à jour le profil de classification avec la nouvelle définition.
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');
Vous ne pouvez pas renvoyer les résultats tant que le processus de classification n’est pas terminé. Le processus de classification automatique ne démarre qu’une heure après avoir paramétré le profil de classification sur le schéma.
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;
Les résultats peuvent n’apparaître que trois heures après la fin de la classification.
Limitations¶
Les profils de classification ne peuvent pas être définis sur un compte de lecteur.
Vous ne pouvez pas classer automatiquement les vues.
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 100 millions de tables peuvent être classées dans un schéma.
Vous ne pouvez pas classer automatiquement une table si elle présente l’une des caractéristiques suivantes :
Elle compte plus de 10 000 colonnes.
Elle a une colonne dont le nom comporte plus de 255 caractères.
Elle a une colonne dont le nom contient le caractère
$
.Elle provient d’une action.
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èges/rôles exigés |
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. |
CREATESNOWFLAKE.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. |
|
Définir le profil de classification d’un schéma |
Un des éléments suivants :
|
Par défaut, le propriétaire du schéma dispose du privilège EXECUTE AUTO CLASSIFICATION sur celui-ci. |
Tout privilège sur la base de données |
Vous devez disposer d’au moins un privilège sur la base de données qui contient le schéma sur lequel vous établissez le profil de classification. |
|
Tout privilège sur le schéma |
Vous devez disposer d’au moins un privilège sur le schéma qui contient la table que vous souhaitez classer automatiquement. Le privilège EXECUTE AUTO CLASSIFICATION répond à cette exigence. |
|
Un des éléments suivants :
|
Pour des informations sur l’attribution du rôle d’instance PRIVACY_USER à d’autres rôles, voir Rôles des instances. |
|
APPLY TAG sur le compte |
||
Appeler les méthodes sur une instance de profil de classification |
<classification_profile>!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. |
Lister les profils de classification |
<classification_profile>!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 colonneSERVICE_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';
- 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 colonneSERVICE_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';
- 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 colonneSERVICE_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
Exemple : Utilisation d’un mappage de balises et de classificateurs personnalisés
Exemple : Test d’un profil de classification avant d’activer la classification automatique
Exemple de base : Classification automatique des tables dans un schéma¶
Procédez comme suit pour classer automatiquement une table dans le schéma :
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 EXECUTE AUTO CLASSIFICATION ON SCHEMA mydb.sch 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 APPLY TAG ON ACCOUNT TO ROLE data_engineer;
Passez au rôle d’ingénieur des données :
USE ROLE data_engineer;
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': 0, 'maximum_classification_validity_days': 30, 'auto_tag': true });
Appelez la méthode DESCRIBE sur l’instance pour confirmer ses propriétés :
SELECT my_classification_profile!DESCRIBE();
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';
Note
Il s’écoule une heure entre le moment où le profil de classification est paramétré sur le schéma et le moment où Snowflake commence à classifier le schéma.
Après une heure d’attente, 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');
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;
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¶
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.
Créez le profil de classification.
CREATE OR REPLACE SNOWFLAKE.DATA_PRIVACY.CLASSIFICATION_PROFILE my_classification_profile( { 'minimum_object_age_for_classification_days': 0, 'maximum_classification_validity_days': 30, 'auto_tag': true });
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'] }]});
Vous auriez également pu ajouter cette carte de balise lors de la création du profil de classification.
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() });
Vous auriez également pu ajouter les classificateurs personnalisés lors de la création du profil de classification.
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();
Définissez l’instance du profil de classification sur le schéma.
ALTER SCHEMA mydb.sch SET CLASSIFICATION_PROFILE = 'mydb.sch.my_classification_profile';
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;
Exemple : Test d’un profil de classification avant d’activer la classification automatique¶
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.
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_profile( { 'minimum_object_age_for_classification_days':0, '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() } } );
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' );
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 } } }
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';
Résolution des problèmes¶
Par défaut, Snowflake utilise la table d’événements de l’utilisateur pour connecter les événements liés à la classification automatique des données sensibles. Si vous souhaitez empêcher que les événements de classification soient connectés, réglez le paramètre de compte ENABLE_AUTOMATIC_SENSITIVE_DATA_CLASSIFICATION_LOG sur FALSE.
Vous pouvez utiliser la requête suivante pour accéder aux messages d’erreur de la table des événements :
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;
Les messages d’erreur suivants sont possibles, la sortie étant tronquée pour contenir la clé "failure_reason"
et sa valeur (le message d’erreur) :
Erreur |
"failure_reason":"NO_TAGGING_PRIVILEGE"
|
---|---|
Cause |
Le rôle utilisé pour la classification automatique ne dispose pas des privilèges nécessaires pour définir des balises. |
Solution |
Accorde les privilèges nécessaires au rôle utilisé pour la classification automatique. Pour plus d’informations, voir Privilèges des balises. |
Erreur |
"failure_reason":"MANUALLY_APPLIED_VALUE_PRESENT"
|
---|---|
Cause |
Une autre balise est fixée manuellement sur la colonne. |
Solution |
Déterminez si vous souhaitez conserver la balise qui a été réglée manuellement sur la colonne. Si ce n’est pas le cas, désactivez la balise avant de classer la table à l’aide de la classification automatique ou de la procédure stockée SYSTEM$CLASSIFY. |
Erreur |
"failure_reason":"TAG_NOT_ACCESSIBLE_OR_AUTHORIZED"
|
---|---|
Cause |
Le rôle utilisé pour la classification ne peut pas accéder à la balise. |
Solution |
|
Pour plus d’informations sur les messages de la table des événements, voir Affichage des messages de journalisation.