建立儲存的自訂字典偵測工具

如果掃描內容所用的機密字詞或詞組清單不大時,很適合使用一般的自訂字典偵測工具。如果要掃描的字詞或詞組不是只有幾個而已,或是字詞或詞組清單經常變動,則應考慮建立「儲存的自訂字典」,以利搜尋高達數千萬個字詞或詞組。

本主題說明如何建立及更新儲存的自訂字典,並且會探討幾種錯誤的使用情境。

剖析儲存的自訂字典

您可能早已熟悉如何建立一般字典自訂 infoType 或規則運算式自訂 infoType,也就是定義傳送到 content.deidentify 方法的 CustomInfoType 物件。儲存的自訂字典則不同,每一個儲存的自訂字典都有兩個元件:

  • 建立及定義的詞組清單。這個清單會存成 Cloud Storage 中的文字檔或存成 BigQuery 表格中的資料欄。
  • 由 Cloud DLP 根據您的詞組清單產生的字典檔案。字典檔案儲存在 Cloud Storage 中,由來源詞組資料加上 Bloom 篩選器所組成,用於輔助搜尋和比對。這些檔案無法直接編輯。

建立新的儲存字典

本節說明如何建立、編輯及更新新的儲存字典。

建立詞組清單

建立儲存的自訂字典時,第一步是建立字詞和詞組清單。您有以下兩種選擇:

  • 將文字檔 (每個字詞或詞組為一行) 置於 Cloud Storage 值區中。
  • 將 BigQuery 表格的一個資料欄指定為詞組的容器,讓每一個詞組在資料欄中有自己的資料列。您可以使用現有的 BigQuery 表格,但所有的字典字詞和詞組都必須放在同一個資料欄中。

請注意,建立的字詞清單有可能會大到 Cloud DLP 無法處理。如果出現錯誤訊息,請參閱本主題後面的「排解相關錯誤」一節。

建立字典

在建立您的字詞清單後,請使用 Cloud DLP 建立字典:

  1. 在 Cloud Storage 值區中,建立字典的新目錄。Cloud DLP 會在您指定的位置中建立含有字典檔案的目錄。
  2. 使用 Cloud DLP API 的 storedInfoTypes.create 方法建立字典。create 方法需要下列參數:
    • StoredInfoTypeConfig 物件:包含儲存的 infoType 的設定,其中包括:
      • description:字典的說明。
      • displayName:您要為字典取的名稱。
      • LargeCustomDictionaryConfig:包含儲存的自訂字典的設定,其中包括:
        • BigQueryField:指定是否將您的字詞清單儲存在 BigQuery,包括您的清單儲存所在資料表的參照,加上包含每個字典詞組的欄位。
        • CloudStorageFileSet:指定是否將您的字詞清單儲存在 Cloud Storage,其中包括在 Cloud Storage 中的來源位置網址,格式如下:"gs://[PATH_TO_GS]"。支援萬用字元。
        • outputPath:Cloud Storage 值區中儲存所建立字典的位置路徑。
    • storedInfoTypeId:已儲存 infoType 的識別碼。這是您在更新或刪除儲存的 infoType 時所要參照的值,或是將其用於檢查或去識別化工作。如果您將這個欄位留白,系統會替您產生識別碼。

以下範例 JSON 在傳送到 storedInfoTypes.create 方法後,會建立新的儲存自訂字典。在這個範例中,我們已指示 Cloud DLP 根據儲存在公開 BigQuery 資料庫中的字詞清單,建立儲存的自訂字典,這個資料庫包含在修訂版本 (bigquery-public-data.samples.github_nested) 中使用的所有 GitHub 使用者名稱。所產生字典的輸出路徑則設定為名為 dlptesting 的 Cloud Storage 值區,而儲存的自訂字典已命名為 github-usernames

JSON 輸入:

POST https://dlp.googleapis.com/v2/projects/[PROJECT_ID]/storedInfoTypes?key={YOUR_API_KEY}

{
  "config":{
    "displayName":"GitHub usernames",
    "description":"Dictionary of github usernames used in commits",
    "largeCustomDictionary":{
      "outputPath":{
        "path":"gs://[PATH_TO_GS]"
      },
      "bigQueryField":{
        "table":{
          "datasetId":"samples",
          "projectId":"bigquery-public-data",
          "tableId":"github_nested"
        }
      }
    }
  },
  "storedInfoTypeId":"github-usernames"
}

更新字典

如果您想在字典中新增或移除字詞或詞組,請先更新來源字詞清單,然後再指示 Cloud DLP 更新字典。

  1. 在 Cloud Storage 或 BigQuery 中更新現有的來源字詞清單。視需要新增、移除或變更字詞或詞組。
  2. 使用 Cloud DLP 的 storedInfoTypes.patch 方法建立新版本的字典來取代舊字典。

如果只要更新字典來新增、刪除或變更字詞,那麼只需呼叫 storedInfoTypes.patch 方法。請務必將待更新的組織或專案及儲存的 infoType 的資源名稱填入 name 欄位。也就是您使用 storedInfoTypeId 參數建立儲存的 infoType 時所提供的名稱。如果您不記得要更新之儲存的 infoType 識別碼,可呼叫 storedInfoTypes.list 方法來查看所有目前儲存的 infoType 清單。

以下是 name 欄位的有效輸入格式:

  • organizations/[ORG_ID]/storedInfoTypes/[STORED_INFOTYPE_ID]
  • projects/[PROJECT_ID]/storedInfoTypes/[STORED_INFOTYPE_ID]

當您將儲存的自訂字典更新為新版本時,儲存的自訂字典舊版本即會刪除。在 Cloud DLP 更新儲存的自訂字典時,字典的狀態會是「待處理」。當字典新版本的狀態是待處理時,表示字典的舊版本仍存在。字典正在更新時,如果執行任何掃描作業,將會使用字典的舊版本來執行。

您可以為現有儲存的自訂字典變更來源字詞清單,從儲存在 BigQuery 表格的清單變更為儲存在 Cloud Storage 值區的清單,反之亦然。使用 storedInfoTypes.patch 方法,但在之前使用 BigQueryField 物件的 LargeCustomDictionaryConfig 中加入 CloudStorageFileSet 物件,反之亦然。您還必須指定 updateMask 參數,並使用 FieldMask 格式,將其設為已更新的儲存自訂字典參數。例如,以下 JSON 在傳送到 storedInfoTypes.patch 方法後,會在 updateMask 參數聲明 Cloud Storage 路徑的網址已更新 (large_custom_dictionary.cloud_storage_file_set.url):

PATCH https://dlp.googleapis.com/v2/projects/[PROJECT_ID]/storedInfoTypes/github-usernames?key={YOUR_API_KEY}

{
  "config":{
    "largeCustomDictionary":{
      "cloudStorageFileSet":{
        "url":"gs://[BUCKET_NAME]/[PATH_TO_FILE]"
      }
    }
  },
  "updateMask":"large_custom_dictionary.cloud_storage_file_set.url"
}

使用儲存的自訂字典偵測工具掃描內容

使用儲存的自訂字典偵測工具掃描的內容,與使用任何其他自訂 infoType 偵測工具掃描的內容相似。

以下 JSON 在傳送到 content.inspect 方法後,會使用指定的儲存自訂字典偵測工具掃描指定的文字片段。請注意,infoType 是必要參數,因為所有的自訂 infoTypes (包括儲存的自訂字典在內) 都必須使用不會與內建 infoType 或其他自訂 infoType 重複的名稱。storedType 參數包含儲存的 infoType 完整資源路徑。

JSON 輸入:

POST https://dlp.googleapis.com/v2/projects/[PROJECT_ID]/content:inspect?key={YOUR_API_KEY}

{
  "inspectConfig":{
    "customInfoTypes":[
      {
        "infoType":{
          "name":"GITHUB_LOGINS"
        },
        "storedType":{
          "name":"projects/[PROJECT_ID]/storedInfoTypes/github-logins"
        }
      }
    ]
  },
  "item":{
    "value":"The commit was made by githubuser."
  }
}

排解相關錯誤

如果在您嘗試建立自訂儲存的字典時看到錯誤,指出 Cloud DLP 無法根據您存在 Cloud Storage 的字詞清單建立字典,這有幾個可能原因:

  • 達到儲存的自訂字典的上限,視問題情況而有幾個解決方法:
    • 如果達到 Cloud Storage 中單一儲存的自訂字典上限 (200 MB),可以將檔案分割成幾個檔案。您仍可使用這些檔案組成單一自訂字典,只要檔案的總大小不會超過 Cloud Storage 中所有儲存的自訂字典檔案大小加總後的上限 (1 GB)。
    • BigQuery 沒有像 Cloud Storage 這樣的限制。可考慮將字詞移到 BigQuery 表格中,但請注意儲存的自訂字典資料欄在 BigQuery 中的大小上限 (1 GB),以及資料列數上限 (5,000,000)。
    • 如果您的字詞清單檔案超過儲存的自訂字典來源字詞清單的所有適用限制,就必須在 Cloud Storage 中將字詞清單檔案分割成幾個檔案,然後為每個檔案建立字典,再為每個建立的字典建立獨立的掃描工作。
  • 一或多個字詞未包含至少一個字母或數字。Cloud DLP 無法掃描只由空格或符號組成的字詞。字詞必須至少有一個字母或數字。檢查您的字詞清單,看看是否含有這類的字詞,然後予以修正或刪除。
  • 字詞清單包含的詞組有太多「構成元素」。這裡的構成元素是一個連續序列,只包含字母、只包含數字,或只包含非字母和非數字的字元 (如空格或符號)。檢查您的字詞清單,看看是否含有這類的字詞,然後予以修正或刪除。
  • DLP 服務帳戶無法存取字典來源資料,也無法存取 Cloud Storage 值區來儲存字典檔案。為了修正這個問題,請將 Cloud Storage 管理員角色或 BigQuery dataOwner 和 jobUser 角色授予 DLP 服務帳戶。

API 總覽

儲存的自訂字典因其大小和複雜性,會被視為「儲存的 infoType」。目前,儲存的自訂字典是儲存的 infoType 的唯一類型。

儲存的 infoType 會在 Cloud DLP 中以 StoredInfoType 物件來表示,並伴隨下列相關物件:

  • StoredInfoTypeConfig 包含儲存的 infoType 設定,包括名稱和描述等詳細資料。
  • StoredInfoTypeVersion 包含更多儲存的 infoType 資訊,如建立日期和時間,以及儲存的 infoType 目前版本建立時發生的最近五則錯誤訊息。
  • StoredInfoTypeState 包含儲存的 infoType 最新版本及任何待處理版本的狀態。狀態資訊包括儲存的 infoType 更新中、可供使用,還是無效。

如要建立、編輯或刪除儲存的 infoType,請使用以下方法:

  • storedInfoTypes.create:如果有您指定的 StoredInfoTypeConfig,則建立新的儲存 infoType。
  • storedInfoTypes.patch:使用您指定的新 StoredInfoTypeConfig 更新儲存的 infoType;如果未指定任何項目,則使用現有的 StoredInfoTypeConfig 建立儲存的 infoType 新版本。
  • storedInfoTypes.get:擷取指定儲存的 infoType 的 StoredInfoTypeConfig 及任何待處理版本。
  • storedInfoTypes.list:列出所有目前儲存的 infoType。
  • storedInfoTypes.delete:刪除指定的儲存 infoType。

除了本處所述的儲存 infoType API,以下物件也明確適用於儲存的自訂字典:

  • LargeCustomDictionaryConfig 指定以下兩者:
    • 詞組清單儲存在 Cloud Storage 或 BigQuery 的位置。
    • Cloud Storage 儲存產生的字典檔案的位置。

字典比對細節

以下指引描述 Cloud DLP 如何比對字典字詞和詞組。這些要點適用於一般和儲存的自訂字典:

  • 字典的字詞不區分大小寫。如果您的字典包括 Abby,就會與 abbyABBYAbby 等相符。
  • 掃描相符項目時,如果字典或掃描內容中的字元不是 Unicode 基本多語言字面 (Basic Multilingual Plane) 中包含的字母或數字,則會被視為空格字元。如果您的字典掃描 Abby Abernathy,就會與 abby abernathyAbby, AbernathyAbby (ABERNATHY) 等相符。
  • 任何相符項目周圍的字元必須是不同類型 (字母或數字),不可以是字詞中的相鄰字元。如果您的字典掃描 Abi,就會與 Abi904 的前三個字元相符,但與 Abigail 的前三個字元不相符。
  • 如果字典的字詞包含非字母或數字的大量字元,則可能會導致非預期的發現項目,原因是這些字元均被視為空白字元。
本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Cloud Data Loss Prevention