敏感数据保护可以对文本内容(包括存储在表等容器结构中的文本)中的敏感数据进行去标识化。去标识化是从数据中移除标识信息的过程。该 API 会检测敏感数据(例如个人身份信息 (PII)),然后通过去标识化转换进行遮盖、删除或以其它方式模糊数据。例如,去标识化技术可能包括以下任何一种:
- 使用星号 (*) 或井号 (#) 等符号部分或完全替换字符,从而遮盖敏感数据。
- 使用令牌(即代理)字符串替换敏感数据的每个实例。
- 使用随机生成或预先确定的密钥加密并替换敏感数据。
您可使用 JSON 通过 HTTPS 向 API 提供信息,也可采用敏感数据保护客户端库通过 CLI 和多种编程语言提供信息。如需设置 CLI,请参阅quickstart。如需详细了解如何以 JSON 格式提交信息,请参阅 JSON 快速入门。
API 概览
如需对敏感数据进行去标识化,请使用敏感数据保护的 content.deidentify
方法。
去标识化 API 调用分为 3 个部分:
- 需要检查的数据:API 要检查的字符串或表结构(
ContentItem
对象)。 - 需要在数据中检查的内容:检测配置信息 (
InspectConfig
),例如要查找的数据类型(或 infoType)、是否过滤超过特定可能性阈值的结果、返回的结果是否不得超过一定数量等等。未在InspectConfig
参数中指定任何 infoType 相当于指定所有内置 infoType。不建议此操作,因为这可能导致性能下降且费用增加。 - 检查结果的处置方式:配置信息 (
DeidentifyConfig
),用于定义如何对敏感数据进行去标识化。此参数将在下一部分详细介绍。
API 会按相同格式返回您提供的相同内容,但会将根据您的标准识别为包含敏感信息的所有文本进行去标识化。
指定检测标准
信息类型(或“infoType”)检测器是敏感数据保护用于查找敏感数据的机制。
敏感数据保护包括多种 infoType 检测器,下文汇总了所有这些检测器:
- 内置 infoType 检测器内置于敏感数据保护功能中。其中包括国家或区域特定敏感数据类型以及全球适用的数据类型的检测器。
- 自定义 infoType 检测器 - 您自行创建的检测器。自定义 infoType 检测器有三种:
- 常规自定义字典检测器 - 敏感数据保护匹配的简单字词列表。当您拥有一个包含多达数万个字词或短语的列表时,请使用常规自定义字典检测器。如果您预计字词列表不会发生显著变化,也建议首选常规自定义字典检测器。
- 存储的自定义字典检测器由敏感数据保护使用存储在 Cloud Storage 或 BigQuery 中的大量字词或短语生成。当您拥有一个包含高达数千万个字词或短语的庞大列表时,请使用存储的自定义字典检测器。
- 正则表达式 (regex) 检测器 - 敏感数据保护可以根据正则表达式模式检测匹配项。
此外,敏感数据保护包含检查规则的概念,因此您可使用以下规则微调扫描结果:
- 排除规则 - 让您可以通过向内置或自定义 infoType 检测器添加规则来减少返回的结果数量。
- 热词规则 - 让您可以通过向内置或自定义 infoType 检测器添加规则来增加返回的结果数量或更改其可能性值。
去标识化转换
设置去标识化配置 (DeidentifyConfig
) 时,必须指定一个或多个转换。存在下面两类转换:
InfoTypeTransformations
:此类转换仅应用于已提交的文本中被识别为特定 infoType 的值。RecordTransformations
:此类转换仅应用于已提交的列表文本数据中被识别为特定 infoType 的值,或者整个表格数据列中的值。
InfoType 转换
您可以为每个请求指定一个或多个 infoType 转换。在每个 InfoTypeTransformation
对象中,都要指定以下两项:
- 应该对其应用转换的一个或多个 infoTypes(
infoTypes[]
数组对象)。 - 初始转换(
PrimitiveTransformation
对象)。
请注意,您可根据需要指定 infoType,但如果未在 InspectConfig
参数中指定至少一个 infoType,系统就会将转换应用到未提供转换的所有内置 infoType。不建议此操作,因为这可能导致性能下降且费用增加。
初始转换
无论是仅应用于某些 infoType 还是整个文本字符串,都必须指定至少一个要应用于输入项的初始转换。以下部分介绍了您可以使用的转换方法示例。如需查看敏感数据保护提供的所有转换方法的列表,请参阅转换参考文档。
replaceConfig
如果将 replaceConfig
设置为 ReplaceValueConfig
对象,会将匹配的输入值替换为您指定的值。
例如,假设您已为所有 EMAIL_ADDRESS
infoType 将 replaceConfig
设置为“[email-address]
”,并且已将下列字符串发送到敏感数据保护:
My name is Alicia Abernathy, and my email address is aabernathy@example.com.
返回的字符串如下:
My name is Alicia Abernathy, and my email address is [email-address].
以下多种语言的 JSON 示例和代码展示了如何创建 API 请求以及 DLP API 返回的内容:
Python
如需了解如何安装和使用用于敏感数据保护的客户端库,请参阅敏感数据保护客户端库。
如需向敏感数据保护服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解如何安装和使用用于敏感数据保护的客户端库,请参阅敏感数据保护客户端库。
如需向敏感数据保护服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
REST
要详细了解如何将 DLP API 与 JSON 结合使用,请参阅 JSON 快速入门。
JSON 输入:
POST https://dlp.googleapis.com/v2/projects/[PROJECT_ID]/content:deidentify?key={YOUR_API_KEY}
{
"item":{
"value":"My name is Alicia Abernathy, and my email address is aabernathy@example.com."
},
"deidentifyConfig":{
"infoTypeTransformations":{
"transformations":[
{
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
}
],
"primitiveTransformation":{
"replaceConfig":{
"newValue":{
"stringValue":"[email-address]"
}
}
}
}
]
}
},
"inspectConfig":{
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
}
]
}
}
JSON 输出:
{
"item":{
"value":"My name is Alicia Abernathy, and my email address is [email-address]."
},
"overview":{
"transformedBytes":"22",
"transformationSummaries":[
{
"infoType":{
"name":"EMAIL_ADDRESS"
},
"transformation":{
"replaceConfig":{
"newValue":{
"stringValue":"[email-address]"
}
}
},
"results":[
{
"count":"1",
"code":"SUCCESS"
}
],
"transformedBytes":"22"
}
]
}
}
redactConfig
如果指定 redactConfig
,将会彻底移除给定的值来达到隐去该值的目的。redactConfig
消息不带参数,指定它就会启用该转换。
例如,假设您已为所有 EMAIL_ADDRESS
infoType 指定 redactConfig
,并且已将下列字符串发送到敏感数据保护:
My name is Alicia Abernathy, and my email address is aabernathy@example.com.
返回的字符串如下:
My name is Alicia Abernathy, and my email address is .
以下示例展示了如何创建 API 请求以及 DLP API 返回的内容:
C#
如需了解如何安装和使用用于敏感数据保护的客户端库,请参阅敏感数据保护客户端库。
如需向敏感数据保护服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Go
如需了解如何安装和使用用于敏感数据保护的客户端库,请参阅敏感数据保护客户端库。
如需向敏感数据保护服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解如何安装和使用用于敏感数据保护的客户端库,请参阅敏感数据保护客户端库。
如需向敏感数据保护服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需了解如何安装和使用用于敏感数据保护的客户端库,请参阅敏感数据保护客户端库。
如需向敏感数据保护服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
PHP
如需了解如何安装和使用用于敏感数据保护的客户端库,请参阅敏感数据保护客户端库。
如需向敏感数据保护服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解如何安装和使用用于敏感数据保护的客户端库,请参阅敏感数据保护客户端库。
如需向敏感数据保护服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
REST
JSON 输入:
POST https://dlp.googleapis.com/v2/projects/[PROJECT_ID]/content:deidentify?key={YOUR_API_KEY}
{
"item":{
"value":"My name is Alicia Abernathy, and my email address is aabernathy@example.com."
},
"deidentifyConfig":{
"infoTypeTransformations":{
"transformations":[
{
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
}
],
"primitiveTransformation":{
"redactConfig":{
}
}
}
]
}
},
"inspectConfig":{
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
}
]
}
}
JSON 输出:
{
"item":{
"value":"My name is Alicia Abernathy, and my email address is ."
},
"overview":{
"transformedBytes":"22",
"transformationSummaries":[
{
"infoType":{
"name":"EMAIL_ADDRESS"
},
"transformation":{
"redactConfig":{
}
},
"results":[
{
"count":"1",
"code":"SUCCESS"
}
],
"transformedBytes":"22"
}
]
}
}
characterMaskConfig
如果将 characterMaskConfig
设置为 CharacterMaskConfig
对象,就可以通过把给定数量的字符替换为固定字符来部分遮盖字符串。可以从字符串的开头或结尾开始遮盖。此转换也适用于数字类型,例如长整型。
CharacterMaskConfig
对象自带多个参数:
maskingCharacter
:用于遮盖敏感值中每个字符的字符。例如,您可以指定用星号 (*) 或井号 (#) 来遮盖信用卡号等信息中的一连串数字。numberToMask
:要遮盖的字符数。如果未设置此值,将遮盖所有匹配的字符。reverseOrder
:是否按反向顺序遮盖字符。如果将reverseOrder
设置为 true,将从值的末尾朝着值的开头遮盖匹配值中的字符。如果设置为 false,则从值的开头开始遮盖。charactersToIgnore[]
:遮盖值时要跳过的一个或多个字符。例如,如果在此处指定连字符,就会在遮盖电话号码时保留连字符。您还可以指定一组要在遮盖时忽略的常见字符 (CharsToIgnore
)。
例如,假设您已设置 characterMaskConfig
来使用“#”遮盖 EMAIL_ADDRESS
infotype(“.”和“@”字符除外)。如果以下字符串发送到敏感数据保护:
My name is Alicia Abernathy, and my email address is aabernathy@example.com.
返回的字符串如下:
My name is Alicia Abernathy, and my email address is ##########@#######.###.
以下示例演示了如何使用 DLP API 通过遮盖技术对敏感数据进行去标识化。
Java
如需了解如何安装和使用用于敏感数据保护的客户端库,请参阅敏感数据保护客户端库。
如需向敏感数据保护服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需了解如何安装和使用用于敏感数据保护的客户端库,请参阅敏感数据保护客户端库。
如需向敏感数据保护服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解如何安装和使用用于敏感数据保护的客户端库,请参阅敏感数据保护客户端库。
如需向敏感数据保护服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Go
如需了解如何安装和使用用于敏感数据保护的客户端库,请参阅敏感数据保护客户端库。
如需向敏感数据保护服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
PHP
如需了解如何安装和使用用于敏感数据保护的客户端库,请参阅敏感数据保护客户端库。
如需向敏感数据保护服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
C#
如需了解如何安装和使用用于敏感数据保护的客户端库,请参阅敏感数据保护客户端库。
如需向敏感数据保护服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
REST
下面的 JSON 示例演示了如何创建 API 请求且 DLP API 返回哪些内容:
JSON 输入:
POST https://dlp.googleapis.com/v2/projects/[PROJECT_ID]/content:deidentify?key={YOUR_API_KEY}
{
"item":{
"value":"My name is Alicia Abernathy, and my email address is aabernathy@example.com."
},
"deidentifyConfig":{
"infoTypeTransformations":{
"transformations":[
{
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
}
],
"primitiveTransformation":{
"characterMaskConfig":{
"maskingCharacter":"#",
"reverseOrder":false,
"charactersToIgnore":[
{
"charactersToSkip":".@"
}
]
}
}
}
]
}
},
"inspectConfig":{
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
}
]
}
}
JSON 输出:
{
"item":{
"value":"My name is Alicia Abernathy, and my email address is ##########@#######.###."
},
"overview":{
"transformedBytes":"22",
"transformationSummaries":[
{
"infoType":{
"name":"EMAIL_ADDRESS"
},
"transformation":{
"characterMaskConfig":{
"maskingCharacter":"#",
"charactersToIgnore":[
{
"charactersToSkip":".@"
}
]
}
},
"results":[
{
"count":"1",
"code":"SUCCESS"
}
],
"transformedBytes":"22"
}
]
}
}
cryptoHashConfig
如果把 cryptoHashConfig
设置为 CryptoHashConfig
对象,将使用加密哈希技术生成代理值来对输入值执行假名化。
此方法会使用加密的“摘要”或哈希值替换输入值。
摘要是通过获取输入值的 SHA-256 哈希计算得出的。
用于获取哈希的加密密钥为 CryptoKey
对象,且大小必须为 32 或 64 字节。
此方法会输出以 base64 编码表示的哈希输出值。目前,只能对字符串和整数值进行哈希处理。
例如,假设您已为所有 EMAIL_ADDRESS
infoType 指定 cryptoHashConfig
,并且 CryptoKey
对象由随机生成的键(TransientCryptoKey
)组成。然后,系统会将以下字符串发送到敏感数据保护:
My name is Alicia Abernathy, and my email address is aabernathy@example.com.
返回的字符串以加密方式生成,显示如下:
My name is Alicia Abernathy, and my email address is 41D1567F7F99F1DC2A5FAB886DEE5BEE.
当然,十六进制字符串将以加密方式生成且与此处所示不同。
dateShiftConfig
如果把 dateShiftConfig
设置为 DateShiftConfig
对象,将通过按随机天数偏移日期来对日期输入值执行日期偏移。
日期偏移技术会随机偏移一组日期,但保留一段时间内的顺序和持续时间。通常在个人或实体的上下文中完成偏移日期。也就是说,您要按同一偏移差分偏移特定个人的所有日期,但对每个人使用不同的偏移差分。
要详细了解日期偏移,请参阅日期偏移概念主题。
下面是多种语言的示例代码,其中演示了如何使用 DLP API 通过日期偏移对日期进行去标识化。
Java
如需了解如何安装和使用用于敏感数据保护的客户端库,请参阅敏感数据保护客户端库。
如需向敏感数据保护服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需了解如何安装和使用用于敏感数据保护的客户端库,请参阅敏感数据保护客户端库。
如需向敏感数据保护服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解如何安装和使用用于敏感数据保护的客户端库,请参阅敏感数据保护客户端库。
如需向敏感数据保护服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Go
如需了解如何安装和使用用于敏感数据保护的客户端库,请参阅敏感数据保护客户端库。
如需向敏感数据保护服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
PHP
如需了解如何安装和使用用于敏感数据保护的客户端库,请参阅敏感数据保护客户端库。
如需向敏感数据保护服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
C#
如需了解如何安装和使用用于敏感数据保护的客户端库,请参阅敏感数据保护客户端库。
如需向敏感数据保护服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
cryptoReplaceFfxFpeConfig
如果把 cryptoReplaceFfxFpeConfig
设置为 CryptoReplaceFfxFpeConfig
对象,可通过将输入值替换为令牌来对输入值执行假名化。此令牌具有如下特点:
- 已加密输入值。
- 与输入值长度相同。
- 在 FFX 模式(“FPE-FFX”)下通过保留格式加密计算得出,该模式按
cryptoKey
指定的加密密钥进行加密。 - 由
alphabet
指定的字符组成。有效选项包括:NUMERIC
HEXADECIMAL
UPPER_CASE_ALPHA_NUMERIC
ALPHA_NUMERIC
输入值需满足以下条件:
- 必须至少具有两个字符(或为空字符串)。
- 必须由
alphabet
指定的字符组成。alphabet
可以包含 2 到 95 个字符。(有 95 个字符的alphabet
包含 US-ASCII 字符集中的所有可打印字符。)
敏感数据保护使用加密密钥计算替换令牌。您可通过下述三种方式之一提供此密钥:
- 将其嵌入 API 请求但不加密。不过,我们不建议您这样做。
- 请求敏感数据保护功能生成相应网址。
- 将其嵌入 API 请求并加密。
如果您选择将密钥嵌入 API 请求中,则需要使用 Cloud Key Management Service (Cloud KMS) 密钥创建密钥并对其进行封装(加密)。返回的值默认为一个 base64 编码的字符串。如需在敏感数据保护中设置此值,您必须将其解码为字节字符串。以下代码段重点介绍了如何使用多种语言执行此操作。 在这些代码段之后,还提供了端到端示例。
Java
KmsWrappedCryptoKey.newBuilder()
.setWrappedKey(ByteString.copyFrom(BaseEncoding.base64().decode(wrappedKey)))
Python
# The wrapped key is base64-encoded, but the library expects a binary
# string, so decode it here.
import base64
wrapped_key = base64.b64decode(wrapped_key)
PHP
// Create the wrapped crypto key configuration object
$kmsWrappedCryptoKey = (new KmsWrappedCryptoKey())
->setWrappedKey(base64_decode($wrappedKey))
->setCryptoKeyName($keyName);
C#
WrappedKey = ByteString.FromBase64(wrappedKey)
如需详细了解如何使用 Cloud KMS 加密和解密数据,请参阅加密和解密数据。
根据设计,FPE-FFX 会保留输入文本的长度和字符集。这意味着它缺少身份验证和初始化矢量,这会导致输出令牌的长度扩展。其他方法(例如 AES-SIV)可以提供更强大的安全保证,建议用于令牌化用例,除非严格要求保留长度和字符集(例如,用于与旧版数据系统的向后兼容性)。
下面是多种语言的示例代码,其中演示了如何使用敏感数据保护通过将输入值替换为令牌来对敏感数据进行去标识化。
Java
如需了解如何安装和使用用于敏感数据保护的客户端库,请参阅敏感数据保护客户端库。
如需向敏感数据保护服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需了解如何安装和使用用于敏感数据保护的客户端库,请参阅敏感数据保护客户端库。
如需向敏感数据保护服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解如何安装和使用用于敏感数据保护的客户端库,请参阅敏感数据保护客户端库。
如需向敏感数据保护服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Go
如需了解如何安装和使用用于敏感数据保护的客户端库,请参阅敏感数据保护客户端库。
如需向敏感数据保护服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
PHP
如需了解如何安装和使用用于敏感数据保护的客户端库,请参阅敏感数据保护客户端库。
如需向敏感数据保护服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
C#
如需了解如何安装和使用用于敏感数据保护的客户端库,请参阅敏感数据保护客户端库。
如需向敏感数据保护服务进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
如需获取演示如何使用敏感数据保护来重标识通过 CryptoReplaceFfxFpeConfig
转换方法去标识化的敏感数据的代码示例,请参阅保留格式加密:重标识示例。
fixedSizeBucketingConfig
分桶转换(即此转换和 bucketingConfig
)通过将数值数据“分桶”到不同范围,对其进行遮盖。生成的数字范围是一个带连字符的字符串,由下限、连字符和上限组成。
如果把 fixedSizeBucketingConfig
设置为 FixedSizeBucketingConfig
对象,将根据固定大小范围对输入值进行分桶。FixedSizeBucketingConfig
对象包含以下内容:
lowerBound
:所有分桶的下限值。小于此下限的值都将全部分组到一个分桶中。upperBound
:所有分桶的上限值。大于此上限的值都将全部分组到一个分桶中。bucketSize
:每个分桶的大小(最小和最大分桶除外)。
例如,如果 lowerBound
设置为 10,upperBound
设置为 89,bucketSize
设置为 10,则将使用以下分桶:-10、10-20、20-30、30-40、40-50、50-60、60-70、70-80、80-89、89+。
要详细了解分桶的概念,请参阅泛化和分桶。
bucketingConfig
bucketingConfig
转换比另一种分桶转换(即 fixedSizeBucketingConfig
)更为灵活。取代指定上限值、下限值和用于创建等大分桶的间隔值,您为此转换要创建的每个分桶指定最大值和最小值。每个最大值和最小值对必须具有相同类型。
将 bucketingConfig
设置为 BucketingConfig
对象即可指定自定义分桶。BucketingConfig
对象由 Bucket
对象的buckets[]
数组构成。每个 Bucket
对象都包含以下内容:
min
:分桶范围的下限。省略此值可创建没有下限的分桶。max
:分桶范围的上限。省略此值可创建没有上限的分桶。replacementValue
:该值用于替换介于下限与上限之间的值。如果不提供replacementValue
,则转而使用带连字符的min-max
范围。
如果某个值不在所定义的范围内,返回的 TransformationSummary
将包含错误消息。
例如,请考虑在 bucketingConfig
转换中使用以下配置:
"bucketingConfig":{
"buckets":[
{
"min":{
"integerValue":"1"
},
"max":{
"integerValue":"30"
},
"replacementValue":{
"stringValue":"LOW"
}
},
{
"min":{
"integerValue":"31"
},
"max":{
"integerValue":"65"
},
"replacementValue":{
"stringValue":"MEDIUM"
}
},
{
"min":{
"integerValue":"66"
},
"max":{
"integerValue":"100"
},
"replacementValue":{
"stringValue":"HIGH"
}
}
]
}
这会定义以下行为:
- 遮盖 1 至 30 的整数值的方式是将它们替换为
LOW
。 - 遮盖 31 至 65 的整数值的方式是将它们替换为
MEDIUM
。 - 66 至 100 之间的整数值替换为
HIGH
,从而进行遮罩。
要详细了解分桶的概念,请参阅泛化和分桶。
replaceWithInfoTypeConfig
如果指定 replaceWithInfoTypeConfig
,就会将每个匹配的值都替换为 infoType 的名称。replaceWithInfoTypeConfig
消息不带参数,指定它就会启用该转换。
例如,假设您已为所有 EMAIL_ADDRESS
infoType 指定 replaceWithInfoTypeConfig
,并且已将下列字符串发送到敏感数据保护:
My name is Alicia Abernathy, and my email address is aabernathy@example.com.
返回的字符串如下:
My name is Alicia Abernathy, and my email address is EMAIL_ADDRESS.
timePartConfig
如果把 timePartConfig
设置为 TimePartConfig
对象,将保留包含 Date
、Timestamp
和 TimeOfDay
值的匹配值的一部分。TimePartConfig
对象包含一个 partToExtract
参数,后者可设置为年、月、日等任意 TimePart
枚举值。
例如,假设您已通过将 partToExtract
设置为 YEAR
来配置 timePartConfig
转换。在将下面第一列中的数据发送到敏感数据保护后,您最终将在第二列中获得转换后的值:
原始值 | 转换后的值 |
---|---|
9/21/1976 |
1976 |
6/7/1945 |
1945 |
1/20/2009 |
2009 |
7/4/1776 |
1776 |
8/1/1984 |
1984 |
4/21/1982 |
1982 |
记录转换
记录转换(RecordTransformations
对象)仅应用于表格数据中被识别为特定 infoType 的值。在 RecordTransformations
中,还可将转换细分成两个子类别:
fieldTransformations[]
:应用各种字段转换的转换。recordSuppressions[]
:用于定义完全隐藏哪些记录的规则。输出中不显示与recordSuppressions[]
中任何隐藏规则相匹配的记录。
字段转换
每个 FieldTransformation
对象都包含三个参数:
fields
:需要应用转换的一个或多个输入字段(FieldID
对象)。condition
:计算结果必须为 true 才能应用转换的条件(RecordCondition
对象)。例如,仅当记录的邮编列是在特定范围内时,才向该记录的年龄列应用分桶转换。或者,仅当出生日期字段表明某人的年龄为 85 岁或以上时,才隐去字段。- 下列两个转换类型参数之一。需要指定任一项:
infoTypeTransformations
:将字段内容视为自由文本,且仅将PrimitiveTransformation
应用于与InfoType
匹配的内容。如需了解这些转换,请参见本主题前面的内容。primitiveTransformation
:将指定的初始转换(PrimitiveTransformation
对象)应用于整个字段。如需了解这些转换,请参见本主题前面的内容。
字段转换示例
以下示例发送了一个带有两个字段转换的 projects.content.deidentify
请求:
第一个字段转换应用于前两列(
column1
和column2
)。由于其转换类型是primitiveTransformation
对象(具体而言是CryptoDeterministicConfig
),因此敏感数据保护会转换整个字段。第二个字段转换应用于第三列 (
column3
)。由于其转换类型为infoTypeTransformations
对象,因此敏感数据保护会将初始转换(具体而言是ReplaceWithInfoTypeConfig
)仅应用于与检查配置中设置的 infoType 匹配的内容。
在使用任何请求数据之前,请先进行以下替换:
-
PROJECT_ID
:您的 Google Cloud 项目 ID。项目 ID 是字母数字字符串,例如my-project
。
HTTP 方法和网址:
POST https://dlp.googleapis.com/v2/projects/PROJECT_ID/content:deidentify
请求 JSON 正文:
{ "item": { "table": { "headers": [ { "name": "column1" }, { "name": "column2" }, { "name": "column3" } ], "rows": [ { "values": [ { "stringValue": "Example string 1" }, { "stringValue": "Example string 2" }, { "stringValue": "My email address is dani@example.org" } ] }, { "values": [ { "stringValue": "Example string 1" }, { "stringValue": "Example string 3" }, { "stringValue": "My email address is cruz@example.org" } ] } ] } }, "deidentifyConfig": { "recordTransformations": { "fieldTransformations": [ { "fields": [ { "name": "column1" }, { "name": "column2" } ], "primitiveTransformation": { "cryptoDeterministicConfig": { "cryptoKey": { "unwrapped": { "key": "YWJjZGVmZ2hpamtsbW5vcA==" } } } } }, { "fields": [ { "name": "column3" } ], "infoTypeTransformations": { "transformations": [ { "primitiveTransformation": { "replaceWithInfoTypeConfig": {} } } ] } } ] } }, "inspectConfig": { "infoTypes": [ { "name": "EMAIL_ADDRESS" } ] } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "item": { "table": { "headers": [ { "name": "column1" }, { "name": "column2" }, { "name": "column3" } ], "rows": [ { "values": [ { "stringValue": "AWttmGlln6Z2MFOMqcOzDdNJS52XFxOOZsg0ckDeZzfc" }, { "stringValue": "AUBTE+sQB6eKZ5iD3Y0Ss682zANXbijuFl9KL9ExVOTF" }, { "stringValue": "My email address is [EMAIL_ADDRESS]" } ] }, { "values": [ { "stringValue": "AWttmGlln6Z2MFOMqcOzDdNJS52XFxOOZsg0ckDeZzfc" }, { "stringValue": "AU+oD2pnqUDTLNItE8RplY3E0fTHeO4rZkX4GeFHN2CI" }, { "stringValue": "My email address is [EMAIL_ADDRESS]" } ] } ] } }, "overview": { "transformedBytes": "96", "transformationSummaries": [ { "field": { "name": "column1" }, "results": [ { "count": "2", "code": "SUCCESS" } ], "fieldTransformations": [ { "fields": [ { "name": "column1" }, { "name": "column2" } ], "primitiveTransformation": { "cryptoDeterministicConfig": { "cryptoKey": { "unwrapped": { "key": "YWJjZGVmZ2hpamtsbW5vcA==" } } } } } ], "transformedBytes": "32" }, { "field": { "name": "column2" }, "results": [ { "count": "2", "code": "SUCCESS" } ], "fieldTransformations": [ { "fields": [ { "name": "column1" }, { "name": "column2" } ], "primitiveTransformation": { "cryptoDeterministicConfig": { "cryptoKey": { "unwrapped": { "key": "YWJjZGVmZ2hpamtsbW5vcA==" } } } } } ], "transformedBytes": "32" }, { "infoType": { "name": "EMAIL_ADDRESS", "sensitivityScore": { "score": "SENSITIVITY_MODERATE" } }, "field": { "name": "column3" }, "results": [ { "count": "2", "code": "SUCCESS" } ], "fieldTransformations": [ { "fields": [ { "name": "column3" } ], "infoTypeTransformations": { "transformations": [ { "primitiveTransformation": { "replaceWithInfoTypeConfig": {} } } ] } } ], "transformedBytes": "32" } ] } }
记录隐藏
除了对字段数据应用转换之外,您还可以指示敏感数据保护对数据进行去标识化,方法是在特定抑制条件评估为 true 时仅禁止记录。您可在同一请求中同时应用字段转换和记录隐藏。
您需要将 RecordTransformations
对象的 recordSuppressions
消息设置为一个或多个 RecordSuppression
对象的数组。
每个 RecordSuppression
对象都包含一个 RecordCondition
对象,后者又包含一个 Expressions
对象。
Expressions
对象包含以下内容:
logicalOperator
:LogicalOperator
枚举类型之一。conditions
:一个Conditions
对象,其中有一个包含一个或多个Condition
对象的数组。Condition
是一个字段值和另一个值的比较,两者类型为string
、boolean
、integer
、double
、Timestamp
或TimeofDay
。
如果比较结果为 true,将隐藏记录;反之则不隐藏。 如果比较的值类型不同,将发出警告,同时条件计算结果为 false。
可逆转换
使用 CryptoReplaceFfxFpeConfig
或 CryptoDeterministicConfig
infoType 转换对数据进行去标识化时,您可以重标识这些数据,前提是您使用 CryptoKey
最初对数据进行去标识化。如需了解详情,请参阅基于加密的令牌化转换。
发现结果数量限制
如果您的请求包含超过 3000 个发现结果,敏感数据保护会返回以下消息:
Too many findings to de-identify. Retry with a smaller request.
敏感数据保护返回的发现结果列表是请求中所有发现结果的任意子集。如需获取所有发现结果,请将请求拆分为较小的批次。
后续步骤
详细了解去标识化工作流如何在实际部署中发挥作用。
完成使用敏感数据保护遮盖敏感数据 Codelab。
查看示例,了解如何创建封装密钥、对内容进行标记化以及重新识别标记化的内容。
详细了解如何在存储空间中创建去标识化的数据副本。