透過資料欄層級存取權控管機制限制存取權

本頁說明如何使用 BigQuery 資料欄層級的存取權控管機制,限制存取資料欄層級的 BigQuery 資料。如需有關資料欄層級存取權控管的一般資訊,請參閱「BigQuery 資料欄層級存取權控管簡介」。

本頁面中的操作說明會同時使用 BigQuery 和 Data Catalog。

您必須更新資料表結構定義,才能為資料欄設定政策標記。您可以使用 Google Cloud 主控台、bq 指令列工具和 BigQuery API,在資料欄上設定政策標記。此外,您可以使用下列技巧,在單一作業中建立資料表、指定結構定義,以及指定政策標記:

  • bq 指令列工具的 bq mkbq load 指令。
  • tables.insert API 方法。
  • Google Cloud 控制台的「Create table」(建立資料表) 頁面。如果您使用Google Cloud 主控台,則在新增或編輯結構定義時,必須選取「Edit as text」

如要強化資料欄層級存取權控管,您可以選擇使用動態資料遮蓋功能。資料遮蓋可讓您將空值、預設值或雜湊內容取代資料欄的實際值,藉此遮蓋機密資料。

事前準備

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Data Catalog and BigQuery Data Policy APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Data Catalog and BigQuery Data Policy APIs.

    Enable the APIs

  8. 新專案會自動啟用 BigQuery,但您可能需要在現有專案中啟用 BigQuery。

    Enable the BigQuery API.

    Enable the API

  9. 角色和權限

    使用者和服務帳戶有幾個與政策標記相關的角色。

    • 管理政策標記的使用者或服務帳戶必須具備資料目錄政策標記管理員角色。政策標記管理員角色可管理分類和政策標記,並授予或移除與政策標記相關聯的 IAM 角色。
    • 使用者或服務帳戶必須具備 BigQuery 管理員角色或 BigQuery 資料擁有者角色,才能強制執行資料欄層級存取權控管。BigQuery 角色可管理資料政策,用於在分類中強制執行存取權控管。
    • 如要在Google Cloud 主控台中查看機構中所有專案的分類和政策標記,使用者必須具備「機構檢視者」角色。否則,控制台只會顯示與所選專案相關聯的分類和政策標籤。
    • 使用者或服務帳戶若要查詢受資料欄層級存取權控制機制保護的資料,必須具備 Data Catalog 精細讀取者角色,才能存取該資料。

    如要進一步瞭解所有政策標記相關角色,請參閱資料欄層級存取權控管所使用的角色

    Data Catalog 政策標記管理員角色

    Data Catalog 政策標記管理員角色可以建立及管理資料政策標記。

    如要授予政策標記管理員角色,您必須在要授予角色的專案中具備 resourcemanager.projects.setIamPolicy 權限。如果您沒有 resourcemanager.projects.setIamPolicy 權限,請要求專案擁有者授予您權限,或為您執行下列步驟。

    1. 前往 Google Cloud 控制台的「IAM」頁面。

      開啟 IAM 頁面

    2. 如果要授予角色的使用者電子郵件地址已列在清單中,請選取電子郵件地址,然後按一下 「編輯」。「Edit access」窗格隨即開啟。按一下「Add another role」

      如果使用者電子郵件地址不在清單中,請按一下 「Add」,然後在「New principals」方塊中輸入電子郵件地址。

    3. 按一下「請選擇角色」下拉式清單。

    4. 在「依產品或服務」下方,按一下「Data Catalog」。在「角色」中,按一下「政策代碼管理員」

    5. 按一下 [儲存]

    BigQuery 資料政策管理員、BigQuery 管理員和 BigQuery 資料擁有者角色

    BigQuery 資料政策管理員、BigQuery 管理員和 BigQuery 資料擁有者角色可管理資料政策。

    如要授予這兩種角色,您必須在要授予角色的專案中具備 resourcemanager.projects.setIamPolicy 權限。如果您沒有 resourcemanager.projects.setIamPolicy 權限,請要求專案擁有者授予您權限,或為您執行下列步驟。

    1. 前往 Google Cloud 控制台的「IAM」頁面。

      開啟 IAM 頁面

    2. 如果要授予角色的使用者電子郵件地址已列在清單中,請選取電子郵件地址,然後按一下 「編輯」。然後按一下「Add another role」

      如果使用者電子郵件地址不在清單中,請按一下 「Add」,然後在「New principals」方塊中輸入電子郵件地址。

    3. 按一下「請選擇角色」下拉式清單。

    4. 依序按一下「BigQuery」和「BigQuery 資料政策管理員」或「BigQuery 管理員」或「BigQuery 資料擁有者」*。

    5. 按一下 [儲存]

    「機構檢視者」角色

    機構檢視者角色可讓使用者查看機構資源的詳細資料。如要授予這個角色,您必須具備機構的 resourcemanager.organizations.setIamPolicy 權限。

    Data Catalog 精細讀取者角色

    使用者如需存取以資料欄層級存取權控管機制保護的資料,就必須具備 Data Catalog 精細讀取者角色。在設定政策代碼時,系統會將這個角色指派給主體。

    如要將精細讀取者角色授予使用者,您必須在包含政策標記分類的專案中具備 datacatalog.taxonomies.setIamPolicy 權限。如果您沒有 datacatalog.taxonomies.setIamPolicy 權限,請要求專案擁有者授予您權限,或代您執行這項操作。

    如需操作說明,請參閱「設定政策代碼的權限」。

    設定資料欄層級存取權控管機制

    完成下列工作,設定資料欄層級存取權控管機制:

    • 建立政策標記分類。
    • 將主體與政策標記建立關聯,並授予主體 Data Catalog 精細讀取者角色。
    • 將政策標記與 BigQuery 資料表欄建立關聯。
    • 針對包含政策標記的分類強制執行存取權控管機制。

    可建立分類

    建立分類法的使用者或服務帳戶必須具備「資料目錄政策標記管理員」角色。

    主控台

    1. 在Google Cloud 控制台中開啟「Policy tag taxonomies」頁面。

      開啟「政策標記分類」頁面

    2. 按一下「建立分類」
    3. 在「New taxonomy」(新增分類) 頁面中:

      1. 在「分類名稱」中,輸入要建立的分類名稱。
      2. 在「說明」中,輸入說明。
      3. 如有需要,請變更「Project」下方列出的專案。
      4. 如有需要,請變更「位置」下方列出的地點。
      5. 在「政策代碼」下方,輸入政策代碼名稱和說明。
      6. 如要為政策標記新增子項政策標記,請按一下「新增子標記」
      7. 如要在與其他政策標記相同的層級新增政策標記,請點選「+ 新增政策標記」
      8. 視需要繼續為分類新增政策標記和子項政策標記。
      9. 為階層建立政策標記後,請按一下「建立」

    API

    如要使用現有的分類法,請呼叫 taxonomies.import,取代下列程序的前兩個步驟。

    1. 呼叫 taxonomies.create 建立分類。
    2. 呼叫 taxonomies.policytag.create 建立政策標記。

    設定政策標記的權限

    建立分類法的使用者或服務帳戶必須具備「資料目錄政策標記管理員」角色。

    主控台

    1. 在Google Cloud 控制台中開啟「Policy tag taxonomies」頁面。

      開啟「政策標記分類」頁面

    2. 按一下包含相關政策標記的分類名稱。

    3. 選取一或多個政策標記。

    4. 如果「資訊面板」未顯示,請按一下「顯示資訊面板」

    5. 在「資訊面板」中,您可以查看所選政策標記的角色和主體。將「政策標記管理員」角色新增至建立及管理政策標記的帳戶。將「精細讀取者」角色新增至要存取以資料欄層級存取權控管機制保護的資料的帳戶。您也可以使用這個面板從帳戶中移除角色,或修改其他權限。

    6. 按一下 [儲存]

    API

    呼叫 taxonomies.policytag.setIamPolicy,藉由將主體指派給適當的角色,授予政策標記存取權。

    在資料欄上設定政策標記

    設定政策標記的使用者或服務帳戶需要具備 datacatalog.taxonomies.getbigquery.tables.setCategory 權限。datacatalog.taxonomies.get 包含在 Data Catalog 政策標記管理員和專案檢視者角色中。bigquery.tables.setCategory 包含在 BigQuery 管理員 (roles/bigquery.admin) 和 BigQuery 資料擁有者 (roles/bigquery.dataOwner) 角色中。

    如要在Google Cloud 主控台中查看機構中所有專案的層別和政策標記,使用者必須具備 resourcemanager.organizations.get 權限,這項權限包含在「機構檢視者」角色中。

    主控台

    使用Google Cloud 控制台修改結構定義,即可設定政策標記。

    1. 在 Google Cloud 控制台開啟「BigQuery」頁面。

      前往「BigQuery」頁面

    2. 在 BigQuery Explorer 中,找出並選取要更新的資料表。該資料表的資料表結構定義隨即開啟。

    3. 點選「編輯結構定義」

    4. 在「Current schema」畫面中,選取目標欄,然後按一下「Add policy tag」

    5. 在「新增政策標記」畫面中,找出要套用至資料欄的政策標記,然後選取該標記。

    6. 按一下「選取」。畫面應會出現如下所示的內容:

      編輯結構定義。

    7. 按一下 [儲存]

    bq

    1. 將結構定義寫入本機檔案。

      bq show --schema --format=prettyjson \
         project-id:dataset.table > schema.json

      其中:

      • project-id 是您的專案 ID。
      • dataset 是含有您要更新資料表的資料集名稱。
      • table 是您要更新之資料表的名稱。
    2. 修改 schema.json 以在資料欄上設定政策標記。針對 policyTagsnames 欄位值,請使用政策標記資源名稱

      [
       ...
       {
         "name": "ssn",
         "type": "STRING",
         "mode": "REQUIRED",
         "policyTags": {
           "names": ["projects/project-id/locations/location/taxonomies/taxonomy-id/policyTags/policytag-id"]
         }
       },
       ...
      ]
    3. 更新結構定義。

      bq update \
         project-id:dataset.table schema.json

    API

    如為現有資料表,請呼叫 tables.patch;如為新資料表,請呼叫 tables.insert。請使用您傳入的 Table 物件 schema 屬性,在結構定義中設定政策標記。請參閱指令列範例結構定義,瞭解如何設定政策標記。

    使用現有資料表時,建議使用 tables.patch 方法,因為 tables.update 方法會取代整個資料表資源。

    在資料欄上設定政策標記的其他方式

    您也可以在下列情況設定政策標記:

    • 使用 bq mk 建立資料表。傳入要用於建立資料表的結構定義。
    • 使用 bq load 將資料載入資料表。在載入資料表時,傳入要使用的結構定義。

    如需一般結構定義資訊,請參閱「指定結構定義」。

    強制執行存取控管

    請按照以下操作說明,開啟或關閉存取權控管機制。

    如要強制執行存取權控管,您必須建立資料政策。如果您使用Google Cloud 控制台強制執行存取權控管,系統會自動執行這項作業。如要使用 BigQuery Data Policy API 強制執行存取權控管,您必須明確建立資料政策。

    強制執行存取權控管的使用者或服務帳戶必須具備 BigQuery 管理員角色或 BigQuery 資料擁有者角色。他們也必須具備 Data Catalog 管理員角色或 Data Catalog 檢視者角色。

    主控台

    如要強制執行存取權控管,請按照下列步驟操作:

    1. 在Google Cloud 控制台中開啟「Policy tag taxonomies」頁面。

      開啟「政策標記分類」頁面

    2. 按一下要強制執行資料欄層級存取權控管機制的分類。

    3. 如果「強制執行存取控管」尚未開啟,請按一下「強制執行存取控管」啟用這項功能。

    如要停止強制執行存取權控管 (如果已開啟),請按一下「強制執行存取權控管」來切換控制項。

    如果您有與分類中的任何政策標記相關聯的資料政策,請務必先刪除分類中的所有資料政策,再停止強制執行存取控制。如果您使用 BigQuery Data Policy API 刪除資料政策,必須刪除所有 dataPolicyTypeDATA_MASKING_POLICY 的資料政策。詳情請參閱「刪除資料政策」。

    API

    如要強制執行存取權控管,請呼叫 create,並傳入 DataPolicy 資源,其中 dataPolicyType 欄位設為 COLUMN_LEVEL_SECURITY_POLICY

    如要停止強制執行存取權控管機制 (如果已啟用),請刪除與分類法相關聯的資料政策。您可以呼叫該資料政策的 delete 方法來執行此操作。

    如果您有與分類中的任何政策標記相關聯的資料政策,必須先刪除分類中的所有資料政策,才能停止強制執行存取控管。詳情請參閱「刪除資料政策」。

    使用政策標記

    本節說明如何查看、修改及刪除政策標記。

    查看政策標記

    如要查看為分類建立的政策標記,請按照下列步驟操作:

    1. 在Google Cloud 控制台中開啟「Policy tag taxonomies」頁面。

      開啟「政策標記分類」頁面

    2. 按一下要查看政策標記的分類。「分類」頁面會顯示分類中的政策標記。

    查看結構定義中的政策標記

    您可以查看資料表結構定義,瞭解已套用至資料表的政策標記。您可以使用 Google Cloud 控制台、bq 指令列工具、BigQuery API 和用戶端程式庫查看結構定義。如要進一步瞭解如何查看結構定義,請參閱「取得資料表資訊」。

    查看政策標記的權限

    1. 在Google Cloud 控制台中開啟「Policy tag taxonomies」頁面。

      開啟「政策標記分類」頁面

    2. 按一下包含相關政策標記的分類名稱。

    3. 選取一或多個政策標記。

    4. 如果「資訊面板」未顯示,請按一下「顯示資訊面板」

    5. 在「資訊面板」中,您可以查看所選政策標記的角色和主體。

    更新政策標記的權限

    建立分類法的使用者或服務帳戶必須具備「資料目錄政策標記管理員」角色。

    主控台

    1. 在Google Cloud 控制台中開啟「Policy tag taxonomies」頁面。

      開啟「政策標記分類」頁面

    2. 按一下包含相關政策標記的分類名稱。

    3. 選取一或多個政策標記。

    4. 如果「資訊面板」未顯示,請按一下「顯示資訊面板」

    5. 在「資訊面板」中,您可以查看所選政策標記的角色和主體。將「政策標記管理員」角色新增至建立及管理政策標記的帳戶。將「精細讀取者」角色新增至要存取以資料欄層級存取權控管機制保護的資料的帳戶。您也可以使用這個面板從帳戶中移除角色,或修改其他權限。

    6. 按一下 [儲存]

    API

    呼叫 taxonomies.policytag.setIamPolicy,藉由將主體指派給適當的角色,授予政策標記存取權。

    擷取政策標記資源名稱

    將政策標記套用至資料欄時,您需要政策標記資源名稱。

    如要擷取政策標記資源名稱,請按照下列步驟操作:

    1. 查看含有政策標記的分類的政策標記

    2. 找出要複製資源名稱的政策標記。

    3. 按一下「複製政策標記資源名稱」圖示。

      複製資源名稱。

    清除政策標記

    更新資料表結構定義,清除資料欄中的政策標記。您可以使用Google Cloud 主控台、bq 指令列工具和 BigQuery API 方法,從資料欄中清除政策標記。

    主控台

    在「Current schema」頁面的「Policy tags」下方,按一下「X」

    清除政策標記。

    bq

    1. 擷取結構定義並儲存至本機檔案。

      bq show --schema --format=prettyjson \
         project-id:dataset.table > schema.json

      其中:

      • project-id 是您的專案 ID。
      • dataset 是含有您要更新資料表的資料集名稱。
      • table 是您要更新之資料表的名稱。
    2. 修改 schema.json,清除資料欄中的政策標記。

      [
       ...
       {
         "name": "ssn",
         "type": "STRING",
         "mode": "REQUIRED",
         "policyTags": {
           "names": []
         }
       },
       ...
      ]
    3. 更新結構定義。

      bq update \
         project-id:dataset.table schema.json

    API

    呼叫 tables.patch 並使用 schema 屬性,清除結構定義中的政策標記。請參閱指令列範例結構定義,瞭解如何清除政策標記。

    由於 tables.update 方法會取代整個資料表資源,因此建議使用 tables.patch 方法。

    刪除政策標記

    您可以刪除分類中的一或多個政策標記,也可以刪除分類及其所含的所有政策標記。刪除政策標記後,系統會自動移除政策標記與其套用的任何欄之間的關聯。

    刪除與資料政策相關聯的政策標記時,系統最多可能需要 30 分鐘才能刪除資料政策。如果您想立即刪除資料政策,可以直接刪除資料政策

    如要刪除分類中的一或多個政策標記,請按照下列步驟操作:

    1. 在Google Cloud 控制台中開啟「Policy tag taxonomies」頁面。

      開啟「政策標記分類」頁面

    2. 按一下含有要刪除的標記的分類名稱。
    3. 按一下 [編輯]
    4. 按一下政策標記旁的 即可刪除。
    5. 按一下 [儲存]
    6. 按一下「確認」。

    如要刪除整個分類,請按照下列步驟操作:

    1. 在Google Cloud 控制台中開啟「Policy tag taxonomies」頁面。

      開啟「政策標記分類」頁面

    2. 按一下含有要刪除的標記的分類名稱。
    3. 點選「Delete Policy Tag Taxonomy」(刪除政策標記分類)
    4. 輸入分類名稱,然後按一下「刪除」

    使用資料欄層級存取權控管機制查詢資料

    如果使用者具備資料集存取權,且擁有 Data Catalog 精細讀取者角色,則可使用資料欄資料。使用者照常執行查詢。

    如果使用者有資料集存取權,但沒有資料目錄精細讀取者角色,則使用者無法存取資料欄資料。如果這類使用者執行 SELECT *,就會收到列出使用者無法存取的資料欄的錯誤訊息。如要解決錯誤,您可以採取下列任一做法:

    • 修改查詢,排除使用者無法存取的資料欄。舉例來說,如果使用者無法存取 ssn 欄,但可以存取其他欄,則可以執行以下查詢:

      SELECT * EXCEPT (ssn) FROM ...

      在上述範例中,EXCEPT 子句會排除 ssn 資料欄。

    • 請 Data Catalog 管理員將使用者新增為 Data Catalog 精細讀取者,並加入相關資料類別。錯誤訊息會提供使用者需要存取的政策標記全名。

    常見問題

    BigQuery 資料欄層級安全防護機制是否適用於檢視表?

    可以。檢視表是從底層資料表衍生而來。當透過檢視畫面存取受保護的資料欄時,資料表上會套用相同的資料欄層級存取權控管。

    BigQuery 中有兩種檢視表:邏輯檢視表和已授權檢視表。這兩種檢視表都源自來源資料表,且都與資料表的資料欄層級存取權控管一致。

    詳情請參閱「授權檢視表」。

    資料欄層級存取權控管機制是否適用於 STRUCTRECORD 資料欄?

    可以。您只能將政策標記套用至葉節欄位,且只有這些欄位會受到保護。

    我可以同時使用舊版 SQL 和 GoogleSQL 嗎?

    您可以使用 GoogleSQL 查詢受欄位層級存取權控管保護的資料表。

    如果目標資料表上有任何政策標記,系統會拒絕任何舊版 SQL 查詢。

    查詢是否會記錄至 Cloud Logging?

    系統會將政策標記檢查結果記錄在 Logging 中。如需更多資訊,請參閱有關資料欄層級存取權控管的稽核記錄

    複製資料表是否會受到資料欄層級存取權控管機制的影響?

    可以。如果您沒有資料欄的存取權,就無法複製這些資料欄。

    以下作業會驗證資料欄層級權限。

    將資料複製到新資料表時,政策標記會自動套用嗎?

    在大多數情況下,不會。如果您將查詢結果複製到新資料表,新資料表不會自動指派政策代碼。因此,新資料表沒有資料欄層級存取權控管機制。如果您將資料匯出至 Cloud Storage,情況也是如此。

    例外狀況是您使用資料表複製工作。由於資料表複製作業不會套用任何資料轉換,政策標記會自動套用至目標資料表。這項例外狀況不適用於跨區域的資料表複製工作,因為跨區域的資料表複製工作不支援複製政策標記。

    資料欄層級存取控管功能是否與虛擬私有雲相容?

    是的,資料欄層級存取權控管機制和 VPC 相容且互補。

    VPC 會運用 IAM 控管 BigQuery 和 Cloud Storage 等服務的存取權。資料欄層級存取控制可為 BigQuery 中的個別資料欄提供精細的安全防護機制。

    如要針對資料欄層級存取權控管和動態資料遮罩功能,強制執行政策標記和資料政策的 VPC,您必須在安全範圍內限制下列 API:

    疑難排解

    我看不到 Data Catalog 角色

    如果您看不到 Data Catalog 精細讀取者等角色,表示您可能尚未在專案中啟用 Data Catalog API。如要瞭解如何啟用 Data Catalog API,請參閱「開始前」。啟用 Data Catalog API 後,Data Catalog 角色應會在幾分鐘後顯示。

    無法查看「分類」頁面

    您必須具備額外權限,才能查看「分類」頁面。舉例來說,Data Catalog 的政策標記管理員角色可存取「分類」頁面。

    我已強制執行政策代碼,但似乎無法運作

    如果您仍收到不應有存取權的帳戶查詢結果,表示該帳戶可能收到快取結果。具體來說,如果您先前已成功執行查詢,然後強制套用政策標記,則可能會從查詢結果快取取得結果。根據預設,查詢結果會快取 24 小時。如果您停用結果快取,查詢應會立即失敗。如要進一步瞭解快取功能,請參閱「資料欄層級存取權控管的影響」。

    一般來說,IAM 更新需要約 30 秒才能完全生效。政策標記階層中的變更最多可能需要 30 分鐘才能全面生效。

    我沒有權限讀取具有資料欄層級安全防護機制的資料表

    您必須具備精細讀取者角色遮罩讀取者角色,才能在不同層級 (例如機構、資料夾、專案和政策標記) 中執行這些操作。「精細讀取者」角色可授予原始資料存取權,而「經過遮蓋的讀取者」角色則可授予遮蓋資料存取權。您可以使用 IAM 疑難排解工具,在專案層級檢查這項權限。

    我在政策標記分類中設定精細的存取權控管機制,但使用者仍可查看受保護的資料

    如要排解這個問題,請確認下列詳細資料:

    • 在「政策標記分類頁面中,確認「強制執行存取權控管」切換鈕已設為「開啟」
    • 請確認查詢未使用快取的查詢結果。如果您使用 bq 指令列介面工具測試查詢,則應使用 --nouse_cache flag 停用查詢快取。例如:

      bq query --nouse_cache --use_legacy_sql=false "SELECT * EXCEPT (customer_pii) FROM my_table;"