数据安全中心DSC(Data Security Center)支持从数据合规和业务需求等多角度对数据价值、属性、敏感性进行分类分级,以便企业针对不同数据进行更标准更细粒度的保护和风险调控。数据管理DMS(Data Management)是覆盖数据全生命周期的一站式数据管理平台。本文旨在介绍如何将数据安全中心的分类分级能力应用于DMS实践,为客户提供敏感数据保护的联动方案。
准备工作
在RDS管理控制台申请一个RDS实例,并创建数据库、表,构建测试数据。
具体操作,请参见快速创建RDS MySQL实例、创建数据库和账号。
在数据安全中心控制台完成实例授权,并进行分类分级识别。
在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 - 查询数据资产表中列的数据接口查询数据分类分级结果的示例代码如下:
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) } }
示例代码返回结果如下:
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
通过控制台查询结果
在数据安全中心控制台 页面,单击数据对象名称(即数据库的名称),在该数据对象的识别结果页签,可以查看详细的识别结果。
步骤二:根据DSC分级结果设置列的安全级别
DSC从数据价值、敏感性、数据合规和业务需求等角度对数据进行分类分级,其识别结果更精细和全面。您可以参考DSC的识别结果,结合实际的业务需求,重新设置DMS数据列的安全级别,制定适合的分类分级原则。
通过OpenAPI设置
通过调用DMS的ChangeColumnSecurityLevel - 调整字段安全级别接口设置数据分类分级结果的示例代码如下:
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控制台设置
具体操作,请参见调整字段安全级别。
根据DSC分类结果选择脱敏算法
DMS的默认脱敏算法为全遮掩,如下图所示,对于hide3、hide4、hide14、hide18等4列高敏感列全部遮掩为:"*******"。如此展示的效果很不便于查阅,您可以为不同的敏感数据类型设置不同的脱敏规则。
步骤一:查询DSC的分类结果
调用数据安全中心DescribeColumns - 查询数据资产表中列的数据接口查询数据分类结果的示例代码如下:
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(手机号中间四位随机替换),示例代码如下:
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控制台调整脱敏算法的具体操作,请参见管理敏感数据。