透過資料欄層級存取權控管機制限制存取權
本頁說明如何使用 BigQuery 資料欄層級存取權控管機制,限制存取資料欄層級的 BigQuery 資料。如需資料欄層級存取權控管的一般資訊,請參閱「BigQuery 資料欄層級存取權控管簡介」。
本頁的說明會同時使用 BigQuery 和 Data Catalog。
如要為資料欄設定政策標記,您必須更新資料表結構定義。您可以使用 Google Cloud 控制台、bq 指令列工具和 BigQuery API,為資料欄設定政策代碼。此外,您也可以使用下列技巧,在一個作業中建立資料表、指定結構定義和指定政策標記:
- bq 指令列工具的
bq mk
和bq load
指令。 tables.insert
API 方法。- Google Cloud 控制台中的「建立資料表」頁面。如果您使用Google Cloud 控制台,新增或編輯結構定義時,必須選取「以文字形式編輯」。
如要強化資料欄層級的存取權控管,您可以選擇使用動態資料遮蓋。資料遮蓋功能可將資料欄的實際值替換為空值、預設值或雜湊內容,藉此遮蓋機密資料。
事前準備
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Data Catalog and BigQuery Data Policy APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Data Catalog and BigQuery Data Policy APIs.
- 新專案會自動啟用 BigQuery,但您可能需要在現有專案中啟用這項服務。
Enable the BigQuery API.
- 管理政策代碼的使用者或服務帳戶必須具備 Data Catalog 政策代碼管理員角色。政策標記管理員角色可管理分類和政策標記,並授予或移除與政策標記相關聯的 IAM 角色。
- 如果使用者或服務帳戶強制執行存取權控管,就必須具備 BigQuery 管理員或 BigQuery 資料擁有者角色,才能進行資料欄層級存取權控管。BigQuery 角色可以管理資料政策,這些政策用於對分類強制執行存取權控管。
- 如要在Google Cloud 控制台中查看機構內所有專案的分類和政策標記,使用者必須具備機構檢視者角色。否則控制台只會顯示與所選專案相關聯的分類和政策標籤。
- 如果使用者或服務帳戶查詢的資料受到欄級存取權控管保護,必須具備 Data Catalog Fine-Grained Reader 角色,才能存取該資料。
前往 Google Cloud 控制台的「IAM」頁面。
如果清單中列出要授予角色的使用者電子郵件地址,請選取該電子郵件地址,然後按一下「編輯」
。「編輯存取權」窗格隨即開啟。按一下「新增其他角色」。如果清單中沒有使用者電子郵件地址,請按一下「新增」
,然後在「New principals」(新的主體) 方塊中輸入電子郵件地址。按一下「Select a role」(選取角色) 下拉式清單。
在「依產品或服務」下方,按一下「Data Catalog」。在「角色」中,按一下「政策標記管理員」。
按一下 [儲存]。
前往 Google Cloud 控制台的「IAM」頁面。
如果清單中列出要授予角色的使用者電子郵件地址,請選取該地址,然後按一下「編輯」
。 然後按一下「新增其他角色」。如果清單中沒有使用者電子郵件地址,請按一下「新增」
,然後在「New principals」(新的主體) 方塊中輸入電子郵件地址。按一下「Select a role」(選取角色) 下拉式清單。
按一下「BigQuery」,然後按一下「BigQuery 資料政策管理員」、「BigQuery 管理員」或「BigQuery 資料擁有者」。
按一下 [儲存]。
- 建立政策標記分類。
- 將主體與政策標記建立關聯,並授予主體「Data Catalog 精細讀取者」角色。
- 將政策標記與 BigQuery 資料表欄建立關聯。
- 對含有政策標記的分類強制執行存取權控管。
- 在Google Cloud 控制台中開啟「Policy tag taxonomies」(政策標記分類) 頁面。
- 按一下「建立分類」。
在「New taxonomy」(新增分類) 頁面中:
- 在「分類名稱」部分,輸入要建立的分類名稱。
- 在「說明」中輸入說明。
- 如有需要,請變更「Project」下方列出的專案。
- 如有需要,請變更「位置」下方列出的位置。
- 在「政策標記」下方,輸入政策標記名稱和說明。
- 如要為政策標記新增子項政策標記,請按一下「新增子項標記」。
- 如要在與其他政策標記相同的層級新增政策標記,請點選「+ 新增政策標記」。
- 視需要繼續為分類新增政策標記和子項政策標記。
- 為階層建立完政策標記後,請按一下「建立」。
- 呼叫
taxonomies.create
建立分類。 - 呼叫
taxonomies.policytag.create
建立政策標記。 在 Google Cloud 控制台中開啟 BigQuery 頁面。
在 BigQuery 探索器中,找出並選取要更新的資料表。系統會開啟該資料表的結構定義。
點選「編輯結構定義」。
在「目前的結構定義」畫面上,選取目標資料欄,然後按一下「新增政策標記」。
在「新增政策標記」畫面中,找出並選取要套用至資料欄的政策標記。
按一下「選取」。畫面應會出現如下所示的內容:
按一下 [儲存]。
將結構定義寫入本機檔案。
bq show --schema --format=prettyjson \ project-id:dataset.table > schema.json
其中:
- project-id 是您的專案 ID。
- dataset 是含有您要更新資料表的資料集名稱。
- table 是您要更新之資料表的名稱。
修改 schema.json,為資料欄設定政策標記。如要取得
policyTags
的names
欄位值,請使用政策標記資源名稱。[ ... { "name": "ssn", "type": "STRING", "mode": "REQUIRED", "policyTags": { "names": ["projects/project-id/locations/location/taxonomies/taxonomy-id/policyTags/policytag-id"] } }, ... ]
更新結構定義。
bq update \ project-id:dataset.table schema.json
在Google Cloud 控制台中開啟「Policy tag taxonomies」(政策標記分類) 頁面。
按一下要強制執行資料欄層級存取權控管機制的分類。
如果「強制執行存取控管」尚未開啟,請點選「強制執行存取控管」來啟用。
在Google Cloud 控制台中開啟「Policy tag taxonomies」(政策標記分類) 頁面。
按一下要查看政策標記的分類。「分類」頁面會顯示分類中的政策標記。
在Google Cloud 控制台中開啟「Policy tag taxonomies」(政策標記分類) 頁面。
按一下包含相關政策標記的分類名稱。
選取一或多個政策標記。
如果資訊面板已隱藏,請按一下「顯示資訊面板」。
在「資訊面板」中,您可以查看所選政策標記的角色和主體。
查看政策標記,找出含有該政策標記的分類。
找出要複製資源名稱的政策標記。
按一下「複製政策標記資源名稱」圖示。
擷取結構定義並儲存至本機檔案。
bq show --schema --format=prettyjson \ project-id:dataset.table > schema.json
其中:
- project-id 是您的專案 ID。
- dataset 是含有您要更新資料表的資料集名稱。
- table 是您要更新之資料表的名稱。
修改 schema.json,從資料欄中清除政策標記。
[ ... { "name": "ssn", "type": "STRING", "mode": "REQUIRED", "policyTags": { "names": [] } }, ... ]
更新結構定義。
bq update \ project-id:dataset.table schema.json
- 在Google Cloud 控制台中開啟「Policy tag taxonomies」(政策標記分類) 頁面。
- 按一下含有要刪除標記的分類名稱。
- 按一下 [編輯]。
- 按一下要刪除的政策標記旁邊的 。
- 按一下 [儲存]。
- 按一下「確認」。
- 在Google Cloud 控制台中開啟「Policy tag taxonomies」(政策標記分類) 頁面。
- 按一下含有要刪除標記的分類名稱。
- 按一下「刪除政策標記分類」。
- 輸入分類名稱,然後按一下「刪除」。
修改查詢,排除使用者無法存取的資料欄。舉例來說,如果使用者無法存取「
ssn
」欄,但可以存取其餘欄,則可執行下列查詢:SELECT * EXCEPT (ssn) FROM ...
在上述範例中,
EXCEPT
子句會排除ssn
資料欄。請 Data Catalog 管理員將使用者新增為相關資料類別的 Data Catalog 精細讀取者。錯誤訊息會提供使用者需要存取權的政策代碼完整名稱。
- 在「政策標記分類」頁面,確認「強制執行存取權控管」切換鈕處於「開啟」位置。
請確認查詢未使用快取查詢結果。 如果您使用
bq
指令列介面工具測試查詢,則應使用--nouse_cache flag
停用查詢快取。例如:bq query --nouse_cache --use_legacy_sql=false "SELECT * EXCEPT (customer_pii) FROM my_table;"
角色和權限
使用者和服務帳戶有多種與政策代碼相關的角色。
如要進一步瞭解所有與政策標記相關的角色,請參閱搭配資料欄層級存取權控管使用的角色。
Data Catalog 政策標記管理員角色
具備 Data Catalog 政策標記管理員角色的使用者可以建立及管理資料政策標記。
如要授予政策代碼管理員角色,您必須具備要授予角色的專案 resourcemanager.projects.setIamPolicy
權限。如果您沒有 resourcemanager.projects.setIamPolicy
權限,請要求專案擁有者授予您權限,或為您執行下列步驟。
BigQuery 資料政策管理員、BigQuery 管理員和 BigQuery 資料擁有者角色
BigQuery 資料政策管理員、BigQuery 管理員和 BigQuery 資料擁有者角色可以管理資料政策。
如要授予這兩個角色,您必須具備要授予角色的專案的 resourcemanager.projects.setIamPolicy
權限。如果您沒有 resourcemanager.projects.setIamPolicy
權限,請要求專案擁有者授予您權限,或為您執行下列步驟。
機構檢視者角色
機構檢視者角色可讓使用者查看機構資源的詳細資料。如要授予這項角色,您必須具備機構的 resourcemanager.organizations.setIamPolicy
權限。
Data Catalog 精細讀取者角色
如要存取受資料欄層級存取權控管保護的資料,使用者必須具備 Data Catalog 精細讀取者角色,或是任何獲授 datacatalog.categories.fineGrainedGet
權限的其他角色。設定政策代碼時,系統會將這個角色指派給主體。
如要授予使用者政策標記的精細讀取者角色,您必須具備含有該政策標記分類的專案 datacatalog.taxonomies.setIamPolicy
權限。如果您沒有 datacatalog.taxonomies.setIamPolicy
權限,請要求專案擁有者授予您權限,或代您執行動作。
如需操作說明,請參閱設定政策標記的權限。
設定資料欄層級存取權控管
如要設定資料欄層級存取權控管,請完成下列工作:
可建立分類
建立分類架構的使用者或服務帳戶必須獲派 Data Catalog 政策代碼管理員角色。
主控台
API
如要使用現有分類,請呼叫
taxonomies.import
,取代下列程序的前兩個步驟。
設定政策標記的權限
建立分類架構的使用者或服務帳戶必須獲派 Data Catalog 政策代碼管理員角色。
主控台
API
呼叫
taxonomies.policytag.setIamPolicy
將主體指派給適當的角色,授予政策標記的存取權。
在資料欄上設定政策標記
設定政策標記的使用者或服務帳戶必須具備 datacatalog.taxonomies.get
和 bigquery.tables.setCategory
權限。datacatalog.taxonomies.get
包含在 Data Catalog 政策標記管理員和專案檢視者角色中。bigquery.tables.setCategory
包含在 BigQuery 管理員 (roles/bigquery.admin
) 和 BigQuery 資料擁有者 (roles/bigquery.dataOwner
) 角色中。
如要在Google Cloud console 中查看機構內所有專案的分類和政策標記,使用者必須具備 resourcemanager.organizations.get
權限,而這項權限包含在機構檢視者角色中。
主控台
使用Google Cloud 控制台修改結構定義,設定政策標記。
bq
API
如為現有資料表,請呼叫 tables.patch
;如為新資料表,請呼叫 tables.insert
。使用您傳入的 Table
物件的 schema
屬性,在結構定義中設定政策標記。請參閱指令列範例結構定義,瞭解如何設定政策標記。
處理現有資料表時,建議使用 tables.patch
方法,因為 tables.update
方法會取代整個資料表資源。
在資料欄上設定政策標記的其他方式
您也可以在下列情況設定政策標記:
如需一般結構定義資訊,請參閱「指定結構定義」。
強制執行存取控管
請按照這些操作說明開啟或關閉存取權控管強制執行功能。
如要強制執行存取權控管,必須建立資料政策。如果您使用Google Cloud 控制台強制執行存取權控管,系統會為您完成這項作業。如要使用 BigQuery Data Policy API 強制執行存取權控管,您必須明確建立資料政策。
強制執行存取權控管的使用者或服務帳戶必須具備 BigQuery 管理員角色或 BigQuery 資料擁有者角色。他們也必須具備 Data Catalog 管理員角色或 Data Catalog 檢視者角色。
主控台
如要強制執行存取權控管,請按照下列步驟操作:
如要停止強制執行存取權控管 (如果已啟用),請點選「強制執行存取權控管」切換控制項。
如果分類中的任何政策標記有相關聯的資料政策,您必須先刪除分類中的所有資料政策,才能停止強制執行存取權控管。如果您使用 BigQuery Data Policy API 刪除資料政策,則必須刪除所有具有 dataPolicyType
的資料政策。DATA_MASKING_POLICY
詳情請參閱「刪除資料政策」。
API
如要強制執行存取權控管,請呼叫 create
,並傳遞 DataPolicy
資源,其中 dataPolicyType
欄位設為 COLUMN_LEVEL_SECURITY_POLICY
。
如要停止強制執行存取權控管機制 (如果已啟用),請刪除與分類相關聯的資料政策。如要執行這項操作,請呼叫該資料政策的 delete
方法。
如果分類中的任何政策標記有相關聯的資料政策,您必須先刪除分類中的所有資料政策,才能停止強制執行存取控管。詳情請參閱「刪除資料政策」。
使用政策標記
您可以透過這個專區查看、修改及刪除政策代碼。
查看政策標記
如要查看您為分類建立的政策標記,請按照下列步驟操作:
在結構定義中查看政策標記
檢查資料表結構定義時,您可以查看套用至資料表的政策標記。您可以使用 Google Cloud 控制台、bq 指令列工具、BigQuery API 和用戶端程式庫查看結構定義。如要瞭解如何查看結構定義,請參閱取得資料表資訊。
查看政策標記的權限
更新政策標記的權限
建立分類架構的使用者或服務帳戶必須獲派 Data Catalog 政策代碼管理員角色。
主控台
API
呼叫
taxonomies.policytag.setIamPolicy
將主體指派給適當的角色,授予政策標記的存取權。
擷取政策標記資源名稱
將政策標記套用至資料欄時,您需要政策標記資源名稱。
如要擷取政策標記資源名稱,請按照下列步驟操作:
清除政策標記
更新資料表結構定義,從資料欄中清除政策標記。您可以使用Google Cloud console、bq 指令列工具和 BigQuery API 方法,從資料欄中清除政策標記。
主控台
在「Current schema」(目前結構定義) 頁面的「Policy tags」(政策標記) 下方,按一下「X」。
bq
API
呼叫 tables.patch
並使用 schema
屬性,清除結構定義中的政策標記。請參閱指令列範例結構定義,瞭解如何清除政策標記。
由於 tables.update
方法會取代整個資料表資源,因此建議使用 tables.patch
方法。
刪除政策標記
您可以刪除分類中的一或多個政策標記,也可以刪除分類和其中包含的所有政策標記。刪除政策標記後,系統會自動移除政策標記與其套用欄之間的關聯。
刪除與資料政策相關聯的政策標記時,系統最多可能需要 30 分鐘才能一併刪除資料政策。如要立即刪除資料政策,可以直接刪除。
如要刪除分類中的一或多個政策標記,請按照下列步驟操作:
如要刪除整個分類,請按照下列步驟操作:
使用資料欄層級存取權控管機制查詢資料
如果使用者有資料集存取權,且具備 Data Catalog 細部讀取者角色,即可存取資料欄資料。使用者照常執行查詢。
如果使用者有資料集存取權,但沒有 Data Catalog 細部讀取者角色,就無法存取資料欄資料。如果這類使用者執行 SELECT *
,系統會顯示錯誤訊息,列出使用者無法存取的資料欄。如要解決這項錯誤,請採取下列任一做法:
常見問題
BigQuery 資料欄層級安全防護機制是否適用於檢視區塊?
可以。檢視表衍生自基礎資料表。透過檢視畫面存取受保護的資料欄時,系統會套用資料表上相同的資料欄層級存取權控管。
BigQuery 中有兩種檢視表:邏輯檢視表和授權檢視表。這兩種檢視畫面都衍生自來源資料表,且都與資料表的資料欄層級存取控管機制一致。
詳情請參閱「授權檢視表」。
資料欄層級存取權控管機制是否適用於 STRUCT
或 RECORD
資料欄?
可以。您只能將政策標記套用至葉節點欄位,且只有這些欄位會受到保護。
我可以同時使用舊版 SQL 和 GoogleSQL 嗎?
您可以使用 GoogleSQL 查詢受欄層級存取權控管保護的資料表。
如果目標資料表有任何政策標記,系統會拒絕所有舊版 SQL 查詢。
查詢會記錄在 Cloud Logging 中嗎?
系統會在 Logging 中記錄政策標記檢查。詳情請參閱稽核記錄,瞭解如何控管資料欄層級的存取權。
複製資料表時,是否會受到資料欄層級存取權控管機制影響?
可以。如果沒有存取權,就無法複製欄。
下列作業會驗證資料欄層級權限。
將資料複製到新表格時,系統會自動傳播政策標記嗎?
在大多數情況下,不會。如果您將查詢結果複製到新資料表,系統不會自動為新資料表指派政策標記。因此新資料表沒有資料欄層級存取權控管機制。將資料匯出至 Cloud Storage 時也是如此。
但如果您使用資料表複製工作,則不在此限。由於資料表複製作業不會套用任何資料轉換,因此政策標記會自動傳播至目標資料表。這項例外狀況不適用於跨區域資料表複製作業,因為這類作業不支援複製政策標記。
資料欄層級存取控管機制是否與虛擬私有雲相容?
可以,資料欄層級存取權控管機制和 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 疑難排解工具,在專案層級檢查這項權限。
我在政策標記分類中設定了精細的存取權控管機制,但使用者仍可查看受保護的資料
如要排解這個問題,請確認下列詳細資料: