資料欄層級存取權控管機制簡介

BigQuery 透過資料的政策標記 (或依據類型的分類方式),對機密資料欄提供精細的存取權限。您可以使用 BigQuery 資料欄層級存取權控管功能建立政策,以便在執行查詢當下檢查使用者是否具備適當存取權。舉例來說,政策可以強制執行存取檢查,例如:

  • 你必須處於 group:high-access 狀態,才能看到包含 TYPE_SSN 的資料欄。

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

資料欄層級存取權控管工作流程

工作流程

如要在資料欄層級限制資料存取權,請按照下列步驟操作:

  1. 定義分類和政策標記。為資料建立及管理分類和政策標記。如需相關指南,請參閱「使用政策標記的最佳做法」。

  2. 將政策標記指派給 BigQuery 資料欄。在 BigQuery 中,使用結構定義註解為每個要限制存取權的資料欄指派政策標記。

  3. 對分類架構強制執行存取權控管。強制執行存取權控管後,系統會套用分類中所有政策標記定義的存取權限制。

  4. 管理政策標記的存取權。使用 Identity and Access Management (IAM) 政策,限制每個政策標記的存取權。政策會對屬於政策代碼的每個資料欄生效。

使用者在查詢時嘗試存取資料欄資料時,BigQuery 會檢查資料欄政策標記及其政策,判斷使用者是否有權存取資料。

找出需要加上標記的內容

如要判斷您擁有的私密資料類型,以及哪些資料欄需要政策標記,請考慮使用 Sensitive Data Protection,針對機構、資料夾或專案中的資料產生剖析檔。資料剖析檔包含資料表的指標和中繼資料,可協助您判斷機密和高風險資料的存放位置。Sensitive Data Protection 會在專案、資料表和資料欄層級回報這些指標。詳情請參閱 BigQuery 資料分析器

下圖顯示欄資料剖析的清單 (按一下即可放大)。如果資料欄的資料風險值偏高,可能表示該資料欄含有高度機密資料,且沒有資料欄層級的存取控管設定。或者,這些資料欄可能含有中度或高度機密資料,且可供大量使用者存取。

資料欄資料剖析

用途範例

假設某個機構需要將機密資料歸類為「高」和「中」這兩個類別。

政策標記

如要設定資料欄層級的安全防護機制,具備適當權限的資料管理員必須執行下列步驟,設定資料分類的階層

  1. 資料管理員建立名為「業務關鍵性」的分類。分類包括節點或政策標記「高」和「中」

  2. 資料管理員決定「高」節點的政策包含名為「high-tier-access」的群組存取權。

  3. 資料管理員在「高」和「中」底下,建立更多節點層級。最低層級的節點是葉節點,例如 employee_ssn 葉節點。資料管理員可以為 employee_ssn 葉節點建立不同的存取政策,也可以不建立。

  4. 資料管理員會將政策標記指派給特定資料表欄。在本範例中,資料管理員會將「高」存取權政策指派給資料表中的「employee_ssn」employee_ssn資料欄。

  5. 在控制台的「目前結構定義」頁面中,資料管理員可以查看控管特定資料欄的政策標記。在本例中,「employee_ssn」資料欄位於「High」政策標記下方,因此查看「employee_ssn」的結構定義時,主控台會在 Policy tags 欄位中顯示分類名稱和政策標記:Business criticality:High

    政策標記使用者介面

    如要瞭解如何使用控制台設定政策標記,請參閱「在資料欄上設定政策標記」。

    或者,您也可以使用 bq update 指令設定政策標記。policyTagsnames 欄位包含「高」政策標記的 ID,projects/project-id/locations/location/taxonomies/taxonomy-id/policyTags/policytag-id

    [
     ...
     {
       "name": "ssn",
       "type": "STRING",
       "mode": "REQUIRED",
       "policyTags": {
         "names": ["projects/project-id/locations/location/taxonomies/taxonomy-id/policyTags/policytag-id"]
       }
     },
     ...
    ]

    如要瞭解如何使用 bq update 指令設定政策標記,請參閱「在資料欄上設定政策標記」。

  6. 管理員對「中」政策標記執行類似步驟。

有了這項精細的存取權,您只需控管少數資料分類政策標記,就能管理多個資料欄的存取權。

如要瞭解這些步驟的詳細資訊,請參閱「使用資料欄層級存取控管機制限制存取權」。

搭配資料欄層級存取權控管使用的角色

下列角色用於 BigQuery 資料欄層級的存取權控管。

如要建立及管理分類和政策標記,使用者必須具備 Data Catalog 政策標記管理員角色。

角色/ID 權限 說明
Data Catalog 政策標記管理員 (datacatalog.categoryAdmin) datacatalog.categories.getIamPolicy
datacatalog.categories.setIamPolicy
datacatalog.taxonomies.create
datacatalog.taxonomies.delete
datacatalog.taxonomies.get
datacatalog.taxonomies.getIamPolicy
datacatalog.taxonomies.list
datacatalog.taxonomies.setIamPolicy
datacatalog.taxonomies.update
resourcemanager.projects.get
resourcemanager.projects.list

適用於專案層級。

這個角色可授予下列權限:

  • 建立、讀取、更新及刪除分類和政策標記。
  • 取得及設定政策標記的身分與存取權管理政策。

如要建立及管理資料政策,您必須具備 BigQuery 資料政策管理員、BigQuery 管理員或 BigQuery 資料擁有者角色。使用Google Cloud 控制台對分類架構強制執行存取權控管時,服務會自動為您建立資料政策。

角色/ID 權限 說明
BigQuery 資料政策管理員 (bigquerydatapolicy.admin)

BigQuery 管理員 (bigquery.admin)

BigQuery 資料擁有者 (bigquery.dataOwner)
bigquery.dataPolicies.create
bigquery.dataPolicies.delete
bigquery.dataPolicies.get
bigquery.dataPolicies.getIamPolicy
bigquery.dataPolicies.list
bigquery.dataPolicies.setIamPolicy
bigquery.dataPolicies.update

bigquery.dataPolicies.createbigquery.dataPolicies.list 權限適用於專案層級。其他權限則適用於資料政策層級。

這個角色可授予下列權限:

  • 建立、讀取、更新及刪除資料政策。
  • 取得及設定資料政策的身分與存取權管理政策。
您也需要 datacatalog.taxonomies.get 權限,可透過多個資料目錄預先定義角色取得。

使用者必須具備 Data Catalog 精細讀取者角色,才能存取受保護資料欄中的資料。

角色/ID 權限 說明
精細讀取者/datacatalog.categoryFineGrainedReader datacatalog.categories.fineGrainedGet

適用於政策標記層級。

這個角色可授予存取權,查看受政策標記限制的資料欄內容。

如要進一步瞭解 Data Catalog 角色,請參閱「Data Catalog Identity and Access Management (IAM)」。如要進一步瞭解 BigQuery 角色,請參閱使用 IAM 控管存取權

寫入作業的影響

如要讀取受資料欄層級存取控制保護的資料欄,使用者一律須透過資料欄政策標記的細部讀取存取權,取得讀取權限。

適用情況:

  • 資料表,包括萬用字元資料表
  • 檢視畫面
  • 複製資料表

如要將資料寫入受欄級存取權控管保護的欄,使用者必須符合下列條件 (視寫入類型而定):

如果寫入作業是插入,則不需要精細的讀取權限。 不過,除非使用者具有細部讀取權限,否則無法讀取插入的資料。

如果使用者執行 INSERT SELECT 陳述式,則必須在查詢的資料表上具備精細讀取者角色

如果寫入作業是更新刪除合併,使用者必須對讀取資料欄具有精細的讀取權限,才能執行作業。

使用者可以從本機檔案或 Cloud Storage 載入資料。將資料載入資料表時,BigQuery 不會檢查目的地資料表資料欄的細部讀取者權限。這是因為載入資料不需要從目的地資料表讀取內容。同樣地,使用者可以從串流載入資料,因為串流載入不會檢查政策標記。除非使用者具有細部讀取權限,否則無法讀取從串流載入的資料。

詳情請參閱「使用資料欄層級存取權控管功能對寫入作業造成的影響」。

查詢資料表

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

如果使用者有資料集存取權,但沒有 Data Catalog 細部讀取者角色,就無法存取資料欄資料。如果這類使用者執行 SELECT *,系統會顯示錯誤訊息,列出使用者無法存取的資料欄。如要解決這項錯誤,請採取下列任一做法:

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

    SELECT * EXCEPT (ssn) FROM ...

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

  • 請 Data Catalog 管理員將使用者新增為相關資料類別的 Data Catalog 精細讀取者。錯誤訊息會提供使用者需要存取權的政策代碼完整名稱。

查詢檢視畫面

資料欄層級安全性對檢視區塊的影響,與檢視區塊是否為授權檢視區塊無關。在這兩種情況下,系統都會透明地強制執行資料欄層級安全性。

授權檢視表是指下列其中一項:

  • 明確授權可存取資料集內資料表的檢視表。
  • 檢視表隱含授權可存取資料集中的資料表,因為檢視表位於授權資料集中。

詳情請參閱「授權檢視區塊」和「授權資料集」。

如果檢視區塊不是授權檢視區塊:

如果使用者具備檢視表基礎資料表和資料集的 IAM 存取權,以及檢視表基礎資料表的資料欄層級存取權,就能查詢檢視表中的資料欄。否則使用者無法查詢檢視區塊中的資料欄。

如果檢視區塊是已授權檢視區塊:

只有檢視表基礎資料表中的資料欄層級安全防護機制,才能控管存取權。系統不會使用資料表層級和資料集層級的 IAM 政策 (如有) 檢查存取權。如果使用者有權存取授權檢視表基礎資料表所用的政策標記,就能查詢授權檢視表中的資料欄。

下圖顯示系統如何評估檢視區塊的存取權。

存取檢視畫面

時間旅行和具體化檢視表 (含 max_staleness) 的影響

BigQuery 可讓您查詢先前狀態的資料表。這項功能可讓您查詢先前時間點的資料列。您也可以從特定時間點還原資料表。

在舊版 SQL 中,您可以在資料表名稱上使用時間修飾符,查詢歷來資料。在 GoogleSQL 中,您可以使用資料表上的 FOR SYSTEM_TIME AS OF 子句查詢歷史資料。

如果具體化檢視區塊設定 max_staleness 選項,系統會從陳舊間隔內傳回歷來資料。這種行為與檢視區塊上次重新整理時使用 FOR SYSTEM_TIME AS OF 的查詢類似,因為這可讓 BigQuery 查詢已刪除或更新的記錄。假設您在時間 t 查詢資料表的歷來資料。請按照下列步驟操作:

  • 如果時間 t 的結構定義與資料表的目前結構定義相同或為其子集,BigQuery 會根據目前資料表的最新資料欄層級安全性進行檢查。如果使用者獲准讀取目前的資料欄,就能查詢這些資料欄的歷史資料。如要刪除或遮蓋受資料欄層級安全防護機制保護的資料欄中的機密資料,必須等到自清除機密資料起,設定的時間旅行視窗經過一段時間後,才能安全地放寬資料欄層級安全防護機制。

  • 如果時間 t 的結構定義與查詢中資料欄的目前結構定義不同,查詢就會失敗。

位置注意事項

選擇分類位置時,請考量下列限制。

政策標記

分類是區域資源,例如 BigQuery 資料集和資料表。建立分類時,請指定分類的地區或位置

您可以在所有提供 BigQuery 的區域中,建立分類並將政策標記套用至資料表。不過,如要將分類中的政策標記套用至資料表欄,分類和資料表必須位於同一個區域位置。

雖然您無法將政策標記套用至位於不同位置的資料表欄,但可以明確複製分類架構,將其複製到其他位置。

如要在多個區域位置使用相同的分類和政策標記,請參閱「跨地點管理政策標記」,進一步瞭解如何複製分類。

組織

您無法跨機構使用參照。資料表和要套用至資料欄的任何政策標記,都必須位於同一個機構。

限制

  • 如果使用特定 BigQuery 版本建立的預留項目,可能無法使用這項功能。如要進一步瞭解各版本啟用的功能,請參閱「BigQuery 版本簡介」。

  • BigQuery 僅支援 BigLake 資料表BigQuery 資料表BigQuery Omni 資料表的資料欄層級存取權控管。

  • 如果覆寫目的地資料表,系統會從資料表移除所有現有的政策標記,除非您使用 --destination_schema 旗標指定含有政策標記的結構定義。以下範例說明如何使用 --destination_schema

    bq query --destination_table mydataset.mytable2 \
      --use_legacy_sql=false --destination_schema=schema.json \
      'SELECT * FROM mydataset.mytable1'
    

    結構定義異動與查詢執行作業是分開進行。如果您指定 --destination_table 旗標,將查詢結果寫入資料表,且查詢隨後引發例外狀況,則系統可能會略過任何結構定義變更。如果發生這種情況,請檢查目的地資料表結構定義,並視需要手動更新

  • 一個資料欄只能有一個政策標記。

  • 表格最多可有 1,000 個不重複的政策標記。

  • 啟用資料欄層級存取權控管機制後,就無法使用舊版 SQL。如果目標資料表有任何政策標記,系統會拒絕所有舊版 SQL 查詢。

  • 從根節點到最低層級的子標記,政策標記階層最多只能有五層,如下方螢幕截圖所示:

    政策標記深度。

  • 機構內所有專案的分類名稱不得重複。

  • 如果已啟用資料欄或資料列層級的存取權控管,就無法跨區域複製資料表。如果來源資料表有任何政策標記,系統會拒絕跨區域複製資料表。

定價

如要進行資料欄層級的存取權控管,必須同時使用 BigQuery 和 Data Catalog。如要瞭解這些產品的價格資訊,請參閱下列主題:

稽核記錄

讀取含有政策標記的資料表資料時,我們會將參照的政策標記儲存在 Cloud Logging 中。不過,政策標記檢查與觸發檢查的查詢無關。

稽核人員可透過 Cloud Logging 瞭解哪些使用者有權存取哪些類別的私密資料。詳情請參閱「稽核政策標記」。

如要進一步瞭解 BigQuery 中的記錄,請參閱「BigQuery 監控簡介」。

如要進一步瞭解記錄檔,請參閱 Cloud Logging。 Google Cloud

後續步驟