排解 BigQuery 中的 IAM 權限問題
本文說明如何排解 BigQuery 中身分與存取權管理 (IAM) 權限的問題。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'.
事前準備
- 如要排解主體存取 BigQuery 資源的問題,請確認您具備必要 IAM 權限。
收集問題相關資訊
如要排解資源存取權問題,第一步是找出缺少的權限、遭拒存取權的 IAM 主體,以及主體嘗試存取的資源。
從錯誤或工作記錄取得資訊
如要取得主體、資源和權限的相關資訊,請檢查 bq 指令列工具的輸出內容、API 回應或 Google Cloud 控制台中的 BigQuery。
舉例來說,如果您嘗試執行權限不足的查詢, Google Cloud 控制台的「Query results」(查詢結果) 專區中,「Job information」(工作資訊) 分頁會顯示類似以下的錯誤訊息。
檢查錯誤,判斷主體、資源和權限。
在某些情況下,您可以直接從錯誤訊息要求缺少的權限。詳情請參閱 IAM 說明文件中的「排解權限錯誤訊息」。
從 Cloud 稽核記錄取得資訊
如果錯誤訊息是通用訊息、缺少資訊,或動作在背景程序中失敗,請使用 Cloud 稽核記錄記錄瀏覽器取得錯誤相關資訊。
前往 Google Cloud 控制台的「Logs Explorer」頁面。
或者,從導覽選單中選擇「監控」>「記錄檔探索工具」。
在記錄檢視器中,選擇「專案記錄」做為記錄範圍。
在查詢視窗中輸入下列查詢,從 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。
在查詢結果中,展開與失敗作業對應的記錄項目。
在
protoPayload
區段中,展開authorizationInfo
陣列,然後展開authorizationInfo
陣列中的每個節點。authorizationInfo
陣列會顯示 API 呼叫期間執行的每項權限檢查。如要查看錯誤原因,請尋找
granted: false
項目。「granted: false
」項目會顯示下列資訊:permission
:已檢查的 IAM 權限字串。例如:bigquery.tables.getData
。resource
:主體嘗試存取的資源完整名稱。例如:projects/myproject/datasets/mydataset/tables/mytable
。principalEmail
(如有):在「參照」protoPayload.authenticationInfo
中,這是嘗試執行動作的主體。
使用 Policy Analyzer 檢查允許政策
您可以使用允許政策的政策分析工具,根據 IAM 允許政策,瞭解哪些 IAM 主體具備哪些 BigQuery 資源的存取權。
收集權限錯誤的相關資訊後,您可以使用政策分析工具,瞭解主體缺少必要存取權的原因。這項工具會分析所有相關政策、Google 群組成員資格,以及專案、資料夾和機構等父項資源的繼承項目。
如要使用 Policy Analyzer 進行允許政策分析,請建立分析查詢、指定分析範圍,然後執行查詢。
前往 Google Cloud 控制台的「Policy Analyzer」頁面。
或者,從導覽選單中依序選擇「IAM 與管理」>「政策分析器」。
按一下「建立自訂查詢」。
在「設定查詢」頁面中,輸入先前收集的資訊:
在「選取範圍」部分,確認「選取查詢範圍」欄位中顯示的是目前專案,或按一下「瀏覽」選擇其他資源。
在「設定查詢參數」部分,為「參數 1」選擇「主體」,然後在「主體」欄位中輸入使用者、群組或服務帳戶的電子郵件地址。
按一下
「新增參數」。針對「Parameter 2」(參數 2),選擇「Permission」(權限),然後在「Permission」(權限)欄位中,依序點選「Select」(選取)、選擇 BigQuery 權限,以及點選「Add」(新增)。例如選取
bigquery.tables.getData
。按一下
「新增參數」。針對「參數 3」,選擇「資源」,並在「資源」欄位中輸入完整合格的資源名稱。資源名稱必須包含服務前置字串,如以下範例所示:
- 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
- BigQuery 專案:
在「Custom query」(自訂查詢) 窗格中,依序點選「Analyze」(分析)「Run query」(執行查詢)。
查看查詢結果。結果可能是下列其中一項:
找出可授予必要權限的正確 IAM 角色
確認主體沒有足夠的存取權後,下一步是找出適當的預先定義或自訂 IAM 角色,授予必要權限。您選擇的角色應遵循最低權限原則。
如果貴機構使用自訂角色,可以列出專案或機構中建立的所有自訂角色,找出正確的角色。舉例來說,在 Google Cloud 控制台的「Roles」(角色) 頁面,您可以依「Type:Custom」(類型:自訂) 篩選清單,只查看自訂角色。
如要找出正確的預先定義 IAM 角色,請按照下列步驟操作。
在「Enter a permission」(輸入權限) 搜尋列中,輸入您從錯誤訊息、工作記錄或稽核記錄中擷取的權限。例如:
bigquery.tables.getData
。搜尋結果會顯示授予該權限的所有預先定義 BigQuery 角色。
採用最低權限原則:在角色清單中,選擇授予必要權限的最低權限角色。舉例來說,如果您搜尋「
bigquery.tables.getData
」來授予查詢資料表資料的權限,則 BigQuery 資料檢視者是授予該權限的最低權限角色。將適當角色授予主體。如要瞭解如何將 IAM 角色授予 BigQuery 資源,請參閱「使用 IAM 控管資源存取權」。
後續步驟
- 如需所有 BigQuery IAM 角色和權限的清單,請參閱「BigQuery IAM 角色和權限」。
- 如要進一步瞭解如何排解 IAM 允許和拒絕政策問題,請參閱「排解政策問題」。
- 如要進一步瞭解政策智慧政策分析工具,請參閱允許政策的政策分析工具。
- 如要進一步瞭解政策疑難排解工具,請參閱「使用政策疑難排解工具」。