排解存取控管問題

本文說明如何排解 BigQuery 中 Identity and Access Management (IAM) 權限、資料欄層級存取控管和客戶自行管理的加密金鑰 (CMEK) 的安全性問題。IAM 權限問題通常會導致 Access Denied 錯誤,如下所示:

  • Access Denied: Project PROJECT_ID: User does not have bigquery.jobs.create permission in project PROJECT_ID.
  • Access Denied: Project PROJECT_ID: User does not have bigquery.datasets.get permission on dataset DATASET.
  • User does not have permission to query table PROJECT_ID:DATASET.TABLE.
  • Access Denied: Table PROJECT_ID:DATASET.TABLE: User does not have permission to query table PROJECT_ID:DATASET.TABLE, or perhaps it does not exist.
  • Access Denied: User PRINCIPAL does not have permission to perform bigquery.tables.getData on resource 'projects/PROJECT_ID/datasets/DATASET/tables/TABLE'.

事前準備

收集問題相關資訊

排解資源存取問題的第一步,是判斷缺少的權限、存取遭拒的 IAM 主體,以及主體嘗試存取的資源。

從錯誤或工作記錄中取得資訊

如要取得主體、資源和權限的相關資訊,請查看 bq 指令列工具的輸出內容、API 回應,或 Cloud de Confiance 控制台中的 BigQuery。

舉例來說,如果您嘗試在權限不足的情況下執行查詢, Cloud de Confiance 控制台「Query results」(查詢結果) 專區的「Job information」(工作資訊) 分頁會顯示類似下方的錯誤。

「查詢結果」部分的「工作資訊」分頁顯示「存取遭拒」錯誤。

檢查錯誤,判斷主體、資源和權限。

在某些情況下,您可以直接透過錯誤訊息要求缺少的權限。詳情請參閱 IAM 說明文件中的「權限錯誤訊息」。

從 Cloud 稽核記錄取得資訊

如果錯誤訊息是一般訊息、缺少資訊,或是在背景程序中執行動作失敗,請使用 Cloud 稽核記錄的 Logs Explorer,取得錯誤相關資訊。

  1. 前往 Cloud de Confiance 控制台的「Logs Explorer」頁面。

    前往 Logs Explorer

    或者,您也可以從導覽選單中依序選擇「Monitoring」 > 「Logs Explorer」。

  2. 在 Logs Explorer 中,選取「專案記錄」做為記錄範圍。

  3. 在查詢視窗中輸入下列查詢,從 BigQuery 資料存取記錄取得權限相關錯誤:

    resource.type="bigquery_resource" AND
    logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access" AND
    protoPayload.status.message:"Access Denied" OR
    protoPayload.status.message:"Permission denied" OR
    protoPayload.status.code=7

    將 PROJECT_ID 替換為專案 ID。

  4. 在查詢結果中,展開失敗作業對應的記錄項目。

  5. 在 protoPayload 區段中,展開 authorizationInfo 陣列,然後展開 authorizationInfo 陣列中的每個節點。

    authorizationInfo 陣列會顯示 API 呼叫期間執行的每項權限檢查。

  6. 如要查看錯誤原因,請找出 granted: false 項目。granted: false 項目會顯示下列資訊:

    • permission:檢查的 IAM 權限字串。例如:bigquery.tables.getData。
    • resource:主體嘗試存取的資源完整名稱。例如:projects/myproject/datasets/mydataset/tables/mytable。
    • principalEmail (如有):protoPayload.authenticationInfo 中參照的主體,即嘗試執行動作的主體。

    protoPayload 的 authorizationInfo 區段,顯示權限、資源和 principalEmail。

使用允許政策的政策分析工具

允許政策的政策分析工具可讓您根據 IAM 允許政策,找出哪些 IAM 主體具備哪些 BigQuery 資源的哪些存取權。

收集權限錯誤的相關資訊後,您可以使用政策分析工具,瞭解主體為何缺少必要存取權。這項工具會分析所有相關政策、Google 群組成員資格,以及從上層資源 (例如專案、資料夾和組織) 繼承的權限。

如要使用政策分析工具分析允許政策,請建立分析查詢、指定分析範圍,然後執行查詢。

  1. 前往 Cloud de Confiance 控制台的「政策分析工具」頁面。

    前往政策分析工具

    或者,您也可以從導覽選單中,依序選擇「IAM & Admin」(IAM 與管理) > 「Policy Analyzer」(政策分析工具)。

  2. 按一下「建立自訂查詢」。

  3. 在「Configure your query」(設定查詢) 頁面中,輸入先前收集的資訊:

    1. 在「Select the scope」(選取範圍) 區段的「Select query scope」(選取查詢範圍) 欄位中,確認目前專案是否顯示,或按一下「Browse」(瀏覽) 選擇其他資源。

    2. 在「Set the query parameters」(設定查詢參數) 專區中,針對「Parameter 1」(參數 1) 選擇「Principal」(主體),然後在「Principal」(主體) 欄位中輸入使用者、群組或服務帳戶的電子郵件地址。

    3. 按一下「 新增參數」。

    4. 在「Parameter 2」(參數 2) 中選擇「Permission」(權限),然後在「Permission」(權限) 欄位中按一下「Select」(選取),選擇 BigQuery 權限,然後按一下「Add」(新增)。例如,選取 bigquery.tables.getData。

    5. 按一下「 新增參數」。

    6. 在「Parameter 3」(參數 3) 中,選擇「Resource」(資源),然後在「Resource」(資源) 欄位中輸入完整資源名稱。資源名稱必須包含服務前置字串,如以下範例所示:

      • BigQuery 專案: //cloudresourcemanager.googleapis.com/projects/PROJECT_ID
      • BigQuery 資料集://bigquery.googleapis.com/projects/PROJECT_ID/datasets/DATASET
      • BigQuery 資料表: //bigquery.googleapis.com/projects/PROJECT/datasets/DATASET/tables/TABLE
  4. 在「自訂查詢」窗格中,依序點選「分析」>「執行查詢」。

  5. 查看查詢結果。結果可能是下列其中一項:

    • 空白清單。如果沒有結果,代表主體不具備必要權限。您必須授予主體角色,提供正確權限。
    • 一或多個結果。如果分析工具找到允許政策,代表存在某種形式的存取權。按一下每項結果的「View Binding」(查看繫結),即可查看提供主體所屬資源存取權的角色。政策繫結會顯示存取權是透過群組成員資格或繼承授予,還是遭到 IAM 條件或 IAM 拒絕政策拒絕。

找出可授予必要權限的正確 IAM 角色

確認主體沒有足夠的存取權後,下一步是找出適當的預先定義或自訂 IAM 角色,授予必要權限。選擇角色時,應遵循最小權限原則。

如果貴組織使用自訂角色,您可以列出在專案或組織中建立的所有自訂角色,找出正確的角色。舉例來說,在 Cloud de Confiance 控制台的「Roles」(角色) 頁面中,您可以依「Type:Custom」(類型:自訂) 篩選清單,只查看自訂角色。

如要找出正確的預先定義 IAM 角色,請按照下列步驟操作。

  1. 開啟 BigQuery IAM 角色和權限頁面的「BigQuery 權限」部分。

  2. 在「Enter a permission」(輸入權限) 搜尋列中,輸入從錯誤訊息、工作記錄或稽核記錄中擷取的權限。例如:bigquery.tables.getData。

    搜尋結果會顯示所有預先定義的 BigQuery 角色,這些角色會授予該權限。

  3. 套用最小權限原則:在角色清單中,選擇可授予必要權限的最嚴格角色。舉例來說,如果您搜尋 bigquery.tables.getData,想授予查詢資料表資料的能力,則「BigQuery 資料檢視者」就是授予該權限的最低權限角色。

  4. 為該主體授予適當角色。如要瞭解如何將 IAM 角色授予 BigQuery 資源,請參閱「使用 IAM 控管資源存取權」。

未接受《BigQuery 服務條款》

錯誤字串:BigQuery Terms of Service have not been accepted

如果未接受《BigQuery 服務條款》,就會發生這個 HTTP 403 Forbidden 錯誤 (reason: termsOfServiceNotAccepted)。這個錯誤並非缺少 IAM 權限所致。建立資料集或載入資料等要求可能會傳回這項錯誤。

請按照下列步驟解決這個問題:

  1. 前往 Cloud de Confiance 控制台的「BigQuery」頁面。

    前往「BigQuery」

  2. 如果出現歡迎頁面,請選取國家/地區,勾選「Terms of Service」(服務條款) 核取方塊,然後按一下「Agree and continue」(同意並繼續)。詳情請參閱「啟用 BigQuery 沙箱」。

接受《服務條款》後,請重試要求。

排解違反政策錯誤

在 BigQuery 中收到 HTTP 403 PERMISSION_DENIED 錯誤,且錯誤原因為 policyViolation 時,表示失敗是由組織政策、資料 perimeter 或 VPC Service Controls 造成。

以下各節說明與這項錯誤原因相關的最常見錯誤訊息、原因和解決方法。

依據機構政策的規定,您無法提出要求

錯誤字串: VPC Service Controls: Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier: VPC_SERVICE_CONTROLS_UNIQUE_IDENTIFIER

診斷

您的要求來自指定 VPC Service Controls perimeter 以外的網路位址或用戶端,或違反工作區定義的輸入和輸出規則。如果查詢橫跨多項專案,就經常會發生這種情況。例如,查詢計費專案位於資料專案的安全 perimeter 之外。

解析度

  1. 找出專屬 ID。擷取錯誤訊息中的 vpcServiceControlsUniqueIdentifier。使用這個 ID 篩選 Cloud de Confiance by S3NSLogs Explorer,找出對應的 VPC Service Controls 記錄,查看詳細原因:

    protoPayload.metadata.@type="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
    protoPayload.metadata.vpcServiceControlsUniqueId="VPC_SERVICE_CONTROLS_UNIQUE_IDENTIFIER"
    

    在 protoPayload.metadata.violationReason 下方尋找 violationReason 值。找出問題後,請研究記錄項目中的其他詳細資料,並按照現有的 VPC Service Controls 疑難排解指南操作。此外,建議您使用違規分析工具。

  2. 修正跨專案計費問題。如果是跨專案查詢,請確保執行查詢的計費專案與查詢的資料位於 perimeter 內的相同 perimeter。如有需要,請使用 Cloud de Confiance 控制台專案挑選器、bq 指令列工具中的 --project_id 旗標,或 API 或用戶端程式庫要求,手動指定符合規定的計費專案。

  3. 驗證存取層級。請使用 Access Context Manager,確認用戶端網路、IP 或使用者帳戶已獲准使用。Cloud de Confiance 控制台需要特別設定輸入規則,允許使用者存取受保護的環境。

如果專案已啟用 VPC Service Controls,就無法匯出至 Google 雲端硬碟

錯誤字串: Export to Google Drive is blocked for projects with VPC-SC enabled

診斷

Google 雲端硬碟不支援 VPC Service Controls。由於 Google 雲端硬碟無法強制執行安全範圍,BigQuery 會自動停用將 API 擷取內容匯出至 Google 雲端硬碟的功能,適用於源自 VPC Service Controls 邊界內的所有要求,以防止資料遭竊。

解析度

請勿直接匯出至 Google 雲端硬碟,而是將查詢結果擷取至位於相同 VPC Service Controls perimeter 內的 Cloud Storage bucket,或將結果儲存為本機檔案。

如果專案已啟用 VPC Service Controls,Google 雲端硬碟外部資料表會遭到封鎖

錯誤字串: Google Drive external tables are blocked for projects with VPC-SC enabled

診斷

根據預設,VPC Service Controls 不會封鎖 Google 雲端硬碟外部資料表 (例如連結試算表) 的查詢。不過, Cloud de Confiance by S3NS 貴組織明確要求 Cloud de Confiance by S3NS對專案強制執行嚴格的封鎖設定,覆寫預設的允許行為,防止任何從 VPC Service Controls 範圍內傳入 Google 雲端硬碟資料的查詢,因此會出現這項錯誤。

解析度

將 Google 試算表或 Google 雲端硬碟檔案中的資料,直接匯入 VPC Service Controls 範圍內的標準 BigQuery 資料表,而非以外部聯合資料表的形式動態查詢。或者,您也可以與內部 Cloud 管理員聯絡,討論貴組織的資料匯出界限。

專案無法匯出至 Google 雲端硬碟

錯誤字串: Export to Google Drive is blocked for your project.

診斷

即使沒有 VPC Service Controls perimeter, Cloud de Confiance by S3NS 管理員也已要求對專案套用特定嚴格組織設定,拒絕所有 Google 雲端硬碟資料擷取功能。

解析度

請選擇其他擷取目的地,例如 Cloud Storage bucket 或本機檔案,或與內部 Cloud 管理員聯絡,討論貴組織的資料匯出界限。

位置違反組織政策限制

錯誤字串: LOCATION violates constraint CONSTRAINT_NAME on the resource projects/PROJECT_ID 或 LOCATION violates constraint CONSTRAINT_NAME on the resource projects/PROJECT_ID/datasets/DATASET_ID

診斷

Cloud 管理員已設定組織政策限制,明確限制可建立或分析資源的位置。這項錯誤通常會在下列情況出現:

  • 在未經授權的地理區域建立資料集 (例如受 constraints/gcp.resourceLocations 限制)。
  • 嘗試在不允許的情況下,跨外部雲端使用 BigQuery Omni (例如,遭到 constraints/bigquery.disableBQOmniAWS 或 constraints/bigquery.disableBQOmniAzure 封鎖)。

解析度

  1. 請查看錯誤訊息中提供的確切 CONSTRAINT_NAME,瞭解哪些動作遭到封鎖。
  2. 請為資料選取其他未封鎖的區域,或與Cloud de Confiance by S3NS 組織管理員合作,在資料夾或組織層級查看組織政策。詳情請參閱「建構及定義資源位置」。

排解資料欄層級存取控管問題

以下各節說明如何排解資料欄層級存取控管和 Data Catalog 政策標記的問題。

我看不到 Data Catalog 角色

如果找不到「Data Catalog Fine-Grained Reader」等角色,可能是因為您尚未在專案中啟用 Data Catalog API。如要瞭解如何啟用 Data Catalog API,請參閱「事前準備」。啟用 Data Catalog API 後,Data Catalog 角色會在幾分鐘後顯示。

我無法查看「Taxonomies」(分類) 頁面

您需要額外權限,才能在Cloud de Confiance 控制台查看「Policy tag taxonomies」(政策標記分類) 頁面。舉例來說,Data Catalog 政策標記管理員角色可以存取「Taxonomies」(分類) 頁面。

我已強制執行政策標記,但似乎沒有作用

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

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

我沒有權限讀取設有資料欄層級安全性的資料表

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

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

如要排解這個問題,請確認下列事項:

  • 在 BigQuery 安全中心的「Policy tag taxonomies」(政策標記分類) 頁面中,確認「Enforce access control」(強制執行存取控管) 切換鈕已設為「On」(啟用)。
  • 確認查詢並未使用快取查詢結果。如果您使用 bq 指令列工具測試查詢,請使用 --nouse_cache 旗標停用查詢快取。例如:

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

專案遷移注意事項

政策標記和分類會歸屬於特定 Cloud de Confiance by S3NS 組織,當專案遷移至新組織時,不會自動重新建立關聯。如果將使用政策標記進行資料欄層級存取控管的專案遷移至其他組織,會發生下列問題:

  • 在已遷移的專案中,您無法再透過 Cloud de Confiance 控制台管理政策標記。
  • 您無法將這些政策標記套用至已遷移專案中的新資料欄。
  • 現有的資料欄層級存取控管機制可能仍會顯示,但基於管理目的,原始組織中來源分類的連結已中斷。

如要解決這個問題, Cloud de Confiance 支援團隊必須手動介入,將分類與新組織重新建立關聯。如果您遷移了含有政策標記的專案,並遇到這些問題,請與 Cloud Customer Care 聯絡。

排解客戶自行管理的加密金鑰問題

下列清單說明搭配使用 Cloud Key Management Service 和客戶自行管理的加密金鑰 (CMEK) 時,常見的錯誤和建議解決方法:

錯誤:Please grant Cloud KMS CryptoKey Encrypter/Decrypter role
解決方法:與專案相關聯的 BigQuery 服務帳戶沒有足夠的 IAM 權限,無法對指定的 Cloud KMS 金鑰執行操作。如要授予必要的 IAM 權限,請按照錯誤訊息或「授予加密和解密權限」中的指示操作。
錯誤:Existing table encryption settings don't match encryption settings specified in the request
解決方法:如果目的地資料表的加密設定與要求中的加密設定不符,就可能發生這項錯誤。如要解決這個問題,請使用 TRUNCATE 寫入配置來取代資料表,或指定其他目的地資料表。
錯誤:This region is not supported
解決方法:Cloud KMS 金鑰的區域與目的地資料表的 BigQuery 資料集區域不符。如要解決這個問題,請選取與資料集所在區域相符的金鑰,或將資料載入與金鑰區域相符的資料集。
錯誤:Your administrator requires that you specify an encryption key for queries in project PROJECT_ID.
解決方法:組織政策禁止建立資源或執行查詢。如要進一步瞭解這項政策,請參閱「要求所有資源使用 CMEK」一文。
錯誤:Your administrator prevents using KMS keys from project KMS_PROJECT_ID to protect resources in project PROJECT_ID.
解決方法:組織政策禁止建立資源或執行查詢。如要進一步瞭解這項政策,請參閱「限制 BigQuery 專案的 Cloud KMS 金鑰」。

後續步驟