使用 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
- 啟動 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: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
準備目錄
每個 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:成員類型,例如
- 啟動 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: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
準備目錄
每個 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()
函式,儲存資料表或檢視區塊的存取權政策變更。
授予處理常式存取權
如要提供意見回饋或尋求這項功能的支援,請傳送電子郵件至 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
如要擷取目前的政策,請呼叫
routines.getIamPolicy
方法。編輯政策,新增成員、繫結或兩者皆是。 如要瞭解政策的格式規定,請參閱「政策」參考主題。
呼叫
routines.setIamPolicy
寫入更新後的政策。
API
撤銷資源存取權
下列各節將說明如何撤銷不同資源的存取權。
撤銷資料集存取權
選取下列選項之一:
主控台
前往「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:成員類型,例如
如要擷取目前的政策,請呼叫
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。
選取下列選項之一:
主控台
前往「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
- 如要擷取目前的政策,請呼叫
routines.getIamPolicy
方法。 編輯政策,新增成員或繫結,或兩者皆新增。 如要瞭解政策的格式規定,請參閱「政策」參考主題。
API
拒絕存取資源
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
方法測試使用者對資源的存取權。