在 BigQuery 中實作資料列層級安全防護機制的最佳做法

本文說明使用資料列層級安全性的最佳做法。

閱讀本文前,請先參閱「BigQuery 資料列層級安全防護機制簡介」和「使用資料列層級安全防護機制」,熟悉資料列層級安全防護機制。

限制使用者權限,以防範側載道攻擊

側通道攻擊是一種安全攻擊,根據從系統本身取得的資訊進行攻擊。攻擊者如果擁有比必要更廣泛的權限,就能發動側通道攻擊,並透過觀察搜尋帳單、記錄或系統訊息,取得私密資料。

為減少這類機會,BigQuery 會隱藏針對具有資料列層級安全防護機制的資料表執行的所有查詢的敏感統計資料。這些敏感統計資料包括處理的位元組數和分區數、計費的位元組數,以及查詢計畫階段。

建議管理員不要將下列權限授予只應查看經過篩選資料的使用者,以免授予敏感資料的存取權。

權限 機密資料
專案擁有者 專案擁有者只能在稽核記錄中查看已處理的位元組數和相關資料。您無法透過工作詳細資料查看帳單中繼資料。沒有特定權限或角色可授予觀眾對此帳單中繼資料的存取權。
BigQuery 資料編輯、擁有者或檢視者角色 查看查詢的錯誤訊息。
Cloud Billing 檢視者權限 查看 BigQuery 帳單。

範例

  • 在查詢設有資料列層級存取權政策的資料表時,透過重複觀察查詢時間,使用者就能推斷出資料列的值,而這些資料列可能會受到資料列層級存取權政策的保護。這類攻擊需要在分割或叢集資料欄的範圍內,重複嘗試多個值。雖然觀察或測量查詢時間時,會出現固有的雜訊,但攻擊者可以透過多次嘗試,取得可靠的估計值。如果您對這層級的保護措施有疑慮,建議您改用個別表格,將具有不同存取權限需求的資料列隔開。
  • 攻擊者可以監控超出查詢工作限制 (例如計費位元組上限或自訂成本控管) 時發生的錯誤,藉此搜尋查詢所處理的位元組。不過,這類攻擊需要大量查詢。
  • 透過重複查詢並觀察 Cloud Billing 中的 BigQuery 帳單金額,使用者就能推斷出資料列的值,而這些值可能會受到資料列層級存取權政策保護。這類攻擊需要在分割或叢集資料欄的範圍內,重複嘗試多個鍵值。如果您對這類保護措施有疑慮,建議您限制查詢的帳單資料存取權。

我們也建議管理員監控 Cloud 稽核記錄(/bigquery/docs/reference/auditlogs),找出使用列層級安全性的資料表上有無可疑活動,例如列層級存取政策的新增、修改和刪除作業是否有異常。

限制使用者權限,以限制資料竄改

擁有資料表寫入權限的使用者可以使用 bq load 指令或 BigQuery Storage Write API,將資料插入資料表。這樣一來,擁有寫入權限的使用者就能變更其他使用者的查詢結果。

建議管理員為資料表寫入權限和列層級存取權政策建立個別的 Google 群組。使用者只應看到篩選後的資料表結果,因此不應具備篩選後資料表的寫入權限。

重新建立資料列層級存取政策時,避免發生誤用

第一次在資料表上新增資料列存取權政策時,您會立即開始篩選查詢結果中的資料。移除資料表上最後一個資料列層級存取權政策時,即使您只打算重新建立資料列層級存取權政策,也可能不小心將未經過篩選的存取權授予比預期更廣大的目標對象。

建議管理員在重新建立資料表的最後一列層級存取權政策時,務必遵循下列規範:

  1. 首先使用資料表存取權控管項,移除對資料表的所有存取權。
  2. 移除所有資料列層級存取權政策。
  3. 重新建立資料列層級存取權政策。
  4. 重新啟用資料表存取權。

或者,您也可以先在資料表上建立新的資料列層級存取政策,然後刪除不再需要的舊資料列層級存取政策。

請只在機構內部使用資料列層級安全性,而非跨機構使用

請勿在各個機構之間使用資料列層級安全性功能,以免資料遭到側通道攻擊而外洩,並確保對機密資料存取權的更大控制權。

針對子查詢資料列層級存取權政策,請在機構或專案中建立及搜尋資料表。這樣一來,安全性就會提高,且 ACL 設定也更簡單,因為授權對象必須在政策中的目標和參照表上擁有 bigquery.tables.getData 權限,以及任何相關的資料欄層級安全性權限。

建議您只在機構內部安全性限制 (例如在機構/企業/公司內部共用資料) 時使用資料列層級安全性功能,而不要用於跨機構或公開安全性。

示例

您無法有效控管機構外的使用者是否有權存取資料。您可以在貴機構內控管哪些使用者可存取針對使用資料表列級存取政策的查詢所產生的帳單資訊。帳單資訊是旁路攻擊的媒介。

透過資料列層級存取權政策管理 Filtered Data Viewer 角色

建立資料列層級存取權政策時,政策中的實體會自動獲得 bigquery.filteredDataViewer 角色。您只能使用 DDL 陳述式,在存取政策中新增或移除主體。

bigquery.filteredDataViewer 角色不得透過 IAM 授予較高層級的資源,例如資料表、資料集或專案。以這種方式授予角色可讓使用者查看該範圍內「所有」資料列層級存取權政策定義的資料列,不受任何限制。雖然資料列層級存取權政策篩選條件的聯集可能不會涵蓋整個資料表,但這項做法會造成重大安全性風險,並破壞資料列層級安全性的目的。

建議您只透過資料列層級存取權政策管理 bigquery.filteredDataViewer 角色。這個方法可確保授予原則的 bigquery.filteredDataViewer 角色是隱含且正確的,並遵循每項政策定義的篩選器述元式。

篩選器對分區欄的效能影響

資料列層級存取權政策篩選器不會參與分區和叢集資料表的查詢修剪作業。

如果資料列層級存取政策命名為分區欄,查詢就無法獲得查詢裁剪的效能優勢。