使用 IAM 控管資源的存取權
本文說明如何查看、授予及撤銷 BigQuery 資料集和資料集內資源 (資料表、檢視區塊和常式) 的存取權控管。雖然模型也是資料集層級的資源,但您無法使用 IAM 角色授予個別模型的存取權。
您可以透過 Google Cloud 允許政策,授予資源的存取權。這類政策又稱為 Identity and Access Management (IAM) 政策,會附加於資源。每個資源只能附加一項允許政策。 允許政策會控管資源本身的存取權,以及繼承允許政策的任何資源後代。
如要進一步瞭解允許政策,請參閱 IAM 說明文件中的「政策結構」。
本文假設您已熟悉 Google Cloud中的身分與存取權管理 (IAM)。
限制
- 複製的日常安排不會包含日常安排存取控制清單 (ACL)。
- 外部或連結資料集中的常式不支援存取控制項。
- 外部或連結資料集中的資料表不支援存取控制項。
- 無法使用 Terraform 設定日常安排存取權控管機制。
- 您無法使用 Google Cloud SDK 設定例行存取控管機制。
- 無法使用 BigQuery 資料控管語言 (DCL) 設定例行存取權控管。
- Data Catalog 不支援例行存取權控管。如果使用者已有條件地授予常式層級存取權,他們就不會在 BigQuery 側邊面板中看到自己的常式。如要解決這個問題,請改為授予資料集層級的存取權。
- 「
INFORMATION_SCHEMA.OBJECT_PRIVILEGES
」檢視畫面不會顯示日常作業的存取權控管。
事前準備
授予身分與存取權管理 (IAM) 角色,讓使用者取得執行本文各項工作所需的權限。
必要的角色
如要取得修改資源 IAM 政策所需的權限,請要求管理員授予您專案的 BigQuery 資料擁有者 (roles/bigquery.dataOwner
) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
這個預先定義的角色具備修改資源 IAM 政策所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:
所需權限
如要修改資源的 IAM 政策,必須具備下列權限:
-
如要取得資料集的存取權政策:
bigquery.datasets.get
-
如要設定資料集的存取權政策,請按照下列步驟操作:
bigquery.datasets.update
-
如要取得資料集的存取權政策 (僅限Google Cloud 控制台):
bigquery.datasets.getIamPolicy
-
如何設定資料集的存取權政策 (僅限使用控制台):
bigquery.datasets.setIamPolicy
-
如要取得資料表或檢視區塊的政策:
bigquery.tables.getIamPolicy
-
如要設定資料表或檢視區塊的政策:
bigquery.tables.setIamPolicy
-
如要取得日常作業的存取權政策:
bigquery.routines.getIamPolicy
-
如何設定日常安排的存取權政策:
bigquery.routines.setIamPolicy
-
如要建立 bq 工具或 SQL BigQuery 工作 (選用):
bigquery.jobs.create
使用資料集存取權控制
您可以授予 IAM 主體預先定義或自訂的角色,決定主體在資料集中的權限,藉此提供資料集存取權。這也稱為將「允許政策」附加至資源。授予存取權後,您可以查看資料集的存取權控管設定,也可以撤銷資料集的存取權。
授予資料集存取權
使用 BigQuery 網頁版 UI 或 bq 指令列工具建立資料集時,無法授予資料集存取權。您必須先建立資料集,再授予存取權。API 可讓您在建立資料集時,透過呼叫 datasets.insert
方法,搭配已定義的資料集資源,授予存取權。
專案是資料集的父項資源,而資料集則是資料表、檢視表、常式和模型的父項資源。在專案層級授予角色時,資料集和資料集資源會繼承該角色及其權限。同樣地,在資料集層級授予角色時,該角色及其權限會由資料集內的資源繼承。
您可以授予 IAM 角色,提供資料集存取權,或使用 IAM 條件有條件地授予存取權。如要進一步瞭解如何授予有條件的存取權,請參閱「使用 IAM 條件控管存取權」。
如要授予 IAM 角色資料集存取權,但不想使用條件,請選取下列其中一個選項:
主控台
前往「BigQuery」頁面
在「Explorer」窗格中展開專案,然後選取要共用的資料集。
依序點選
「共用」「權限」。按一下
「新增主體」。在「New principals」(新增主體) 欄位中輸入主體。
在「選取角色」清單中,選取預先定義的角色或自訂角色。
按一下 [儲存]。
如要返回資料集資訊,請按一下「關閉」。
SQL
如要授予主體資料集存取權,請使用 GRANT
DCL 陳述式:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入下列陳述式:
GRANT `ROLE_LIST` ON SCHEMA RESOURCE_NAME TO "USER_LIST"
取代下列項目:
ROLE_LIST
:要授予的角色或以半形逗號分隔的角色清單RESOURCE_NAME
:您要授予存取權的資料集名稱USER_LIST
:以半形逗號分隔的使用者清單,當中列有獲派角色的使用者如需有效格式的清單,請參閱
user_list
。
按一下「執行」
。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
以下範例會將 BigQuery 資料檢視者角色授予 myDataset
:
GRANT `roles/bigquery.dataViewer`
ON SCHEMA `myProject`.myDataset
TO "user:user@example.com", "user:user2@example.com"
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
如要將現有資料集的資訊 (包括存取權控管設定) 寫入 JSON 檔案,請使用
bq show
指令:bq show \ --format=prettyjson \ PROJECT_ID:DATASET > PATH_TO_FILE
更改下列內容:
- PROJECT_ID:您的專案 ID
- DATASET:資料集名稱
- PATH_TO_FILE:本機上 JSON 檔案的路徑
變更 JSON 檔案的
access
區段。您可以新增任何specialGroup
項目:projectOwners
、projectWriters
、projectReaders
和allAuthenticatedUsers
。您也可以新增下列任何項目:userByEmail
、groupByEmail
和domain
。舉例來說,資料集 JSON 檔案中的
access
區段應會與以下內容類似:{ "access": [ { "role": "READER", "specialGroup": "projectReaders" }, { "role": "WRITER", "specialGroup": "projectWriters" }, { "role": "OWNER", "specialGroup": "projectOwners" }, { "role": "READER", "specialGroup": "allAuthenticatedUsers" }, { "role": "READER", "domain": "domain_name" }, { "role": "WRITER", "userByEmail": "user_email" }, { "role": "READER", "groupByEmail": "group_email" } ], ... }
完成編輯後,請使用
bq update
指令並利用--source
旗標來納入 JSON 檔案。如果資料集位於預設專案以外的專案中,請使用下列格式將專案 ID 新增至資料集名稱:PROJECT_ID:DATASET
。bq update
--source PATH_TO_FILE
PROJECT_ID:DATASET如要驗證存取權控管設定變更,請再次使用
bq show
指令,但不要將資訊寫入檔案:bq show --format=prettyjson PROJECT_ID:DATASET
- 啟動 Cloud Shell。
-
設定要套用 Terraform 設定的預設 Google Cloud 專案。
每項專案只需要執行一次這個指令,且可以在任何目錄中執行。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
如果您在 Terraform 設定檔中設定明確值,環境變數就會遭到覆寫。
-
在 Cloud Shell 中建立目錄,並在該目錄中建立新檔案。檔案名稱的副檔名必須是
.tf
,例如main.tf
。在本教學課程中,這個檔案稱為main.tf
。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
如果您正在學習教學課程,可以複製每個章節或步驟中的範例程式碼。
將範例程式碼複製到新建立的
main.tf
。視需要從 GitHub 複製程式碼。如果 Terraform 程式碼片段是端對端解決方案的一部分,建議您使用這個方法。
- 查看並修改範例參數,套用至您的環境。
- 儲存變更。
-
初始化 Terraform。每個目錄只需執行一次這項操作。
terraform init
如要使用最新版 Google 供應商,請加入
-upgrade
選項:terraform init -upgrade
-
檢查設定,確認 Terraform 即將建立或更新的資源符合您的預期:
terraform plan
視需要修正設定。
-
執行下列指令,並在提示中輸入
yes
,即可套用 Terraform 設定:terraform apply
等待 Terraform 顯示「Apply complete!」訊息。
- 開啟 Google Cloud 專案即可查看結果。在 Google Cloud 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。
Terraform
使用 google_bigquery_dataset_iam
資源更新資料集的存取權。
設定資料集的存取權政策
以下範例說明如何使用 google_bigquery_dataset_iam_policy
資源,為 mydataset
資料集設定 IAM 政策。這會取代已附加至資料集的現有政策:
# This file sets the IAM policy for the dataset created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_dataset/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" dataset resource with a dataset_id of "mydataset". data "google_iam_policy" "iam_policy" { binding { role = "roles/bigquery.admin" members = [ "user:user@example.com", ] } binding { role = "roles/bigquery.dataOwner" members = [ "group:data.admin@example.com", ] } binding { role = "roles/bigquery.dataEditor" members = [ "serviceAccount:bqcx-1234567891011-12a3@gcp-sa-bigquery-condel.iam.gserviceaccount.com", ] } } resource "google_bigquery_dataset_iam_policy" "dataset_iam_policy" { dataset_id = google_bigquery_dataset.default.dataset_id policy_data = data.google_iam_policy.iam_policy.policy_data }
設定資料集的角色成員資格
以下範例說明如何使用 google_bigquery_dataset_iam_binding
資源,為 mydataset
資料集設定特定角色的成員資格。這會取代該角色現有的任何成員資格。
資料集 IAM 政策中的其他角色會保留:
# This file sets membership in an IAM role for the dataset created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_dataset/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" dataset resource with a dataset_id of "mydataset". resource "google_bigquery_dataset_iam_binding" "dataset_iam_binding" { dataset_id = google_bigquery_dataset.default.dataset_id role = "roles/bigquery.jobUser" members = [ "user:user@example.com", "group:group@example.com" ] }
為單一主體設定角色成員資格
以下範例說明如何使用 google_bigquery_dataset_iam_member
資源更新 mydataset
資料集的 IAM 政策,將角色授予一個主體。更新這項 IAM 政策不會影響已獲授資料集角色的任何其他主體存取權。
# This file adds a member to an IAM role for the dataset created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_dataset/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" dataset resource with a dataset_id of "mydataset". resource "google_bigquery_dataset_iam_member" "dataset_iam_member" { dataset_id = google_bigquery_dataset.default.dataset_id role = "roles/bigquery.user" member = "user:user@example.com" }
如要在 Google Cloud 專案中套用 Terraform 設定,請完成下列各節的步驟。
準備 Cloud Shell
準備目錄
每個 Terraform 設定檔都必須有自己的目錄 (也稱為根模組)。
套用變更
API
如要在建立資料集時套用存取權控管設定,請使用定義的資料集資源呼叫 datasets.insert
方法。如要更新存取權控管設定,請呼叫 datasets.patch
方法,並使用 Dataset
資源中的 access
屬性。
由於 datasets.update
方法會取代整個資料集的資源,因此建議您使用 datasets.patch
方法來更新存取權控管設定。
Go
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Go 設定說明進行操作。詳情請參閱 BigQuery Go API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
將新項目附加至現有清單,藉此設定新的存取清單 (使用DatasetMetadataToUpdate
型別)。然後呼叫 dataset.Update()
函式來更新屬性。
Java
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Java 設定說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Node.js
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Node.js 設定說明進行操作。詳情請參閱 BigQuery Node.js API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
使用 Dataset#metadata 方法,將新項目附加至現有清單,藉此設定新的存取清單。然後呼叫 Dataset#setMetadata() 函式來更新屬性。Python
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Python 設定說明進行操作。詳情請參閱 BigQuery Python API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
利用資料集的存取權控管設定dataset.access_entries
屬性。然後呼叫 client.update_dataset()
函式來更新屬性。
授予資料集存取權的預先定義角色
您可以授予下列 IAM 預先定義角色資料集存取權。
角色 | 說明 |
---|---|
BigQuery 資料擁有者
(roles/bigquery.dataOwner ) |
如果授予資料集權限,這個角色會提供下列權限:
|
BigQuery 資料編輯者
(roles/bigquery.dataEditor ) |
如果授予資料集權限,這個角色會提供下列權限:
|
BigQuery 資料檢視者
(roles/bigquery.dataViewer ) |
如果授予資料集權限,這個角色會提供下列權限:
|
BigQuery 中繼資料檢視器
(roles/bigquery.metadataViewer ) |
如果授予資料集權限,這個角色會提供下列權限:
|
資料集權限
開頭為 bigquery.datasets
的權限大多適用於資料集層級。
bigquery.datasets.create
不支援。如要建立資料集,必須在父項容器 (專案) 上授予角色 bigquery.datasets.create
權限。
下表列出資料集的所有權限,以及可套用權限的最低層級資源。
權限 | 資源 | 動作 |
---|---|---|
bigquery.datasets.create |
專案 | 在專案中建立新資料集。 |
bigquery.datasets.get |
資料集 | 取得資料集的中繼資料和存取權控制。如要在控制台中查看權限,也必須具備 bigquery.datasets.getIamPolicy 權限。 |
bigquery.datasets.getIamPolicy |
資料集 | 控制台需要這項權限,才能授予使用者權限,取得資料集的存取控制項。失敗時維持開放狀態。此外,控制台也需要 bigquery.datasets.get 權限才能查看資料集。 |
bigquery.datasets.update |
資料集 | 更新資料集的中繼資料和存取權控管設定。在控制台中更新存取權控管時,也需要 bigquery.datasets.setIamPolicy 權限。 |
bigquery.datasets.setIamPolicy |
資料集 | 控制台需要這項權限,才能授予使用者設定資料集存取控制項的權限。失敗時維持開放狀態。此外,控制台也需要 bigquery.datasets.update 權限才能更新資料集。 |
bigquery.datasets.delete |
資料集 | 刪除資料集。 |
bigquery.datasets.createTagBinding |
資料集 | 將標記附加至資料集。 |
bigquery.datasets.deleteTagBinding |
資料集 | 從資料集卸離標籤。 |
bigquery.datasets.listTagBindings |
資料集 | 列出資料集的標記。 |
bigquery.datasets.listEffectiveTags |
資料集 | 列出資料集的有效標記 (已套用和已繼承)。 |
bigquery.datasets.link |
資料集 | 建立 連結的資料集。 |
bigquery.datasets.listSharedDatasetUsage |
專案 | 列出您在專案中可存取資料集的共用資料集使用統計資料。您必須要有這個權限,才能查詢 INFORMATION_SCHEMA.SHARED_DATASET_USAGE 檢視畫面。 |
查看資料集的存取權控制
您可以選擇下列任一選項,查看資料集的明確設定存取權控管。如要查看繼承的角色,請使用 BigQuery 網頁版 UI 存取資料集。
主控台
前往「BigQuery」頁面
在「Explorer」窗格中展開專案並選取資料集。
依序點選 >「權限」。
「共用」資料集的存取權控管會顯示在「資料集權限」窗格中。
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
如要取得現有政策並以 JSON 格式輸出至本機檔案,請在 Cloud Shell 中使用
bq show
指令:bq show \ --format=prettyjson \ PROJECT_ID:DATASET > PATH_TO_FILE
更改下列內容:
- PROJECT_ID:您的專案 ID
- DATASET:資料集名稱
- PATH_TO_FILE:本機上 JSON 檔案的路徑
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入下列陳述式:
SELECT COLUMN_LIST FROM PROJECT_ID.`region-REGION`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES WHERE object_name = "DATASET";
取代下列項目:
- COLUMN_LIST:以逗號分隔的清單,當中列有
INFORMATION_SCHEMA.OBJECT_PRIVILEGES
檢視區塊的資料欄 - PROJECT_ID:您的專案 ID
- REGION:區域限定符
- DATASET:專案中資料集的名稱
- COLUMN_LIST:以逗號分隔的清單,當中列有
按一下「執行」
。
SQL
查詢 INFORMATION_SCHEMA.OBJECT_PRIVILEGES
檢視區塊。
如要查詢資料集的存取權控管,必須指定 object_name
。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
範例:
這項查詢會取得 mydataset
的存取權控管。
SELECT object_name, privilege_type, grantee FROM my_project.`region-us`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES WHERE object_name = "mydataset";
輸出內容應如下所示:
+------------------+-----------------------------+-------------------------+
| object_name | privilege_type | grantee |
+------------------+-----------------------------+-------------------------+
| mydataset | roles/bigquery.dataOwner | projectOwner:myproject |
| mydataset | roles/bigquery.dataViwer | user:user@example.com |
+------------------+-----------------------------+-------------------------+
API
如要查看資料集的存取權控管設定,請呼叫 datasets.get
方法,搭配已定義的dataset
資源。
存取權控管會顯示在 dataset
資源的 access
屬性中。
Go
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Go 設定說明進行操作。詳情請參閱 BigQuery Go API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
呼叫client.Dataset().Metadata()
函式。存取權政策位於 Access
屬性中。
Java
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Java 設定說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Node.js
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Node.js 設定說明進行操作。詳情請參閱 BigQuery Node.js API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
使用Dataset#getMetadata()
函式擷取資料集中繼資料。
存取權政策位於產生的中繼資料物件的 access 屬性中。
Python
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Python 設定說明進行操作。詳情請參閱 BigQuery Python API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
呼叫client.get_dataset()
函式。存取政策位於 dataset.access_entries
屬性。
撤銷資料集存取權
如要撤銷資料集的存取權,請選取下列其中一個選項:
主控台
前往「BigQuery」頁面
在「Explorer」面板中展開專案並選取資料集。
在詳細資料面板中,依序點選「共用」>「權限」。
在「資料集權限」對話方塊中,展開要撤銷存取權的主體。
按一下
「移除主體」。在「要移除主體的角色嗎?」對話方塊中,按一下「移除」。
如要返回資料集詳細資料,請按一下「關閉」。
SQL
如要移除主體的資料集存取權,請使用 REVOKE
DCL 陳述式:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入下列陳述式:
REVOKE `ROLE_LIST` ON SCHEMA RESOURCE_NAME FROM "USER_LIST"
取代下列項目:
ROLE_LIST
:要撤銷的角色或以半形逗號分隔的角色清單RESOURCE_NAME
:要撤銷權限的資源名稱USER_LIST
:以逗號分隔的使用者清單,這些使用者的角色將遭到撤銷如需有效格式的清單,請參閱
user_list
。
按一下「執行」
。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
以下範例會撤銷 myDataset
的 BigQuery 資料擁有者角色:
REVOKE `roles/bigquery.dataOwner`
ON SCHEMA `myProject`.myDataset
FROM "group:group@example.com", "serviceAccount:user@test-project.iam.gserviceaccount.com"
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
如要將現有資料集的資訊 (包括存取權控管設定) 寫入 JSON 檔案,請使用
bq show
指令:bq show \ --format=prettyjson \ PROJECT_ID:DATASET > PATH_TO_FILE
更改下列內容:
- PROJECT_ID:您的專案 ID
- DATASET:資料集名稱
- PATH_TO_FILE:本機上 JSON 檔案的路徑
變更 JSON 檔案的
access
區段。您可以移除任何specialGroup
項目:projectOwners
、projectWriters
、projectReaders
和allAuthenticatedUsers
。您也可以移除下列任何項目:userByEmail
、groupByEmail
和domain
。舉例來說,資料集 JSON 檔案中的
access
區段應會與以下內容類似:{ "access": [ { "role": "READER", "specialGroup": "projectReaders" }, { "role": "WRITER", "specialGroup": "projectWriters" }, { "role": "OWNER", "specialGroup": "projectOwners" }, { "role": "READER", "specialGroup": "allAuthenticatedUsers" }, { "role": "READER", "domain": "domain_name" }, { "role": "WRITER", "userByEmail": "user_email" }, { "role": "READER", "groupByEmail": "group_email" } ], ... }
完成編輯後,請使用
bq update
指令並利用--source
旗標來納入 JSON 檔案。如果資料集位於預設專案以外的專案中,請使用下列格式將專案 ID 新增至資料集名稱:PROJECT_ID:DATASET
。bq update
--source PATH_TO_FILE
PROJECT_ID:DATASET如要驗證存取權控管設定變更,請使用
show
指令,但不要將資訊寫入檔案:bq show --format=prettyjson PROJECT_ID:DATASET
API
呼叫 datasets.patch
方法,並使用 Dataset
資源中的 access
屬性更新存取權控管設定。
由於 datasets.update
方法會取代整個資料集的資源,因此建議您使用 datasets.patch
方法來更新存取權控管設定。
Go
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Go 設定說明進行操作。詳情請參閱 BigQuery Go API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
從現有清單中移除DatasetMetadataToUpdate
類型的項目,藉此設定新的存取清單。
然後呼叫 dataset.Update()
函式來更新屬性。
Java
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Java 設定說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Node.js
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Node.js 設定說明進行操作。詳情請參閱 BigQuery Node.js API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
使用Dataset#get()
方法擷取目前的中繼資料,然後從現有清單中移除指定項目,即可更新資料集存取清單。修改存取權屬性,排除所需實體,然後呼叫
Dataset#setMetadata()
函式,套用更新後的存取權清單。
Python
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Python 設定說明進行操作。詳情請參閱 BigQuery Python API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
利用資料集的存取權控管設定dataset.access_entries
屬性。然後呼叫 client.update_dataset()
函式來更新屬性。
使用資料表和檢視區塊存取權控管
BigQuery 會將檢視表視為資料表資源。您可以授予 IAM 主體預先定義或自訂角色,藉此提供資料表或檢視區塊的存取權,並決定主體可對資料表或檢視區塊執行的操作。這也稱為將「允許政策」附加至資源。授予存取權後,您可以查看資料表或檢視表的存取權控管機制,也可以撤銷資料表或檢視表的存取權。
授予資料表或檢視表的存取權
如要進行精細的存取權控管,您可以授予特定資料表或檢視區預先定義或自訂的 IAM 角色。資料表或檢視區也會沿用在資料集層級和更高層級指定的存取權控管。舉例來說,如果您將資料集的 BigQuery 資料擁有者角色授予主體,該主體也會取得資料集中資料表和檢視區塊的 BigQuery 資料擁有者權限。
如要授予資料表或檢視區塊的存取權,請選取下列其中一個選項:
主控台
前往「BigQuery」頁面
在「Explorer」窗格中展開專案,然後選取要共用的資料表或檢視區塊。
點選「分享」圖示
。按一下
「新增主體」。在「New principals」(新增主體) 欄位中輸入主體。
在「選取角色」清單中,選取預先定義的角色或自訂角色。
按一下 [儲存]。
如要返回表格或查看詳細資料,請按一下「關閉」。
SQL
如要授予主體資料表或檢視區塊的存取權,請使用 GRANT
DCL 陳述式:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入下列陳述式:
GRANT `ROLE_LIST` ON RESOURCE_TYPE RESOURCE_NAME TO "USER_LIST"
取代下列項目:
ROLE_LIST
:要授予的角色或以半形逗號分隔的角色清單RESOURCE_TYPE
:角色套用的資源類型支援的值包括
TABLE
、VIEW
、MATERIALIZED VIEW
和EXTERNAL TABLE
。RESOURCE_NAME
:要授予權限的資源名稱USER_LIST
:以半形逗號分隔的使用者清單,當中列有獲派角色的使用者如需有效格式的清單,請參閱
user_list
。
按一下「執行」
。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
以下範例會授予 myTable
的 BigQuery 資料檢視者角色:
GRANT `roles/bigquery.dataViewer`
ON TABLE `myProject`.myDataset.myTable
TO "user:user@example.com", "user:user2@example.com"
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
如要授予資料表或檢視表的存取權,請使用
bq add-iam-policy-binding
指令:bq add-iam-policy-binding --member=MEMBER_TYPE:MEMBER --role=ROLE --table=true RESOURCE
更改下列內容:
- MEMBER_TYPE:成員類型,例如
user
、group
、serviceAccount
或domain
。 - MEMBER:成員的電子郵件地址或網域名稱。
- ROLE:要授予成員的角色。
- RESOURCE:要更新政策的資料表或檢視區塊名稱。
- MEMBER_TYPE:成員類型,例如
- 啟動 Cloud Shell。
-
設定要套用 Terraform 設定的預設 Google Cloud 專案。
每項專案只需要執行一次這個指令,且可以在任何目錄中執行。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
如果您在 Terraform 設定檔中設定明確值,環境變數就會遭到覆寫。
-
在 Cloud Shell 中建立目錄,並在該目錄中建立新檔案。檔案名稱的副檔名必須是
.tf
,例如main.tf
。在本教學課程中,這個檔案稱為main.tf
。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
如果您正在學習教學課程,可以複製每個章節或步驟中的範例程式碼。
將範例程式碼複製到新建立的
main.tf
。視需要從 GitHub 複製程式碼。如果 Terraform 程式碼片段是端對端解決方案的一部分,建議您使用這個方法。
- 查看並修改範例參數,套用至您的環境。
- 儲存變更。
-
初始化 Terraform。每個目錄只需執行一次這項操作。
terraform init
如要使用最新版 Google 供應商,請加入
-upgrade
選項:terraform init -upgrade
-
檢查設定,確認 Terraform 即將建立或更新的資源符合您的預期:
terraform plan
視需要修正設定。
-
執行下列指令,並在提示中輸入
yes
,即可套用 Terraform 設定:terraform apply
等待 Terraform 顯示「Apply complete!」訊息。
- 開啟 Google Cloud 專案即可查看結果。在 Google Cloud 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。
如要擷取目前的政策,請呼叫
tables.getIamPolicy
方法。編輯政策,新增成員或存取控管,或兩者皆是。 如要瞭解政策的格式規定,請參閱「政策」參考主題。
呼叫
tables.setIamPolicy
,寫入更新後的政策。
Terraform
使用 google_bigquery_table_iam
資源更新資料表的存取權。
設定資料表的存取政策
以下範例說明如何使用 google_bigquery_table_iam_policy
資源,為 mytable
資料表設定 IAM 政策。這會取代已附加至資料表的任何現有政策:
# This file sets the IAM policy for the table created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_table/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" table resource with a table_id of "mytable". data "google_iam_policy" "iam_policy" { binding { role = "roles/bigquery.dataOwner" members = [ "user:user@example.com", ] } } resource "google_bigquery_table_iam_policy" "table_iam_policy" { dataset_id = google_bigquery_table.default.dataset_id table_id = google_bigquery_table.default.table_id policy_data = data.google_iam_policy.iam_policy.policy_data }
設定表格的角色成員資格
以下範例說明如何使用 google_bigquery_table_iam_binding
資源,為 mytable
資料表設定特定角色的成員資格。這會取代該角色現有的任何成員資格。
系統會保留資料表 IAM 政策中的其他角色。
# This file sets membership in an IAM role for the table created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_table/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" table resource with a table_id of "mytable". resource "google_bigquery_table_iam_binding" "table_iam_binding" { dataset_id = google_bigquery_table.default.dataset_id table_id = google_bigquery_table.default.table_id role = "roles/bigquery.dataOwner" members = [ "group:group@example.com", ] }
為單一主體設定角色成員資格
以下範例說明如何使用 google_bigquery_table_iam_member
資源,更新 mytable
資料表的 IAM 政策,將角色授予一個主體。更新這項 IAM 政策不會影響已獲授資料集角色的任何其他主體存取權。
# This file adds a member to an IAM role for the table created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_table/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" table resource with a table_id of "mytable". resource "google_bigquery_table_iam_member" "table_iam_member" { dataset_id = google_bigquery_table.default.dataset_id table_id = google_bigquery_table.default.table_id role = "roles/bigquery.dataEditor" member = "serviceAccount:bqcx-1234567891011-12a3@gcp-sa-bigquery-condel.iam.gserviceaccount.com" }
如要在 Google Cloud 專案中套用 Terraform 設定,請完成下列各節的步驟。
準備 Cloud Shell
準備目錄
每個 Terraform 設定檔都必須有自己的目錄 (也稱為根模組)。
套用變更
API
Go
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Go 設定說明進行操作。詳情請參閱 BigQuery Go API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
呼叫資源的IAM().SetPolicy()
函式,儲存資料表或檢視表的存取權政策變更。
Java
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Java 設定說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Node.js
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Node.js 設定說明進行操作。詳情請參閱 BigQuery Node.js API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
呼叫Table#getIamPolicy()
函式,擷取資料表或檢視表的現行 IAM 政策,新增繫結來修改政策,然後使用 Table#setIamPolicy()
函式儲存存取權政策的變更。
Python
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Python 設定說明進行操作。詳情請參閱 BigQuery Python API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
呼叫client.set_iam_policy()
函式,儲存資料表或檢視區塊的存取權政策變更。
授予資料表和檢視表存取權的預先定義角色
BigQuery 會將檢視表視為資料表資源。如要進行精細的存取權控管,您可以對特定資料表或檢視表授予預先定義或自訂的 IAM 角色。資料表或檢視區也會沿用在資料集層級和更高層級指定的存取權控管。舉例來說,如果您將資料集上的 BigQuery 資料擁有者角色授予主體,該主體也會擁有資料集內資料表和檢視區塊的資料擁有者權限。
以下預先定義的 IAM 角色具有表格或檢視區塊的權限。
角色 | 說明 |
---|---|
BigQuery 資料擁有者
(roles/bigquery.dataOwner ) |
如果授予資料表或檢視表,這個角色會授予下列權限:
|
BigQuery 資料編輯者
(roles/bigquery.dataEditor ) |
如果授予資料表或檢視表,這個角色會授予下列權限:
|
BigQuery 資料檢視者
(roles/bigquery.dataViewer ) |
如果授予資料表或檢視表,這個角色會授予下列權限:
|
BigQuery 中繼資料檢視器
(roles/bigquery.metadataViewer ) |
如果授予資料表或檢視表,這個角色會授予下列權限:
|
資料表和檢視表的權限
BigQuery 會將檢視表視為資料表資源。所有資料表層級的權限都會套用至檢視畫面。
開頭為 bigquery.tables
的權限大多適用於資料表層級。
bigquery.tables.create
和 bigquery.tables.list
則不會。如要建立及列出資料表或檢視區塊,必須在父項容器 (資料集或專案) 上,將 bigquery.tables.create
和 bigquery.tables.list
權限授予角色。
下表列出資料表和檢視區塊的所有權限,以及可授予權限的最低層級資源。
權限 | 資源 | 動作 |
---|---|---|
bigquery.tables.create |
資料集 | 在資料集中建立新資料表。 |
bigquery.tables.createIndex |
資料表 | 在資料表上建立搜尋索引。 |
bigquery.tables.deleteIndex |
資料表 | 刪除資料表中的搜尋索引。 |
bigquery.tables.createSnapshot |
資料表 | 建立資料表的快照。建立快照需要資料表和資料集層級的幾項額外權限。詳情請參閱權限與角色一文,瞭解如何建立資料表快照。 |
bigquery.tables.deleteSnapshot |
資料表 | 刪除資料表快照。 |
bigquery.tables.delete |
資料表 | 刪除資料表。 |
bigquery.tables.createTagBinding |
資料表 | 在資料表上建立資源標記繫結。 |
bigquery.tables.deleteTagBinding |
資料表 | 刪除資料表中的資源標記繫結。 |
bigquery.tables.listTagBindings |
資料表 | 列出資料表的資源標記繫結。 |
bigquery.tables.listEffectiveTags |
資料表 | 列出資料表的有效標記 (已套用和已繼承)。 |
bigquery.tables.export |
資料表 | 匯出資料表資料。執行匯出工作也需要 bigquery.jobs.create 權限。 |
bigquery.tables.get |
資料表 | 取得資料表中繼資料。 |
bigquery.tables.getData |
資料表 | 查詢資料表的資料。執行查詢工作也需要 bigquery.jobs.create 權限。 |
bigquery.tables.getIamPolicy |
資料表 | 取得資料表的存取權控管。 |
bigquery.tables.list |
資料集 | 列出資料集中的所有資料表和資料表的中繼資料。 |
bigquery.tables.replicateData |
資料表 | 複製資料表資料。您必須具備這項權限,才能建立 materialized view 副本。 |
bigquery.tables.restoreSnapshot |
資料表 | 還原資料表快照。 |
bigquery.tables.setCategory |
資料表 | 在資料表的結構定義中設定政策標記。 |
bigquery.tables.setColumnDataPolicy |
資料表 | 在資料表上設定資料欄層級存取政策。 |
bigquery.tables.setIamPolicy |
資料表 | 設定資料表的存取權控管。 |
bigquery.tables.update |
資料表 | 更新表格。如要在主控台中更新資料表中繼資料,也需要 metadata. bigquery.tables.get 權限。 |
bigquery.tables.updateData |
資料表 | 更新資料表資料。 |
bigquery.tables.updateIndex |
資料表 | 更新資料表中的搜尋索引。 |
查看資料表或檢視表的存取權控管
如要查看資料表或檢視區塊的存取控制項,請選擇下列任一選項:
主控台
前往「BigQuery」頁面
在「Explorer」窗格中,展開專案和資料集,然後選取資料表或檢視區塊。
點選「分享」圖示
。資料表或檢視區塊存取權控制項會顯示在「共用」窗格中。
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
如要取得現有存取權政策,並以 JSON 格式輸出至本機檔案,請在 Cloud Shell 中使用
bq get-iam-policy
指令:bq get-iam-policy \ --table=true \ PROJECT_ID:DATASET.RESOURCE > PATH_TO_FILE
更改下列內容:
- PROJECT_ID:您的專案 ID
- DATASET:資料集名稱
- RESOURCE:要查看政策的資料表或檢視畫面名稱
- PATH_TO_FILE:本機上 JSON 檔案的路徑
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入下列陳述式:
SELECT COLUMN_LIST FROM PROJECT_ID.`region-REGION`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES WHERE object_schema = "DATASET" AND object_name = "TABLE";
取代下列項目:
- COLUMN_LIST:以逗號分隔的清單,當中列有
INFORMATION_SCHEMA.OBJECT_PRIVILEGES
檢視區塊的資料欄 - PROJECT_ID:您的專案 ID
- REGION:區域限定符
- DATASET:包含資料表或檢視表的資料集名稱
- TABLE:資料表或檢視區塊的名稱
- COLUMN_LIST:以逗號分隔的清單,當中列有
按一下「執行」
。
SQL
查詢 INFORMATION_SCHEMA.OBJECT_PRIVILEGES
檢視區塊。
如要查詢資料表或檢視表的存取權控管,查詢必須指定 object_schema
和 object_name
。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
範例:
SELECT object_name, privilege_type, grantee FROM my_project.`region-us`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES WHERE object_schema = "mydataset" AND object_name = "mytable";
+------------------+-----------------------------+--------------------------+
| object_name | privilege_type | grantee |
+------------------+-----------------------------+--------------------------+
| mytable | roles/bigquery.dataEditor | group:group@example.com|
| mytable | roles/bigquery.dataOwner | user:user@example.com|
+------------------+-----------------------------+--------------------------+
API
如要擷取目前的政策,請呼叫 tables.getIamPolicy
方法。
Go
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Go 設定說明進行操作。詳情請參閱 BigQuery Go API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
呼叫資源的IAM().Policy()
函式。然後呼叫 Roles()
函式,取得資料表或檢視區塊的存取權政策。
Java
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Java 設定說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Node.js
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Node.js 設定說明進行操作。詳情請參閱 BigQuery Node.js API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
使用Table#getIamPolicy()
函式,擷取資料表或檢視區塊的 IAM 政策。
存取權政策詳細資料會顯示在傳回的政策物件中。
撤銷資料表或檢視表的存取權
如要撤銷表格或檢視畫面的存取權,請選取下列其中一個選項:
主控台
前往「BigQuery」頁面
在「Explorer」面板中展開專案和資料集,然後選取資料表或檢視表。
在詳細資料面板中,按一下「分享」。
在「共用」對話方塊中,展開要撤銷存取權的主體。
按一下「刪除」圖示
。在「要移除主體的角色嗎?」對話方塊中,按一下「移除」。
如要返回表格或查看詳細資料,請按一下「關閉」。
SQL
如要移除主體對資料表或檢視區塊的存取權,請使用 REVOKE
DCL 陳述式:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入下列陳述式:
REVOKE `ROLE_LIST` ON RESOURCE_TYPE RESOURCE_NAME FROM "USER_LIST"
取代下列項目:
ROLE_LIST
:要撤銷的角色或以半形逗號分隔的角色清單RESOURCE_TYPE
:要撤銷角色授權的資源類型支援的值包括
TABLE
、VIEW
、MATERIALIZED VIEW
和EXTERNAL TABLE
。RESOURCE_NAME
:要撤銷權限的資源名稱USER_LIST
:以逗號分隔的使用者清單,這些使用者的角色將遭到撤銷如需有效格式的清單,請參閱
user_list
。
按一下「執行」
。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
以下範例會撤銷 myTable
的 BigQuery 資料擁有者角色:
REVOKE `roles/bigquery.dataOwner`
ON TABLE `myProject`.myDataset.myTable
FROM "group:group@example.com", "serviceAccount:user@myproject.iam.gserviceaccount.com"
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
如要撤銷資料表或檢視表的存取權,請使用
bq remove-iam-policy-binding
指令:bq remove-iam-policy-binding --member=MEMBER_TYPE:MEMBER --role=ROLE --table=true RESOURCE
更改下列內容:
- MEMBER_TYPE:成員類型,例如
user
、group
、serviceAccount
或domain
- MEMBER:成員的電子郵件地址或網域名稱
- ROLE:要從成員撤銷的角色
- RESOURCE:要更新政策的資料表或檢視區塊名稱
- MEMBER_TYPE:成員類型,例如
如要擷取目前的政策,請呼叫
tables.getIamPolicy
方法。編輯政策,移除成員或繫結,或兩者皆移除。 如要瞭解政策的格式規定,請參閱「政策」參考主題。
呼叫
tables.setIamPolicy
,寫入更新後的政策。
API
Go
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Go 設定說明進行操作。詳情請參閱 BigQuery Go API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
呼叫policy.Remove()
函式,
移除存取權。
然後呼叫 IAM().SetPolicy()
函式,儲存資料表或檢視區塊的存取權政策變更。
Java
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Java 設定說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Node.js
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Node.js 設定說明進行操作。詳情請參閱 BigQuery Node.js API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
使用Table#getIamPolicy()
方法,擷取資料表或檢視區塊的目前 IAM 政策。修改政策,移除所需角色或主體,然後使用 Table#setIamPolicy()
方法套用更新後的政策。
使用日常作業的存取權控管
如要提供意見回饋或尋求這項功能的支援,請傳送電子郵件至 bq-govsec-eng@google.com。
您可以授予 IAM 主體](/iam/docs/principal-identifiers#allow)預先定義或自訂角色,藉此提供日常安排的存取權,並決定主體可對日常安排執行的操作。這也稱為將允許政策附加至資源。授予存取權後,你可以查看日常作業的存取權控管設定,並撤銷日常作業的存取權。
授予處理常式存取權
如要進行精細的存取權控管,您可以針對特定日常安排授予預先定義或自訂的 IAM 角色。這項常式也會沿用在資料集層級和更高層級指定的存取權控管機制。舉例來說,如果您將資料集的 BigQuery 資料擁有者角色授予主體,該主體也會擁有資料集中常式的資料擁有者權限。
選取下列選項之一:
主控台
前往「BigQuery」頁面
在「Explorer」窗格中,依序展開專案、資料集和「Routines」,然後選取所需常式。
點選「分享」圖示
。按一下
「新增成員」。在「New members」(新增成員) 欄位中輸入主體。
在「選取角色」清單中,選取預先定義的角色或自訂角色。
按一下 [儲存]。
如要返回日常安排資訊,請按一下「完成」。
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
如要將現有常式資訊 (包括存取權控管設定) 寫入 JSON 檔案,請使用
bq get-iam-policy
指令:bq get-iam-policy \ PROJECT_ID:DATASET.ROUTINE \ > PATH_TO_FILE
更改下列內容:
- PROJECT_ID:您的專案 ID
- DATASET:包含要更新常式的資料集名稱
- ROUTINE:要更新的資源名稱
- PATH_TO_FILE:本機上 JSON 檔案的路徑
變更 JSON 檔案的
bindings
區段。繫結會將一或多個主體繫結至單一role
。主體可以是使用者帳戶、服務帳戶、Google 群組和網域。舉例來說,常式 JSON 檔案中的bindings
區段應會與以下內容類似:{ "bindings": [ { "role": "roles/bigquery.dataViewer", "members": [ "user:user@example.com", "group:group@example.com", "domain:example.com", ] }, ], "etag": "BwWWja0YfJA=", "version": 1 }
如要更新存取權政策,請使用
bq set-iam-policy
指令:bq set-iam-policy PROJECT_ID:DATASET.ROUTINE PATH_TO_FILE
如要驗證存取權控管設定變更,請再次使用
bq get-iam-policy
指令,但不要將資訊寫入檔案:bq get-iam-policy --format=prettyjson \\ PROJECT_ID:DATASET.ROUTINE
如要擷取目前的政策,請呼叫
routines.getIamPolicy
方法。編輯政策,新增主體和/或繫結。 如要瞭解政策的格式規定,請參閱「政策」參考主題。
呼叫
routines.setIamPolicy
寫入更新後的政策。
API
授予日常作業存取權的預先定義角色
如要進行精細的存取權控管,您可以針對特定日常安排授予預先定義或自訂的 IAM 角色。這項常式也會沿用在資料集層級和更高層級指定的存取權控管機制。舉例來說,如果您將資料集中的資料擁有者角色授予主體,該主體也會透過繼承,取得資料集中常式的資料擁有者權限。
以下預先定義的 IAM 角色具有常式權限。
角色 | 說明 |
---|---|
BigQuery 資料擁有者
(roles/bigquery.dataOwner ) |
如果授予日常安排,這個角色會授予下列權限:
您不應在常式層級授予資料擁有者角色。「資料編輯者」角色也會授予例行程序的所有權限,但權限較低。 |
BigQuery 資料編輯者
(roles/bigquery.dataEditor ) |
如果授予日常安排,這個角色會授予下列權限:
|
BigQuery 資料檢視者
(roles/bigquery.dataViewer ) |
如果授予日常安排,這個角色會授予下列權限:
|
BigQuery 中繼資料檢視器
(roles/bigquery.metadataViewer ) |
如果授予日常安排,這個角色會授予下列權限:
|
處理常式權限
以 bigquery.routines
開頭的大部分權限都適用於日常安排層級。
bigquery.routines.create
和 bigquery.routines.list
則不會。如要建立及列出常式,必須在父項容器 (資料集) 中,將 bigquery.routines.create
和 bigquery.routines.list
權限授予角色。
下表列出所有例行程序權限,以及可授予這些權限的最低層級資源。
權限 | 資源 | 說明 |
---|---|---|
bigquery.routines.create |
資料集 | 在資料集中建立常式。如要執行含有 CREATE FUNCTION 陳述式的工作,也需要 bigquery.jobs.create 權限。 |
bigquery.routines.delete |
處理常式 | 刪除日常安排。 |
bigquery.routines.get |
處理常式 | 參考他人建立的日常安排。此外,如要執行參照常式的查詢工作,您也需要 bigquery.jobs.create 權限,並具備存取常式所參照任何資源 (例如資料表或檢視表) 的權限。 |
bigquery.routines.list |
資料集 | 列出資料集中的處理常式,並顯示處理常式的中繼資料。 |
bigquery.routines.update |
處理常式 | 更新處理常式定義和中繼資料。 |
bigquery.routines.getIamPolicy |
處理常式 | 取得日常作業的存取權控管。 |
bigquery.routines.setIamPolicy |
處理常式 | 設定日常作業的存取控管機制。 |
查看日常安排的存取權控管
如要查看日常作業的存取權控管設定,請選擇下列其中一個選項:
主控台
前往「BigQuery」頁面
在「Explorer」窗格中,依序展開專案、資料集和「Routines」,然後選取常式。
點選「分享」圖示
。「共用」窗格會顯示日常作業的存取權控管機制。
bq
bq get-iam-policy
指令不支援查看日常作業的存取權控管。
SQL
「INFORMATION_SCHEMA.OBJECT_PRIVILEGES
」檢視畫面不會顯示日常作業的存取權控管。
API
如要擷取目前的政策,請呼叫 routines.getIamPolicy
方法。
撤銷處理常式的存取權
如要撤銷常式存取權,請選取下列其中一個選項:
主控台
前往「BigQuery」頁面
在「Explorer」面板中,依序展開專案、資料集和「Routines」,然後選取常式。
在詳細資料面板中,依序點選「共用」>「權限」。
在「日常安排權限」對話方塊中,展開要撤銷存取權的主體。
按一下
「移除主體」。在「要移除主體的角色嗎?」對話方塊中,按一下「移除」。
按一下 [關閉]。
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
如要將現有常式資訊 (包括存取權控管設定) 寫入 JSON 檔案,請使用
bq get-iam-policy
指令:bq get-iam-policy --routine PROJECT_ID:DATASET.ROUTINE > PATH_TO_FILE
更改下列內容:
- PROJECT_ID:您的專案 ID
- DATASET:包含要更新常式的資料集名稱
- ROUTINE:要更新的資源名稱
- PATH_TO_FILE:本機上 JSON 檔案的路徑
在政策檔案中,
version
的值仍為1
。這個數字是指 IAM 政策結構定義版本,而非政策版本。etag
值是政策版本號碼。變更 JSON 檔案的
access
區段。您可以移除任何specialGroup
項目:projectOwners
、projectWriters
、projectReaders
和allAuthenticatedUsers
。您也可以移除下列任一項目:userByEmail
、groupByEmail
和domain
。舉例來說,常式 JSON 檔案中的
access
區段應會與以下內容類似:{ "bindings": [ { "role": "roles/bigquery.dataViewer", "members": [ "user:user@example.com", "group:group@example.com", "domain:google.com", ] }, ], "etag": "BwWWja0YfJA=", "version": 1 }
如要更新存取權政策,請使用
bq set-iam-policy
指令:bq set-iam-policy --routine PROJECT_ID:DATASET.ROUTINE PATH_TO_FILE
如要驗證存取權控管設定變更,請再次使用
get-iam-policy
指令,但不要將資訊寫入檔案:bq get-iam-policy --routine --format=prettyjson PROJECT_ID:DATASET.ROUTINE
如要擷取目前的政策,請呼叫
routines.getIamPolicy
方法。編輯政策,新增主體或繫結,或兩者皆新增。 如要瞭解政策的格式規定,請參閱「政策」參考主題。
API
查看資源的繼承存取權控管
您可以使用 BigQuery 網頁版 UI 檢查資源的已繼承 IAM 角色。您必須具備適當的權限,才能在控制台中查看繼承設定。如要檢查資料集、資料表、檢視區塊或常式的繼承項目,請按照下列步驟操作:
前往 Google Cloud 控制台的「BigQuery」頁面。
在「Explorer」窗格中選取資料集,或展開資料集並選取資料表、檢視區塊或常式。
如要分享資料集,請按一下「共用」。如要分享表格、檢視畫面或日常安排,請按一下「分享」。
確認已啟用「在表格顯示繼承的角色」選項。
展開表格中的角色。
在「繼承」欄中,六邊形圖示會指出角色是否繼承自父項資源。
拒絕存取資源
IAM 拒絕政策可讓您設定 BigQuery 資源的存取權防護措施。您可以定義拒絕規則,防止所選主體使用特定權限,無論主體具備何種角色均適用。
如要瞭解如何建立、更新及刪除拒絕政策,請參閱「拒絕存取資源」一文。
特殊情況
在部分 BigQuery 權限上建立 IAM 拒絕政策時,請考慮下列情境:
存取授權資源 (檢視區塊、常式、資料集或預存程序) 可讓您建立、捨棄或操控資料表,以及讀取和修改資料表資料,即使您沒有直接執行這些作業的權限也沒問題。此外,它還能取得模型資料或中繼資料,以及在基礎資料表上叫用其他預存程序。這項功能表示授權資源具有下列權限:
bigquery.tables.get
bigquery.tables.list
bigquery.tables.getData
bigquery.tables.updateData
bigquery.tables.create
bigquery.tables.delete
bigquery.routines.get
bigquery.routines.list
bigquery.datasets.get
bigquery.models.getData
bigquery.models.getMetadata
如要拒絕存取這些授權資源,請在建立拒絕政策時,將下列其中一個值新增至
deniedPrincipal
欄位:值 用途 principalSet://goog/public:all
封鎖所有主體,包括授權資源。 principalSet://bigquery.googleapis.com/projects/PROJECT_NUMBER/*
封鎖指定專案中的所有 BigQuery 授權資源。 PROJECT_NUMBER
是系統自動為INT64
類型的專案產生的專屬 ID。如要免除特定主體的拒絕政策,請在拒絕政策的
exceptionPrincipals
欄位中指定這些主體。例如:exceptionPrincipals: "principalSet://bigquery.googleapis.com/projects/1234/*"
。BigQuery 會為工作擁有者快取查詢結果 24 小時,工作擁有者可存取這些結果,不必具備含有資料的資料表
bigquery.tables.getData
權限。因此,在bigquery.tables.getData
權限中新增 IAM 拒絕政策,不會封鎖工作擁有者存取快取結果,直到快取過期為止。如要禁止工作擁有者存取快取結果,請對bigquery.jobs.create
權限建立個別的拒絕政策。使用拒絕政策封鎖資料讀取作業時,為避免發生非預期的資料存取行為,建議您一併檢查並撤銷資料集上的所有現有訂閱項目。
如要建立 IAM 拒絕政策,禁止使用者查看資料集存取權控管,請拒絕下列權限:
bigquery.datasets.get
bigquery.datasets.getIamPolicy
如要建立 IAM 拒絕政策,禁止更新資料集存取權控管設定,請拒絕下列權限:
bigquery.datasets.update
bigquery.datasets.setIamPolicy
後續步驟
瞭解如何使用 projects.testIamPermissions
方法測試使用者對資源的存取權。