问题描述
如何对Big query表中已经存在的数据进行去标识化,然后重新标识并加载到其他BQ表中。
谢谢
解决方法
最简单的方法是使用数据流管道调用 deidentifyContent。
,我创建了一个示例,使用 "de-identifying sensitive data" 使用属于 transformations API 的以下 Data Loss Prevention (DLP) 对数据进行去标识化,然后将它们插入到 BigQuery 中,但是要重新标识数据需要加密令牌。为此,您可以使用 Cloud DLP 中支持的 cryptographic methods:
- 使用 AES-SIV 的确定性加密
- 格式保留加密
- 加密哈希
在此 post 中,提到了使用确定性加密实现转换的一些关键和步骤,但是您可以使用您喜欢的那个。
正如回答的那样,执行此操作的简单方法是遵循数据流管道 tutorial
最后但并非最不重要的一点是,我与您分享一个示例,说明如何通过替换我用来模拟 BigQuery 数据的 faker 库生成的数据来进行去标识化。
from faker import Faker
from google.cloud import dlp_v2
fake = Faker()
dlp = dlp_v2.DlpServiceClient()
def create_fake_data(data_length=5):
data = []
headers = [
{"name": "name"},{"name": "email"},{"name": "credit_card"},{"name": "credit_card_provider"},{"name": "phone"}]
for i in range(data_length):
data.append({"values":
[
{"string_value": fake.unique.first_name()},{"string_value": fake.free_email()},{"string_value": fake.unique.credit_card_number()},{"string_value": fake.credit_card_provider()},{"string_value": fake.phone_number()},]
}
)
return {"table": {"headers": headers,"rows": data}}
def deidentify_with_replace(item):
parent = "projects/julio-castor-mx"
inspect_config = {"info_types": [
{"name": "EMAIL_ADDRESS"},{"name": "CREDIT_CARD_NUMBER"},{"name": "PHONE_NUMBER"}]}
deidentify_config = {
"info_type_transformations": {
"transformations": [
{
"primitive_transformation": {
"replace_config": {
"new_value": {"string_value": "[IDENTIFIED]"},}
}
}
]
}
}
response = dlp.deidentify_content(
request={
"parent": parent,"deidentify_config": deidentify_config,"inspect_config": inspect_config,"item": item
}
)
return response.item
if __name__ == "__main__":
data = create_fake_data()
deidentify_data = deidentify_with_replace(data)
请考虑 InfoType
参数定义了创建去标识化的 DLP 检测器。这些检测器列在 here 中,并使用 Table
object 去标识表。
您可以在此repository
中看到更多示例