「機密資料保護」服務可以將文字內容中的機密資料去識別化,包括儲存在資料表等容器結構中的文字。去識別化是移除資料中識別資訊的程序。API 會偵測個人識別資訊 (PII) 等機密資料,然後使用去識別化轉換來遮蔽、刪除或隱藏資料。舉例來說,去識別化技術可包含以下任何一種:
- 將局部或全部字元替換為星號 (*) 或井號 (#) 等符號以「遮蔽」機密資料。
- 將機密資料的每個例項替換為代碼或代理值字串。
- 使用隨機產生或預先決定的金鑰來加密和取代機密資料。
您可以在 HTTPS 使用 JSON、CLI,以及透過 Sensitive Data Protection 用戶端程式庫使用多種程式設計語言,提供資訊給 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 引進檢查規則的概念,可讓您使用以下項目微調掃描結果:
- 「排除規則」可讓您將規則新增到內建或自訂 infoType 偵測工具中,藉此減少傳回的發現項目數。
- 「啟動字詞規則」可讓您將規則新增到內建或自訂 infoType 偵測工具中,藉此提高傳回的發現項目數量,或變更傳回發現項目的可能性值。
去識別化轉換
進行去識別化設定 (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,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
Java
如要瞭解如何安裝及使用 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,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
Go
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱這篇文章。
如要驗證 Sensitive Data Protection,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
Java
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱這篇文章。
如要驗證 Sensitive Data Protection,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
Node.js
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱這篇文章。
如要驗證 Sensitive Data Protection,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
PHP
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱這篇文章。
如要驗證 Sensitive Data Protection,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
Python
如要瞭解如何安裝及使用 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
infoType,但「.」和「@」字元除外。如果將下列字串傳送至 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,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
Node.js
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱這篇文章。
如要驗證 Sensitive Data Protection,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
Python
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱這篇文章。
如要驗證 Sensitive Data Protection,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
Go
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱這篇文章。
如要驗證 Sensitive Data Protection,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
PHP
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱這篇文章。
如要驗證 Sensitive Data Protection,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
C#
如要瞭解如何安裝及使用 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 編碼的雜湊內容。 目前,您只能對字串與整數值進行雜湊處理。
舉例來說,假設您已為所有 cryptoHashConfig
infoType 指定 EMAIL_ADDRESS
,且 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,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
Node.js
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱這篇文章。
如要驗證 Sensitive Data Protection,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
Python
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱這篇文章。
如要驗證 Sensitive Data Protection,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
Go
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱這篇文章。
如要驗證 Sensitive Data Protection,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
PHP
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱這篇文章。
如要驗證 Sensitive Data Protection,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
C#
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱這篇文章。
如要驗證 Sensitive Data Protection,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
cryptoReplaceFfxFpeConfig
將 cryptoReplaceFfxFpeConfig
設為 CryptoReplaceFfxFpeConfig
物件,即可對輸入值執行匿名化,也就是將輸入值替換為權杖。代碼具有下列特性:
- 加密的輸入值。
- 長度與輸入值相同。
- 在金鑰使用
cryptoKey
指定的加密編譯金鑰的 FFX 模式中,使用格式保留加密 (「FPE-FFX」) 進行計算。 - 由
alphabet
指定的字元構成。有效選項:NUMERIC
HEXADECIMAL
UPPER_CASE_ALPHA_NUMERIC
ALPHA_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,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
Node.js
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱這篇文章。
如要驗證 Sensitive Data Protection,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
Python
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱這篇文章。
如要驗證 Sensitive Data Protection,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
Go
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱這篇文章。
如要驗證 Sensitive Data Protection,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
PHP
如要瞭解如何安裝及使用 Sensitive Data Protection 的用戶端程式庫,請參閱這篇文章。
如要驗證 Sensitive Data Protection,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
C#
如要瞭解如何安裝及使用 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
物件包含 buckets[]
陣列的 Bucket
物件。每個 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
:將欄位內容視為任意文字,並僅將PrimitiveTransformation
套用至符合InfoType
的內容。本主題前面已探討這些轉換。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 遮蓋機密資料程式碼研究室。
逐步完成範例,瞭解如何建立包裝金鑰、將內容權杖化,以及重新識別權杖化內容。
進一步瞭解如何在儲存空間中建立去識別化資料副本。