Sensitive Data Protection 可以將文字內容中的機密資料去識別化,包括儲存在資料表等容器結構中的文字。去識別化是從資料移除個人識別資訊的程序。API 會偵測個人識別資訊 (PII) 等機密資料,然後使用去識別化轉換來遮蔽、刪除或隱藏資料。舉例來說,去識別化技術可包含以下任何一種:
- 將部分或所有字元替換為星號 (*) 或井字號 (#) 等符號,遮蓋機密資料。
- 將每個機密資料例項替換為權杖或代理字串。
- 使用隨機產生或預先決定的金鑰來加密和取代機密資料。
您可以透過 HTTPS 使用 JSON,以及使用 Sensitive Data Protection 用戶端程式庫,透過 CLI 和多種程式設計語言,將資訊提供給 API。如要設定 CLI,請參閱快速入門導覽課程。如要進一步瞭解如何以 JSON 格式提交資訊,請參閱 JSON 快速入門導覽課程。
API 總覽
如要將機密資料去識別化,請使用 Sensitive Data Protection 的 content.deidentify 方法。
去識別化 API 呼叫作業包含三個部分:
- 要檢查的資料:API 要檢查的字串或表格結構 (
ContentItem物件)。 檢查項目:偵測設定資訊 (
InspectConfig),例如要尋找的資料類型 (或 infoType)、是否要篩選高於特定可能性門檻的發現項目,以及是否要傳回不超過特定數量的結果。請務必在
InspectConfig物件中,加入要掃描的 infoType。否則,Sensitive Data Protection 會掃描一組預設的 infoType (ALL_BASIC),其中可能包含您不需要的類型。掃描不需要的 infoType 可能會不必要地增加要求延遲時間。要求中必須包含
InspectConfig物件,但有一個例外狀況。詳情請參閱本頁的「記錄轉換」一節。如何處理檢查結果:設定資訊 (
DeidentifyConfig),定義您希望如何將機密資料去識別化。下節將更詳細說明這個引數。
API 會以相同格式傳回您提供的相同項目,但根據您的條件識別為包含機密資訊的任何文字均已去識別化。
指定偵測條件
資訊類型 (或「infoType」) 偵測工具是 Sensitive Data Protection 用來尋找機密資料的機制。
Sensitive Data Protection 包含多種 infoType 偵測工具,以下是所有工具的摘要:
- 內建 infoType 偵測工具內建於 Sensitive Data Protection。包括國家/地區或區域專屬機密資料類型,以及全球適用的資料類型的偵測工具。
- 自訂 infoType 偵測工具是您自行建立的偵測工具。自訂 infoType 偵測工具分為三種:
- 一般自訂字典偵測工具是 Sensitive Data Protection 比對的簡單字詞清單。如果您的清單包含多達數萬個字詞或詞組,請使用一般自訂字典偵測工具。如果您的字詞清單不會大幅變動,建議採用一般自訂字典偵測工具。
- 儲存的自訂字典偵測工具是由 Sensitive Data Protection 產生,使用儲存在 Cloud Storage 或 BigQuery 中的大量字詞或詞組清單。字詞或詞組清單龐大 (即高達數千萬個) 時,宜使用儲存的自訂字典偵測工具。
- 規則運算式 (regex) 偵測工具可讓 Sensitive Data Protection 根據規則運算式模式偵測相符項目。
如要修正掃描結果,可以建立檢查規則。
去識別化轉換
設定去識別化設定 (DeidentifyConfig) 時,必須指定一或多項轉換。轉換分為兩類:
InfoTypeTransformations:僅套用至提交文字中特定 infoType 值的轉換。RecordTransformations:這類轉換只會套用至提交的表格型資料中,經識別為特定 infoType 的值,或套用至整欄表格型資料。
InfoType 轉換
每項要求可以指定一或多項 infoType 轉換。在每個 InfoTypeTransformation 物件中,您必須指定下列兩項:
- 應套用轉換的一或多個 infoTypes (
infoTypes[]陣列物件)。 - 原始轉換 (
PrimitiveTransformation物件)。
請注意,指定 infoType 是選用步驟,但如果未在 InspectConfig 引數中指定至少一個 infoType,轉換作業會套用至所有未提供轉換的內建 infoType。我們不建議這麼做,因為這會導致效能下降且成本提高。
原始轉換
無論是僅套用至特定 infoType 或整個文字字串,您都必須指定至少一項要套用至輸入內容的基本轉換。以下各節說明可用的轉換方法範例。如需 Sensitive Data Protection 提供的所有轉換方法清單,請參閱「轉換參考資料」。
replaceConfig
將 replaceConfig 設為 ReplaceValueConfig 物件,即可將相符的輸入值替換為指定值。
舉例來說,假設您已將所有 EMAIL_ADDRESS infoType 的 replaceConfig 設為「[email-address]」,並將下列字串傳送至 Sensitive Data Protection:
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
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱「Sensitive Data Protection 用戶端程式庫」。
如要向 Sensitive Data Protection 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Java
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱「Sensitive Data Protection 用戶端程式庫」。
如要向 Sensitive Data Protection 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
REST
如要進一步瞭解如何透過 JSON 使用 DLP API,請參閱 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,並將下列字串傳送至 Sensitive Data Protection:
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#
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱「Sensitive Data Protection 用戶端程式庫」。
如要向 Sensitive Data Protection 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Go
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱「Sensitive Data Protection 用戶端程式庫」。
如要向 Sensitive Data Protection 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Java
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱「Sensitive Data Protection 用戶端程式庫」。
如要向 Sensitive Data Protection 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Node.js
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱「Sensitive Data Protection 用戶端程式庫」。
如要向 Sensitive Data Protection 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
PHP
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱「Sensitive Data Protection 用戶端程式庫」。
如要向 Sensitive Data Protection 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Python
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱「Sensitive Data Protection 用戶端程式庫」。
如要向 Sensitive Data Protection 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
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 資訊類型,但「.」和「@」字元除外。如果將下列字串傳送至 Sensitive Data Protection:
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
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱「Sensitive Data Protection 用戶端程式庫」。
如要向 Sensitive Data Protection 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Node.js
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱「Sensitive Data Protection 用戶端程式庫」。
如要向 Sensitive Data Protection 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Python
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱「Sensitive Data Protection 用戶端程式庫」。
如要向 Sensitive Data Protection 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Go
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱「Sensitive Data Protection 用戶端程式庫」。
如要向 Sensitive Data Protection 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
PHP
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱「Sensitive Data Protection 用戶端程式庫」。
如要向 Sensitive Data Protection 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
C#
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱「Sensitive Data Protection 用戶端程式庫」。
如要向 Sensitive Data Protection 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
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)。接著,系統會將下列字串傳送至 Sensitive Data Protection:
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
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱「Sensitive Data Protection 用戶端程式庫」。
如要向 Sensitive Data Protection 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Node.js
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱「Sensitive Data Protection 用戶端程式庫」。
如要向 Sensitive Data Protection 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Python
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱「Sensitive Data Protection 用戶端程式庫」。
如要向 Sensitive Data Protection 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Go
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱「Sensitive Data Protection 用戶端程式庫」。
如要向 Sensitive Data Protection 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
PHP
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱「Sensitive Data Protection 用戶端程式庫」。
如要向 Sensitive Data Protection 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
C#
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱「Sensitive Data Protection 用戶端程式庫」。
如要向 Sensitive Data Protection 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
cryptoReplaceFfxFpeConfig
將 cryptoReplaceFfxFpeConfig 設為 CryptoReplaceFfxFpeConfig 物件,即可將輸入內容替換為權杖,對輸入內容執行匿名化。代碼具有下列特性:
- 加密的輸入值。
- 長度與輸入值相同。
- 使用 FFX 模式中的格式保留加密 (「FPE-FFX」) 計算,並以
cryptoKey指定的加密編譯金鑰為索引鍵。 - 由
alphabet指定的字元組成。有效選項:NUMERICHEXADECIMALUPPER_CASE_ALPHA_NUMERICALPHA_NUMERIC
輸入值具有以下特性:
- 至少必須要有兩個字元的長度 (或空字串)。
- 必須由
alphabet指定的字元組成。alphabet的長度可介於 2 到 95 個字元之間。(包含 95 個字元的alphabet包含 US-ASCII 字元集中的所有可列印字元)。
Sensitive Data Protection 會使用加密編譯金鑰計算替換權杖。您可透過以下三種方式的其中之一提供這個金鑰:
- 將未加密的金鑰嵌入 API 要求。我們不建議這麼做。
- 要求 Sensitive Data Protection 生成。
- 將加密金鑰嵌入 API 要求中。
如果選擇在 API 要求中嵌入金鑰,則必須建立金鑰並使用 Cloud Key Management Service (Cloud KMS) 金鑰包裝 (加密)。根據預設,傳回的值是以 Base64 編碼的字串。如要在 Sensitive Data Protection 中設定這個值,必須將其解碼為位元組字串。下列程式碼片段說明如何以多種語言執行這項操作。這些程式碼片段後方會提供端對端範例。
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 等其他方法可提供更強大的安全保障,建議用於權杖化用途,除非長度和字元集保留是嚴格要求,例如與舊版資料系統的回溯相容性。
以下是多種語言的程式碼範例,示範如何使用 Sensitive Data Protection,將輸入值替換為權杖,藉此去識別化機密資料。
Java
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱「Sensitive Data Protection 用戶端程式庫」。
如要向 Sensitive Data Protection 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Node.js
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱「Sensitive Data Protection 用戶端程式庫」。
如要向 Sensitive Data Protection 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Python
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱「Sensitive Data Protection 用戶端程式庫」。
如要向 Sensitive Data Protection 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Go
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱「Sensitive Data Protection 用戶端程式庫」。
如要向 Sensitive Data Protection 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
PHP
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱「Sensitive Data Protection 用戶端程式庫」。
如要向 Sensitive Data Protection 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
C#
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱「Sensitive Data Protection 用戶端程式庫」。
如要向 Sensitive Data Protection 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
如需程式碼範例,瞭解如何使用 Sensitive Data Protection 重新識別透過 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,並將下列字串傳送至 Sensitive Data Protection:
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 轉換。將下表第一欄的資料傳送至 Sensitive Data Protection 後,第二欄會顯示轉換後的值:
| 原始值 | 轉換值 |
|---|---|
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:將欄位內容視為自由文字,並僅對符合InfoType的內容套用PrimitiveTransformation。本主題稍早已討論過這些轉換。primitiveTransformation:將指定的原始轉換 (PrimitiveTransformation物件) 套用至整個欄位。本主題稍早已討論過這些轉換。如果
RecordTransformations物件只包含primitiveTransformation,不含infoTypeTransformations,則要求中不需要包含InspectConfig物件。如果這麼做,Sensitive Data Protection 會忽略該欄。
欄位轉換範例
下列範例會傳送包含兩項欄位轉換的 projects.content.deidentify 要求:
第一個欄位轉換會套用至前兩個資料欄 (
column1和column2)。由於轉換類型是primitiveTransformation物件 (具體來說是CryptoDeterministicConfig),Sensitive Data Protection 會轉換整個欄位。第二個欄位轉換會套用至第三欄 (
column3)。由於轉換類型是infoTypeTransformations物件,Sensitive Data Protection 只會將原始轉換 (具體來說是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"
}
]
}
}記錄抑制
除了對欄位資料套用轉換,您也可以指示 Sensitive Data Protection,在特定抑制條件評估為 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,就能重新識別該資料。詳情請參閱「加密型權杖化轉換」。
發現項目數量限制
如果要求超過 3,000 個發現項目,Sensitive Data Protection 會傳回下列訊息:
Too many findings to de-identify. Retry with a smaller request.
Sensitive Data Protection 傳回的發現項目清單,是要求中所有發現項目的任意子集。如要取得所有發現項目,請將要求拆分為較小的批次。
後續步驟
進一步瞭解去識別化工作流程如何融入實際部署作業。
完成「使用 Sensitive Data Protection 遮蓋機密資料」程式碼實驗室。
透過範例瞭解如何建立包裝金鑰、將內容權杖化,以及重新識別權杖化內容。
進一步瞭解如何建立去識別化的儲存空間資料副本。