使用 IAM 控管資源的存取權
本文說明如何查看資源目前的存取權政策、如何授予資源存取權,以及如何撤銷資源存取權。
本文假設您已熟悉 Google Cloud中的身分與存取權管理 (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
查看資源的存取權政策
下列各節說明如何查看不同資源的存取權政策。
查看資料集的存取權政策
選取下列選項之一:
主控台
前往「BigQuery」頁面
在「Explorer」窗格中展開專案並選取資料集。
依序點選 >「權限」。
「共用」資料集存取政策會顯示在「Dataset Permissions」(資料集權限) 窗格中。
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 檔案的路徑
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」窗格中展開專案,然後選取資料表或檢視區塊。
點選「分享」圖示
。表格或檢視畫面存取權政策會顯示在「共用」窗格中。
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 檔案的路徑
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 政策。
存取權政策詳細資料會顯示在傳回的政策物件中。
授予資源存取權
下列各節將說明如何授予不同資源的存取權。
授予資料集存取權
您可以授予 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
。
按一下「執行」
。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
以下範例會將資料集 myDataset
的「資料檢視者」角色授予使用者:
GRANT `roles/bigquery.dataViewer`
ON SCHEMA `myProject`.myDataset
TO "user:raha@example-pet-store.com", "user:sasha@example-pet-store.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
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:hao@altostrat.com", ] } binding { role = "roles/bigquery.dataOwner" members = [ "group:dba@altostrat.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:raha@altostrat.com", "group:analysts@altostrat.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:yuri@altostrat.com" }
如要在 Google Cloud 專案中套用 Terraform 設定,請完成下列各節的步驟。
準備 Cloud Shell
- 啟動 Cloud Shell。
-
設定要套用 Terraform 設定的預設 Google Cloud 專案。
每項專案只需要執行一次這個指令,且可以在任何目錄中執行。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
如果您在 Terraform 設定檔中設定明確值,環境變數就會遭到覆寫。
準備目錄
每個 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 已建立或更新這些資源。
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()
函式來更新屬性。
授予資料表或檢視表的存取權
選取下列選項之一:
主控台
前往「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
:
GRANT `roles/bigquery.dataViewer`
ON TABLE `myProject`.myDataset.myTable
TO "user:raha@example-pet-store.com", "user:sasha@example-pet-store.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:成員類型,例如
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:raha@altostrat.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:analysts@altostrat.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
- 啟動 Cloud Shell。
-
設定要套用 Terraform 設定的預設 Google Cloud 專案。
每項專案只需要執行一次這個指令,且可以在任何目錄中執行。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
如果您在 Terraform 設定檔中設定明確值,環境變數就會遭到覆寫。
準備目錄
每個 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 已建立或更新這些資源。
API
如要擷取目前的政策,請呼叫
tables.getIamPolicy
方法。編輯政策,新增成員或繫結,或兩者皆新增。 如要瞭解政策的格式規定,請參閱「政策」參考主題。
呼叫
tables.setIamPolicy
寫入更新後的政策。
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()
函式,儲存資料表或檢視區塊的存取權政策變更。
授予處理常式存取權
如要提供意見回饋或尋求這項功能的支援,請傳送電子郵件至 bq-govsec-eng@google.com。
選取下列選項之一:
主控台
前往「BigQuery」頁面
在「Explorer」窗格中,展開專案和資料集,然後選取要共用的常式。
點選「分享」圖示
。按一下
「新增成員」。在「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
區段。繫結會將一或多個members
或主體繫結至單一role
。主體可以是使用者帳戶、服務帳戶、Google 群組和網域。舉例來說,常式 JSON 檔案中的bindings
區段應會與以下內容類似:{ "bindings": [ { "role": "roles/bigquery.dataViewer", "members": [ "user:izumi@example.com", "group:admins@example.com", "domain:google.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
API
如要擷取目前的政策,請呼叫
routines.getIamPolicy
方法。編輯政策,新增成員、繫結或兩者皆是。 如要瞭解政策的格式規定,請參閱「政策」參考主題。
呼叫
routines.setIamPolicy
寫入更新後的政策。
撤銷資源存取權
下列各節將說明如何撤銷不同資源的存取權。
撤銷資料集存取權
選取下列選項之一:
主控台
前往「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
的管理員角色:
REVOKE `roles/bigquery.admin`
ON SCHEMA `myProject`.myDataset
FROM "group:example-team@example-pet-store.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」頁面
在「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
的管理員角色:
REVOKE `roles/bigquery.admin`
ON TABLE `myProject`.myDataset.myTable
FROM "group:example-team@example-pet-store.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.
如要撤銷資料表或檢視表的存取權,請使用
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:成員類型,例如
API
如要擷取目前的政策,請呼叫
tables.getIamPolicy
方法。編輯政策,移除成員或繫結,或兩者皆移除。 如要瞭解政策的格式規定,請參閱「政策」參考主題。
呼叫
tables.setIamPolicy
寫入更新後的政策。
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。
選取下列選項之一:
主控台
前往「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 檔案,請使用
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 檔案的路徑
變更 JSON 檔案的
access
區段。您可以移除任何specialGroup
項目:projectOwners
、projectWriters
、projectReaders
和allAuthenticatedUsers
。您也可以移除下列任何項目:userByEmail
、groupByEmail
和domain
。舉例來說,常式 JSON 檔案中的access
區段應會與以下內容類似:{ "bindings": [ { "role": "roles/bigquery.dataViewer", "members": [ "user:izumi@example.com", "group:admins@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
API
- 如要擷取目前的政策,請呼叫
routines.getIamPolicy
方法。 編輯政策,新增成員或繫結,或兩者皆新增。 如要瞭解政策的格式規定,請參閱「政策」參考主題。
拒絕存取資源
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
限制
- 複製的日常安排不會包含日常安排存取控制清單 (ACL)。
- 外部或連結資料集中的常式不支援存取控制項。
- 外部或連結資料集中的資料表不支援存取控制項。
- 無法使用 Terraform 設定日常安排存取權控管機制。
- 您無法使用 Google Cloud SDK 設定例行存取控管機制。
- 無法使用 BigQuery 資料控管語言 (DCL) 設定例行存取權控管。
- Data Catalog 不支援例行存取權控管。如果使用者已有條件地授予常式層級存取權,他們就不會在 BigQuery 側邊面板中看到自己的常式。如要解決這個問題,請改為授予資料集層級的存取權。
- 「
OBJECT_PRIVILEGES
」檢視畫面不會顯示日常作業存取權控管。
後續步驟
瞭解如何使用 projects.testIamPermissions
方法測試使用者對資源的存取權。