自动对敏感数据进行分类

自动敏感数据分类是一项无服务器功能,可实现敏感数据的自动检测和标记。该功能可持续监控特定架构中的表,并使用 本地自定义 分类类别对列进行分类。

自动敏感数据分类可助力数据工程师和管理员完成以下工作:

  • 演示如何自动对表进行分类,以满足内部管理和合规需求。

  • 确保适当标记敏感数据。

  • 确保采用正确的访问控制,以保护敏感数据。

开始使用

自动对敏感数据进行分类的基本工作流程包括以下内容:

  1. 创建 分类配置文件,控制架构中敏感数据的自动分类频率,包括分类后是否应自动应用 系统标签

  2. (可选)使用分类配置文件将用户定义的标签映射到系统标签,以便包含敏感数据的列可以根据其分类与用户定义的标签关联。您可以在创建分类配置文件时或创建后添加标签映射。

  3. (可选)在分类配置文件中添加 自定义分类器,以便使用用户定义的语义和隐私类别对敏感数据进行自动分类。您可以在创建分类配置文件时或创建后添加自定义分类器。

  4. 在架构上设置分类配置文件,以便自动对架构中的表进行分类。

有关该工作流程的端到端示例,请参阅 示例

关于分类配置文件

数据工程人员会创建 CLASSIFICATION_PROFILE 的实例,创建分类配置文件,以定义用于对架构中的表进行自动分类的标准。该标准包括:

  • 表在自动分类前应存在多长时间。

  • 之前已分类的表应在多长时间内重新分类。

  • 自动分类后,是否应在列上设置系统和自定义标签。

  • 在系统分类标签和用户定义的对象标签之间 映射,以便自动应用用户定义的标签。

当数据工程师将分类配置文件分配给某个架构时,该架构表中的敏感数据就会按照配置文件定义的时间表自动分类。数据工程师可以为多个架构分配相同的分类配置文件,如果需要为不同的架构设置不同的分类标准,也可以创建多个分类配置文件。

数据自动分类过程需要访问表中的原始数据。原始数据包括为列指定了掩码策略的表。不过,Snowflake 通过使用内部角色对数据进行自动分类,保留了规范受保护数据访问的意图。内部角色可以访问受掩码策略保护的数据,但用户无法访问该角色。

有关使用 CREATE CLASSIFICATION_PROFILE 命令创建分类配置文件的示例,请参阅 示例

关于标签映射

您可以使用分类配置文件将 SEMANTIC_CATEGORY 系统标记 映射到一个或多个 对象标签。这种标签映射允许根据敏感数据的分类自动为列分配用户定义的标签。标签图可以在创建分类配置文件时添加,也可以稍后通过调用 <classification_profile_name>!SET_TAG_MAP 方法添加。

由于用户定义的对象标签可以具有与之关联的掩码策略,因此可以使用标签映射来启用 基于标签的自动掩码,这有利于与 SEMANTIC_CATEGORY 系统标签对齐的列保护。

无论您是在创建分类配置文件时定义标签图,还是在创建后定义标签图,标签图的内容都是以 JSON 对象的形式指定。该 JSON 对象包含 'column_tag_map' 键,它是一个对象数组,其中指定了一个用户定义的标签、该标签的字符串值以及该标签被映射到的语义类别。标签映射与分类配置文件关联并自动对架构中的表进行分类后,标签就会被分配到与语义类别相对应的列中。

以下是标签映射示例:

'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

根据此映射,如果您有一列电子邮件地址,且分类过程确定该列包含这些地址,则会在包含电子邮件地址的列上设置 tag_db.sch.pii = 'Confidential' 标签。

如果您的标签映射包括多个映射标签、标签值和类别值的 JSON 对象,则 JSON 对象的顺序将决定在发生冲突时在列上设置哪个标签和值。按所需的赋值顺序从左到右指定 JSON 对象,如果是格式化 JSON,则从上到下。

小技巧

'column_tag_map' 字段中的每个对象只有一个必填键:'tag_name'。如果您没有为用户定义的标签指定值,分类过程会应用推荐的 SEMANTIC_CATEGORY 标签值。

如果手动分配的标签与自动分类应用的标签发生冲突,则会出现错误。有关跟踪这些错误的信息,请参阅 故障排除

查看自动分类结果

您可以通过以下方式查看自动分类的结果:

  • 调用 SYSTEM$GET_CLASSIFICATION_RESULT 存储过程。例如:

    CALL SYSTEM$GET_CLASSIFICATION_RESULT('mydb.sch.t1');
    
    Copy
  • 使用被授予 SNOWFLAKE.GOVERNANCE_VIEWER 数据库角色的角色查询 DATA_CLASSIFICATION_LATEST 视图。例如:

    SELECT * FROM snowflake.account_usage.data_classification_latest;
    
    Copy

限制

  • 不能在阅读者账户上设置分类配置文件。

  • 一个架构只能设置一个分类配置文件。

  • 不能在超过 10,000 个架构上设置同一分类配置文件。

  • 一个架构中最多可分类 10,000 个表。

访问控制

本不分介绍可让您使用分类配置文件和启用敏感数据自动分类的权限和角色。

数据库角色

SNOWFLAKE.CLASSIFICATION_ADMIN 数据库角色可让您通过创建 CLASSIFICATION_PROFILE 类的实例来创建分类配置文件。

有关将此数据库角色授予其他角色以使用户能够创建分类配置文件的信息,请参阅 使用 SNOWFLAKE 数据库角色

实例角色

<classification_profile>!PRIVACY_USER 实例角色可让您在 CLASSIFICATION_PROFILE 类的实例上调用 方法

实例创建者会被自动授予此实例角色。创建者可根据需要向实例角色授予其他角色。

有关将此实例角色授予其他角色以使用户能够使用分类配置文件的信息,请参阅 实例角色

权限

通过以下访问控制权限,您可以执行与敏感数据自动分类相关的任务。

任务

权限

对象

备注

删除或列出分类配置文件

OWNERSHIP

分类配置文件实例

在架构上设置实例

EXECUTE AUTO CLASSIFICATION

账户

该权限默认授予 ACCOUNTADMIN,可用于向其他角色授予此权限。

MODIFY

架构

这是包含要自动分类的表的架构。

APPLY TAG

账户

如果使用自动分类在架构中应用标签,则为必填项。

有关向数据工程师角色授予这些权限和数据库角色的示例,请参阅 基本示例:自动对架构中的表进行分类

自动分类敏感数据的成本

自动敏感数据分类会使用 credit,因为它使用 无服务器计算资源 对架构中的表进行分类。有关该使用定价的更多信息,请参阅 `Snowflake 服务使用表 `_ 中的表 5。

您可以查询 ACCOUNT_USAGE 和 ORGANIZATION_USAGE 架构中的视图,以确定用于自动分类敏感数据的费用。要监控 credit 使用,请查询以下视图:

METERING_HISTORY 视图 (ACCOUNT_USAGE)

通过关注 SERVICE_TYPE 列中的 SENSITIVE_DATA_CLASSIFICATION,您可以检索自动分类的每小时成本。例如:

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
METERING_DAILY_HISTORY 视图(ACCOUNT_USAGE 和 ORGANIZATION_USAGE)

通过关注 SERVICE_TYPE 列中的 SENSITIVE_DATA_CLASSIFICATION,您可以检索自动分类的每日成本。例如:

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)

通过关注 SERVICE_TYPE 列中的 SENSITIVE_DATA_CLASSIFICATION,您可以检索自动分类的每日成本。使用此视图可以确定货币成本,而不是 Credit。

示例

基本示例:自动对架构中的表进行分类

完成以下步骤,自动对架构中的表进行分类:

  1. 作为管理员,向数据工程师授予所需的 角色和权限,以自动对架构中的表进行分类。

    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 EXECUTE AUTO CLASSIFICATION ON ACCOUNT TO ROLE data_engineer;
    
    Copy
  2. 切换到数据工程师角色:

    USE ROLE data_engineer;
    
    Copy
  3. 将分类配置文件 创建为 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. 对实例调用 DESCRIBE 方法以确认实例的属性:

    SELECT my_classification_profile!DESCRIBE();
    
    Copy
  5. 在架构上设置分类配置文件实例,启动后台进程,以监控架构中的表,并自动对其进行敏感数据分类。

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

    小技巧

    您可以运行 SHOW SCHEMAS 命令并查看:code:classification_profile 列,以查看架构上设置的分类配置文件。

  6. 调用 SYSTEM$GET_CLASSIFICATION_RESULT 存储过程,以获取自动分类的结果。

    CALL SYSTEM$GET_CLASSIFICATION_RESULT('mydb.sch.t1');
    
    Copy
  7. 如果您不再需要对架构中的表进行自动分类,请从架构中取消设置分类配置文件:

    ALTER SCHEMA mydb.sch UNSET CLASSIFICATION_PROFILE;
    
    Copy
  8. 使用 DROP CLASSIFICATION_PROFILE 命令删除任何不需要的分类配置文件。

示例:使用标签图和自定义分类器

  1. 作为管理员,向数据工程师授予所需的 角色和权限,以自动对架构中的表进行分类并为列设置标签。

  2. 创建分类配置文件。

    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. 对实例调用 SET_TAG_MAP 方法,将 标签图 添加到分类配置文件。这样就可以在包含敏感数据的列上自动应用自定义标签。

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

    或者,您还可以在创建分类配置文件时添加此标签图。

  4. 调用 SET_CUSTOM_CLASSIFIERS 方法,将 自定义分类器 添加到分类配置文件。这样就能根据用户定义的语义和隐私类别对敏感数据进行自动分类。

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

    或者,您还可以在创建分类配置文件时添加自定义分类器。

  5. 对实例调用 DESCRIBE 方法,确认标签图和自定义分类器已添加到分类配置文件。

    SELECT my_classification_profile!DESCRIBE();
    
    Copy
  6. 在架构上设置分类配置文件实例。

    ALTER SCHEMA mydb.sch
     SET CLASSIFICATION_PROFILE = 'mydb.sch.my_classification_profile';
    
    Copy
  7. 将掩码策略附加到 tag_db.sch.pii 标签,启用基于标签的掩码。

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

示例:在启用自动分类前测试分类配置文件

  1. 作为管理员,向数据工程师授予所需的 角色和权限,以自动对架构中的表进行分类并为列设置标签。

  2. 使用标签图和自定义分类器创建分类配置文件:

    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. 在启用自动分类之前,调用 SYSTEM$CLASSIFY 存储过程以测试 table1 表上的标记映射。

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

    输出中的 tags 键包含关于标签是否已设置的详细信息(如果已设置,则为 true,否则为 false)、已设置标签的名称以及标签值:

    {
      "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. 在验证基于分类配置文件的自动分类会产生预期结果后,在架构上设置分类配置文件实例。

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

故障排除

自动分类错误会保留在账户的默认 事件表 中。您可以使用以下查询访问错误信息:

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
语言: 中文