通过DSC实现DMS数据分类分级

数据安全中心DSC(Data Security Center)支持从数据合规和业务需求等多角度对数据价值、属性、敏感性进行分类分级,以便企业针对不同数据进行更标准更细粒度的保护和风险调控。数据管理DMS(Data Management)是覆盖数据全生命周期的一站式数据管理平台。本文旨在介绍如何将数据安全中心的分类分级能力应用于DMS实践,为客户提供敏感数据保护的联动方案。

准备工作

  1. RDS管理控制台申请一个RDS实例,并创建数据库、表,构建测试数据。

    具体操作,请参见快速创建RDS MySQL实例创建数据库和账号

  2. 在数据安全中心控制台完成实例授权,并进行分类分级识别。

    1. 购买数据安全中心产品。具体操作,请参见购买数据安全中心

    2. 登录数据安全中心控制台,完成RDS实例的授权和数据库连接。

      建议选择业务低峰期连接数据库。连接数据库时,需选中立即扫描数据库资产并进行数据识别。具体操作,请参见通用数据库授权

    3. 在左侧导航栏,选择数据洞察 > 任务管理

    4. 识别任务页签,单击系统默认任务

    5. 单击目标RDS实例操作列的重扫

      为了将扫描对数据库的影响降到最低,建议您在数据资产调用低峰期的时段执行重扫操作。

  3. 在DMS控制台为新建的实例开通敏感数据保护能力。具体操作,请参见管理敏感数据

根据DSC分级结果设定敏感等级

DMS基于权限管理角度识别数据的敏感性,并将数据分为3个安全级别:低敏感、中敏感、高敏感。

DSC从数据价值、敏感性、数据合规和业务需求等多角度将数据分为5个安全级别:N/A、S1、S2、S3、S4。DSC和DMS的推荐敏感数据分级结果对应关系如下,您也可以根据业务需求调整对应关系。

  • DSC的N/A对应DMS低敏感。

  • DSC的S1或S2对应DMS中敏感。

  • DSC的S3或S4对应DMS高敏感。

步骤一:查询DSC数据分级结果

  • 通过OpenAPI查询

    调用数据安全中心DescribeColumns - 查询数据资产表中列的数据接口查询数据分类分级结果的示例代码如下:

    重要

    下述代码示例使用环境变量获取AccessKey的方式进行调用,仅供参考,详细配置,请参见配置环境变量。建议使用更安全的STS方式,详细信息,请参见管理访问凭证

    func TestDescribeColumns(t *testing.T) {
      // 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
      // 工程代码泄露可能会导致 AccessKey 泄露,并对账号名下资源的安全性产生威胁。以下代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考,建议使用更安全的 STS 方式。
        client, _err := CreateSDDPClient(tea.String(os.Getenv("请设置ak环境变量")), tea.String(os.Getenv("请设置sk环境变量")))
        assert.Nil(t, _err)
    
        describeColumnsRequest := &sddp20190103.DescribeColumnsRequest{
            InstanceName:   tea.String("资产实例名称"),
            TableName:      tea.String("数据库表的名称"),
            RiskLevelId:    tea.Int64(4),// 指定查询的数据安全级别,不指定则查询所有级别。
        }
    
        response, _err := client.DescribeColumnsWithOptions(describeColumnsRequest, &util.RuntimeOptions{})
        assert.Nil(t, _err)
        for _, item := range response.Body.Items {
            fmt.Println(*item.Name)
        }
    }

    示例代码返回结果如下:

    image.png

    S3等级的字段包括:
      	hide3、hide4、hide14、hide18
    S2等级字段包括:
      	hide7、hide13、hide15、hide16、hide19
    S1等级字段包括:
      	hide12
    N/A等级字段包括:
      	hide1、hide2、hide5、hide6、hide8、hide9、hide10、hide11、hide17、hide20、hide21、hide22、hide23、hide24、hide25、hide26
  • 通过控制台查询结果

    数据安全中心控制台数据洞察 > 数据目录页面,单击数据对象名称(即数据库的名称),在该数据对象的识别结果页签,可以查看详细的识别结果。

    image.png

步骤二:根据DSC分级结果设置列的安全级别

DSC从数据价值、敏感性、数据合规和业务需求等角度对数据进行分类分级,其识别结果更精细和全面。您可以参考DSC的识别结果,结合实际的业务需求,重新设置DMS数据列的安全级别,制定适合的分类分级原则。

  • 通过OpenAPI设置

    通过调用DMS的ChangeColumnSecurityLevel - 调整字段安全级别接口设置数据分类分级结果的示例代码如下:

    重要

    下述代码示例使用环境变量获取AccessKey的方式进行调用,仅供参考,详细配置,请参见配置环境变量。建议使用更安全的STS方式,详细信息,请参见管理访问凭证

    func TestChangeColumnSecurityLevel(t *testing.T) {
      	// 请确保代码运行环境设置了环境变量ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
      	// 工程代码泄露可能会导致AccessKey泄露,并对账号名下资源的安全性产生威胁。以下代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考,建议使用更安全的 STS 方式。
        client, _err := CreateClient(tea.String(tea.String(os.Getenv("请设置ak环境变量")), tea.String(os.Getenv("请设置sk环境变量")))
        assert.Nil(t, _err)
    
        request := &dms_enterprise20181101.ChangeColumnSecurityLevelRequest{
            Tid:                 tea.Int64(101950),
            DbId:                tea.Int64(35119204),
            IsLogic:             tea.Bool(false),
            SchemaName:          tea.String("数据库名"),
            TableName:           tea.String("表名"),
            ColumnName:          tea.String("hide1"),//字段名。
            NewSensitivityLevel: tea.String("S1"),//字段新的安全级别。
        }
    
         _, _err = client.ChangeColumnSecurityLevelWithOptions(request, &util.RuntimeOptions{})
        assert.Nil(t, _err)
    }
  • 通过DMS控制台设置

    具体操作,请参见调整字段安全级别

    image.png

根据DSC分类结果选择脱敏算法

DMS的默认脱敏算法为全遮掩,如下图所示,对于hide3、hide4、hide14、hide18等4列高敏感列全部遮掩为:"*******"。如此展示的效果很不便于查阅,您可以为不同的敏感数据类型设置不同的脱敏规则。

image.png

步骤一:查询DSC的分类结果

调用数据安全中心DescribeColumns - 查询数据资产表中列的数据接口查询数据分类结果的示例代码如下:

重要

下述代码示例使用环境变量获取AccessKey的方式进行调用,仅供参考,详细配置,请参见配置环境变量。建议使用更安全的STS方式,详细信息,请参见管理访问凭证

func TestDescribeColumns(t *testing.T) {
  	// 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
  	// 工程代码泄露可能会导致 AccessKey 泄露,并对账号名下资源的安全性产生威胁。以下代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考,建议使用更安全的 STS 方式。
    client, _err := CreateSDDPClient(tea.String(tea.String(os.Getenv("请设置ak环境变量")), tea.String(os.Getenv("请设置sk环境变量")))
    assert.Nil(t, _err)

    describeColumnsRequest := &sddp20190103.DescribeColumnsRequest{
        InstanceName:   tea.String("资产实例名称"),
        TableName:      tea.String("数据资产表的名称。"),
        RuleId:         tea.Int64(1542),  // 指定敏感数据识别规则,不指定则查询所有规则,您可以调用DescribeCategoryTemplateRuleList接口获取该参数。
        PageSize:       tea.Int32(20),
    }

    response, _err := client.DescribeColumnsWithOptions(describeColumnsRequest, &util.RuntimeOptions{})
    assert.Nil(t, _err)
    for _, item := range response.Body.Items {
        if item.RuleName != nil {
            fmt.Println(*item.Name, " ", *item.RuleName)
        }
    }
}

查询结果如下:

结果如下:
	hide3 :  手机号(中国内地)
	hide4 :  身份证(中国内地)
	hide14 :  邮箱
	hide18 :  KEY私钥

步骤二:针对不同的数据设定不同的脱敏规则

  • 通过OpenAPI设置

    通过调用DMS的ModifyDesensitizationStrategy - 修改字段绑定的脱敏规则接口设置将字段hide3的脱敏规则设置为23180(手机号中间四位随机替换),示例代码如下:

    重要

    下述代码示例使用环境变量获取AccessKey的方式进行调用,仅供参考,详细配置,请参见配置环境变量。建议使用更安全的STS方式,详细信息,请参见管理访问凭证

    func TestModifyDesensitizationStrategy(t *testing.T) {
      	// 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
      	// 工程代码泄露可能会导致 AccessKey 泄露,并对账号名下资源的安全性产生威胁。以下代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378661.html
        client, _err := CreateClient(tea.String(tea.String(os.Getenv("请设置ak环境变量")), tea.String(os.Getenv("请设置sk环境变量")))
        assert.Nil(t, _err)
    
        request := &dms_enterprise20181101.ModifyDesensitizationStrategyRequest{
            Tid:                 tea.Int64(101950),
            IsLogic:             tea.Bool(false),
            SchemaName:          tea.String("数据库名"),
            TableName:           tea.String("表名"),
            ColumnName:          tea.String("hide3"),
            RuleId:              tea.Int32(23180),//指定要设置的脱敏规则ID,调用ListDesensitizationRule接口可查询该参数。
        }
    
        _, _err = client.ModifyDesensitizationStrategyWithOptions(request, &util.RuntimeOptions{})
        assert.Nil(t, _err)
    }
  • 通过DMS控制台设置

    在DMS控制台调整脱敏算法的具体操作,请参见管理敏感数据

    image.png

步骤三:查看脱敏效果

image.png