BigQuery 資料列層級安全防護的最佳做法
本文將說明使用資料列層級安全性的最佳做法。
閱讀本文前,請先參閱「BigQuery 資料列層級安全防護機制簡介」和「使用資料列層級安全防護機制」,瞭解資料列層級安全防護機制。
限制使用者權限,防範側通道攻擊
側通道攻擊是一種安全攻擊,根據從系統本身取得的資訊發動。如果攻擊者擁有的權限超出必要範圍,就能發動旁路攻擊,並透過觀察或搜尋帳單、記錄或系統訊息,取得私密資料。
為減少這類機會,BigQuery 會隱藏針對具有資料列層級安全防護機制的資料表進行的所有查詢,當中包含的敏感統計資料。這些敏感統計資料包括處理的位元組數和分割區數、計費的位元組數,以及查詢計畫階段。
建議管理員不要將下列權限授予只應查看篩選後資料的使用者,以免他們存取敏感資料。
| 權限 | 機密資料 |
|---|---|
| 專案擁有者 | 專案擁有者只能在稽核記錄中查看處理的位元組數和相關資料。您無法從工作詳細資料中查看帳單中繼資料。沒有特定權限或角色可授予檢視者存取這項帳單中繼資料的權限。 |
| BigQuery 資料編輯者、擁有者或檢視者角色 | 查看查詢的錯誤訊息。 |
| Cloud Billing 檢視者權限 | 查看 BigQuery 帳單。 |
範例
- 透過重複觀察查詢資料表時的查詢時間,使用者可以推斷出受列層級存取政策保護的資料列值。這類攻擊需要針對分割或叢集資料欄中的一系列鍵值,進行多次重複嘗試。雖然觀察或測量查詢時間時會出現固有雜訊,但攻擊者只要重複嘗試,就能取得可靠的估算值。如果對這個保護層級有疑慮,建議您改用不同的資料表,隔離具有不同存取權控管規定的資料列。
- 攻擊者可以監控查詢工作超出限制 (例如計費位元組上限或自訂成本控制項) 時發生的錯誤,搜尋查詢處理的位元組。但這類攻擊需要大量查詢。
- 透過重複查詢並觀察 Cloud Billing 中的 BigQuery 帳單金額,使用者可以推斷出受資料列層級存取政策保護的資料列值。這類攻擊需要針對分割或叢集資料欄中的一系列鍵值,重複嘗試多次。如果您對這類保護措施很敏感,建議限制查詢的帳單資料存取權。
此外,我們也建議管理員監控 Cloud 稽核記錄(/bigquery/docs/reference/auditlogs),查看含有資料列層級安全性的資料表是否有可疑活動,例如資料列層級存取權政策是否出現非預期的新增、修改和刪除作業。
限制使用者權限,避免資料遭到竄改
具備資料表寫入權限的使用者可以透過 bq load 指令或 BigQuery Storage Write API,將資料插入資料表。這可能會導致具有寫入權限的使用者變更其他使用者的查詢結果。
建議管理員為資料表寫入存取權和列層級存取政策,分別建立 Google 群組。如果使用者只能查看經過篩選的表格結果,就不應具備該表格的寫入權限。
重新建立資料列層級存取政策時,避免發生非預期的存取行為
首次在資料表上新增資料列存取權政策時,系統會立即開始篩選查詢結果中的資料。移除資料表的最後一項資料列層級存取權政策時,即使您只打算重新建立資料列層級存取權政策,也可能會不慎授予未經過濾的存取權給超出預期的對象。
建議管理員按照下列準則,在資料表上重新建立最後一個資料列層級存取權政策時,特別留意:
- 首先,使用資料表存取權控制項移除資料表的所有存取權。
- 移除所有資料列層級的存取權政策。
- 重新建立資料列層級存取政策。
- 重新啟用資料表的存取權。
或者,您也可以先在資料表上建立新的資料列層級存取權政策, 然後刪除不再需要的舊政策。
僅在機構內使用資料列層級安全性,而非跨機構使用
請勿跨機構使用資料列層級安全性功能,以免透過旁路攻擊造成資料外洩,並確保您對機密資料的存取權有更全面的掌控權。
如果是子查詢資料列層級存取權政策,請在機構或專案中建立及搜尋資料表。這樣一來,受讓人必須在政策中的目標和參照資料表上擁有 bigquery.tables.getData 權限,以及任何相關的資料欄層級安全性權限,因此可提升安全性並簡化 ACL 設定。
我們建議您只在機構內的安全限制 (例如在機構/企業/公司內共用資料) 使用資料列層級安全功能,而非用於跨機構或公開安全。
範例
在貴機構外部,您對資料存取權的控管程度較低。 在貴機構中,您可以控管哪些使用者有權存取資料表查詢的帳單資訊,這些資料表設有資料列層級的存取權政策。帳單資訊是旁路攻擊的媒介。
透過資料列層級存取權政策管理 Filtered Data Viewer 角色
您建立資料列層級存取權政策時,系統會自動將 bigquery.filteredDataViewer 角色授予政策中的主體。您只能使用 DDL 陳述式,在存取政策中新增或移除主體。
bigquery.filteredDataViewer 角色不得透過 IAM 授予較高層級的資源,例如資料表、資料集或專案。以這種方式授予角色後,使用者就能查看該範圍內所有資料列層級存取權政策定義的資料列,不受預期限制影響。雖然資料列層級存取權政策篩選條件的聯集可能不會涵蓋整個資料表,但這種做法會造成重大安全風險,並破壞資料列層級安全性的目的。
建議您只透過資料列層級存取權政策管理 bigquery.filteredDataViewer 角色。這個方法可確保主體隱含且正確地獲得 bigquery.filteredDataViewer 角色,並遵守各項政策定義的篩選條件述詞。
篩選分區資料欄對效能的影響
資料列層級存取權政策篩選器不會參與分區和叢集資料表的查詢修剪作業。
如果資料列層級存取權政策指定了分區資料欄,查詢就無法享有查詢修剪的效能優勢。