本文說明如何在 Dataform 中執行下列操作:
事前準備
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles. - Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
Verify that billing is enabled for your Google Cloud project.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM
role (roles/serviceusage.serviceUsageAdmin), which
contains the serviceusage.services.enable permission. Learn how to grant
roles.
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
Verify that billing is enabled for your Google Cloud project.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM
role (roles/serviceusage.serviceUsageAdmin), which
contains the serviceusage.services.enable permission. Learn how to grant
roles.
授予 Dataform 必要存取權
本節說明如何授予 Dataform 服務代理程式和自訂服務帳戶執行 BigQuery 工作流程所需的 Identity and Access Management (IAM) 角色。
關於自訂服務帳戶和 Dataform 服務代理人
您可以透過下列方式設定自訂服務帳戶,代表您執行工作流程:
- 在「存放區」層級,執行特定存放區中的所有工作流程。
- 每個工作流程設定都會個別計費。
建立 Dataform 存放區或工作流程設定時,您可以選取任何具備「扮演」權限的服務帳戶。您必須為與 Dataform 資源相關聯的所有服務帳戶,設定必要的「act-as」權限。
建立第一個 Dataform 存放區時,Dataform 會自動產生服務代理程式。Dataform 會使用服務代理程式代表您與 BigQuery 互動。
Dataform 服務代理 ID 的格式如下:
service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com
將 PROJECT_NUMBER 替換為專案的數字 ID。Google Cloud 您可以在 Google Cloud 控制台資訊主頁中找到專案 ID。Google Cloud 詳情請參閱「尋找專案名稱、編號和 ID」。
Dataform 服務代理、自訂服務帳戶和 Google 帳戶的必要角色
用於在 Dataform 中驗證的 Dataform 服務代理程式、自訂服務帳戶和 Google 帳戶的使用者憑證 (搶先版),必須具備下列 BigQuery IAM 角色,才能在 BigQuery 中執行工作流程:
- BigQuery 資料編輯者
(
roles/bigquery.dataEditor) 專案,Dataform 需要這些專案的讀取和寫入權限。這些通常包括代管 Dataform 存放區的專案。 - Dataform 需要唯讀存取權的專案,請授予「BigQuery 資料檢視者」(
roles/bigquery.dataViewer) 角色。 - 專案的 BigQuery 工作使用者
(
roles/bigquery.jobUser),該專案會代管您的 Dataform 存放區。 - BigQuery 資料擁有者
(
roles/bigquery.dataOwner) (如要查詢 BigQuery 資料集)。 - 資料欄層級存取控管的 BigQuery 角色,如果您想使用 BigQuery 政策標記。
此外,請在工作流程設定的有效服務帳戶中,將下列角色授予 Dataform 服務代理。您必須具備這些角色,才能使用嚴格的 act-as 模式。
如要自動發布存放區和自動執行工作流程,請在有效服務帳戶中,授予 Dataform 服務代理人 iam.serviceAccounts.actAs 權限。
安全性考量
將 Dataform 服務代理、自訂服務帳戶或使用者 Google 帳戶 (搶先版) 所需的角色授予這些對象時,請注意下列安全性考量事項:
無論 VPC Service Controls 為何,只要自訂服務帳戶獲得必要角色,就能存取服務帳戶所屬專案中的 BigQuery 或 Secret Manager。當 Dataform 使用自訂服務帳戶執行工作流程時,系統會將 Dataform 要求視為源自於包含存放區的專案 VPC Service Controls 範圍內。因此,如果這些資源位於相同的服務範圍內,VPC Service Controls 不會封鎖 Dataform 與其他服務 (例如 BigQuery 或 Secret Manager) 之間的通訊。
如要進一步瞭解如何管理這些安全邊界,請參閱「設定 VPC Service Controls」。
只要使用者擁有
dataform.repositories.createIAM 權限,就能使用 Dataform 服務代理程式和授予該服務代理程式或服務帳戶的所有權限執行程式碼。詳情請參閱「Dataform 權限的安全考量」。
為維持安全的權限模型,請定期稽核 Dataform 服務代理程式角色繫結。如需詳細的監控操作說明,請參閱「使用 Security Command Center 監控服務代理程式權限」。
如要限制使用者、服務代理程式或服務帳戶在 BigQuery 中讀取或寫入的資料,您可以將精細的 BigQuery IAM 權限授予所選的 BigQuery 資料集或資料表。詳情請參閱「控管資料集存取權」和「控管資料表和檢視區塊的存取權」。
為防止使用者在其他使用者的 Google 帳戶中執行動作,系統會強制執行下列限制:
- 如要使用附加至工作流程的其他 Google 帳戶使用者憑證修改工作流程設定,您必須將自己 Google 帳戶的使用者憑證附加至工作流程設定,或變更工作流程設定,以便透過自訂服務帳戶進行驗證。
- 如果工作流程設定參照的發行設定已附加其他 Google 帳戶使用者的憑證,您就無法修改發行設定的彙整結果。
您無法將工作流程設定為透過 Google 帳戶使用者憑證進行驗證,也無法參照排程發布設定。這項限制會造成下列影響:
- 如果工作流程設定參照的發布設定已設為使用 Google 帳戶使用者憑證進行驗證,您就無法更新發布設定,改為使用時間表。
- 您無法建立工作流程設定,透過 Google 帳戶使用者憑證進行驗證,並指向具有時間表的發布設定。
- 您無法建立或更新工作流程設定,以使用 Google 帳戶使用者憑證,並指向排定發布時間的發布設定。
授予必要的 BigQuery 角色
如要將必要的 BigQuery IAM 角色授予 Dataform 服務代理程式、要在 Dataform 中使用的自訂服務帳戶,或要用於在 Dataform 中驗證的使用者 Google 帳戶 (搶先版),請按照下列步驟操作:
前往 Google Cloud 控制台的「Dataform」頁面。
選取或建立存放區。
前往 Google Cloud 控制台的「IAM」(身分與存取權管理) 頁面。
點選「授予存取權」。
在「新增主體」欄位中,輸入服務代理人 ID、服務帳戶 ID 或使用者的 Google 帳戶電子郵件地址 (預覽版)。
在「Select a role」(選取角色) 清單中,選取「BigQuery Job User」(BigQuery 工作使用者) 角色。
點選「新增其他角色」,然後在「請選擇角色」清單中,選取「BigQuery 資料編輯者」角色。
點選「新增其他角色」,然後在「請選擇角色」清單中,選取「BigQuery 資料檢視者」角色。
按一下 [儲存]。
授予自動工作流程所需的角色
如要在 Dataform 中使用自訂服務帳戶,Dataform 服務代理程式必須能夠存取該帳戶。這樣一來,Dataform 就能使用自訂服務帳戶中定義的權限執行工作流程,而非服務代理程式帳戶的權限。
如要授予這項存取權,您需要將服務帳戶權杖建立者角色 (roles/iam.serviceAccountTokenCreator) 授予 Dataform 服務代理程式做為主體。這樣一來,Dataform 服務代理程式就能建立短期憑證 (又稱權杖),模擬服務帳戶。Dataform 必須使用這些權杖,才能透過自訂服務帳戶的身分執行工作流程。
您也需要將服務帳戶使用者角色 (roles/iam.serviceAccountUser) 授予 Dataform 服務代理程式。這樣一來,Dataform 服務代理程式就能為自訂服務帳戶執行的工作流程設定,啟動新的自動工作流程執行作業。
如要授予 Dataform 服務代理程式自訂服務帳戶的存取權,請按照下列步驟操作:
在 Google Cloud 控制台中,依序前往「IAM」>「Service accounts」(服務帳戶)。
選取自訂服務帳戶所在的專案 Google Cloud 。
在「專案『PROJECT_NAME』的服務帳戶」頁面,選取自訂服務帳戶。
前往「具備存取權的主體」,然後點選「授予存取權」。
在「新增主體」欄位輸入 Dataform 服務代理 ID。
Dataform 服務代理 ID 的格式如下:
service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com在「Select a role」(選取角色) 清單中,選取「Service Account Token Creator」(服務帳戶憑證建立者) 角色和「Service Account User」(服務帳戶使用者) 角色。
按一下 [儲存]。
自訂服務帳戶現已準備就緒,可在 Dataform 存放區中設定。
稽核服務帳戶設定
本節說明如何稽核 Dataform 資源,確保服務帳戶使用方式和權限授予作業正確無誤。使用自訂服務帳戶時,稽核尤其重要,因為這類帳戶需要特定權限,Dataform 服務代理程式才能運作。
為 Dataform 存放區或工作流程設定使用自訂服務帳戶時,請務必確認 Dataform 服務代理程式在自訂服務帳戶中具有服務帳戶使用者角色 (roles/iam.serviceAccountUser)。這個角色會授予 iam.serviceAccounts.actAs 權限,讓 Dataform 服務代理程式啟動的排定執行作業,可以模擬自訂服務帳戶。此外,請確認 Dataform 服務代理程式在有效服務帳戶中,是否具備服務帳戶憑證建立者角色 (roles/iam.serviceAccountTokenCreator)。
驗證存放區服務帳戶
首先,請找出 Dataform 本身排程和執行作業範圍內的 dataform.Repository 資產。然後,驗證這些範圍內存放區的服務帳戶設定。
使用 Cloud Asset Inventory 列出所有
dataform.Repository類型的資源。 詳情請參閱「查看資產」一文。針對 Cloud Asset Inventory 輸出內容中的每個存放區,請檢查
resource.data.labels欄位,判斷是否在範圍內。實際路徑可能會因匯出格式而略有不同。檢查
single-file-asset-type鍵的標籤對應,找出範圍外的存放區。如果存在這個金鑰,表示 BigQuery 功能正在使用存放區。如果值為sql或data_canvas,系統會將存放區排除在服務帳戶權限檢查之外。其餘缺少這組金鑰或這些值的存放區,都在服務帳戶權限檢查的範圍內。
針對每個適用範圍內的存放區,檢查 Cloud Asset Inventory 輸出內容中的
resource.data.serviceAccount欄位,判斷是否已設定自訂服務帳戶:- 如果
resource.data.serviceAccount欄位存在,且值與專案的 Dataform 服務代理程式電子郵件地址不同,則存放區會使用自訂服務帳戶。 如果缺少
resource.data.serviceAccount欄位,或該欄位的值與專案的 Dataform 服務代理程式相符,則存放區會使用服務代理程式。
- 如果
如果使用自訂服務帳戶,請確認 Dataform 服務代理在該自訂服務帳戶中,同時具備「服務帳戶使用者」角色 (
roles/iam.serviceAccountUser) 和「服務帳戶權杖建立者」角色 (roles/iam.serviceAccountTokenCreator)。
驗證工作流程設定服務帳戶
為 Dataform 工作流程設定使用專屬的自訂服務帳戶,是符合最低權限原則的安全最佳做法。
如要驗證 dataform.WorkflowConfig resources 的服務帳戶用量,請按照下列步驟操作:
使用 Cloud Asset Inventory 列出
dataform.WorkflowConfig類型的所有資源。針對每個工作流程設定,檢查 Cloud Asset Inventory 輸出內容,判斷有效的服務帳戶:
- 如果存在
resource.data.serviceAccount欄位,這個值就是工作流程設定中明確設定的服務帳戶電子郵件地址。 - 如果缺少
resource.data.serviceAccount欄位,工作流程設定會沿用父項存放區的服務帳戶。請檢查父項存放區的設定,找出有效的服務帳戶。
- 如果存在
如要判斷是否使用自訂服務帳戶,請比較有效服務帳戶的電子郵件地址與專案的 Dataform 服務代理程式電子郵件地址。如果不同,表示目前使用的是自訂服務帳戶。
如果使用自訂服務帳戶,請確保 Dataform 服務代理已獲得該自訂服務帳戶的「服務帳戶使用者」角色 (
roles/iam.serviceAccountUser) 和「服務帳戶權杖建立者」角色 (roles/iam.serviceAccountTokenCreator)。有了這些權限,Dataform 服務代理程式就能以自訂服務帳戶的身分啟動工作流程執行作業。
使用 Security Command Center 監控服務代理程式權限
為確保持續遵守最小權限原則,請在 Security Command Center 中主動監控專案,找出與權限過多的服務帳戶和服務代理相關的發現項目。
如需在 Security Command Center 中查看及套用補救措施發現項目的操作說明,請參閱「IAM 建議工具發現項目」和「在控制台中調查身分發現項目」。
修正 Dataform 服務代理的 SERVICE_AGENT_GRANTED_BASIC_ROLE 發現項目時,請將權限過高的角色,替換為具有最低必要權限的預先定義角色,並將範圍限定為特定資源。舉例來說,您可以授予特定服務帳戶的服務帳戶使用者角色 (roles/iam.serviceAccountUser)。
使用 IAM 控管 Dataform 的存取權
本節說明 Dataform 的存取權控管選項,並介紹如何查看及授予 Dataform 角色。Dataform 使用 Identity and Access Management (IAM) 控管存取權。如要進一步瞭解 IAM 中的角色和權限,請參閱「IAM 角色和權限索引」。
預先定義的 Dataform 角色
下表列出可存取 Dataform 資源的預先定義角色:
| Role | Permissions |
|---|---|
Dataform Admin( Full access to all Dataform resources. |
|
Dataform Editor( Edit access to Workspaces and Read-only access to Repositories. |
|
Dataform Viewer( Read-only access to all Dataform resources. |
|
Code Commenter Beta( Permissions to comment, at the repository level. Grants CRUD access over commentThread and comment resources. |
|
Code Creator( Access only to private and shared code resources. The permissions in the Code Creator let you create and list code in Dataform, and access only the code that you created and code that was explicitly shared with you. |
|
Code Editor( Edit access code resources. |
|
Code Owner( Full access to code resources. |
|
Code Scheduler Beta( Access for scheduling workflows and releases. |
|
Code Viewer( Read-only access to all code resources. |
|
Team Folder Commenter Beta( View and comment access to a team folder and its contents. |
|
Team Folder Contributor( Edit access to a team folder and its contents. |
|
Team Folder Creator( Access to create new team folders. |
|
Team Folder Owner( Full access to a team folder and its contents. Can share the team folder and its contents. |
|
Team Folder Viewer( View access to a team folder and its contents. |
|
Service agent roles
Service agent roles should only be granted to service agents.
| Role | Permissions |
|---|---|
Dataform Service Agent( Gives permission for the Dataform API to access a secret from Secret Manager |
|
自訂 Dataform 角色
自訂角色可包含您指定的任何權限。您可以建立自訂角色,並授予執行特定管理作業的權限,例如建立開發工作區,或在開發工作區中建立檔案和目錄。如要建立自訂角色,請參閱「建立及管理自訂角色」。
Dataform 權限的安全考量
只要使用者具備 dataform.repositories.create 權限,就能使用自訂服務帳戶和授予該服務帳戶的所有權限,在 BigQuery 中執行程式碼。包括執行 Dataform 工作流程。
由於系統會對所有存放區強制執行嚴格的 act-as 模式,因此 dataform.repositories.create 權限會隱含要求使用者對自訂服務帳戶具有 act-as 權限,才能執行後續工作流程。確保只有具備明確模擬權限的使用者,才能使用服務帳戶的身分執行程式碼。
下列 IAM 角色具備 dataform.repositories.create 權限:
- BigQuery 管理員 (
roles/bigquery.admin) - BigQuery Job User (
roles/bigquery.jobUser) - BigQuery Studio 使用者 (
roles/bigquery.studioUser) - BigQuery 使用者 (
roles/bigquery.user) - 程式碼建立工具 (
roles/dataform.codeCreator) - 程式碼編輯器 (
roles/dataform.codeEditor) - 程式碼擁有者 (
roles/dataform.codeOwner) - Colab Enterprise 使用者 (
roles/aiplatform.colabEnterpriseUser) - Dataform 管理員 (
roles/dataform.admin)
如要限制使用者或服務帳戶在 BigQuery 中讀取或寫入的資料,您可以將精細的 BigQuery IAM 權限授予所選的 BigQuery 資料集或資料表。詳情請參閱「控管資料集存取權」和「控管資料表和檢視區塊的存取權」。
如要進一步瞭解自訂服務帳戶,以及這些帳戶需要的角色和權限,請參閱授予 Dataform 必要存取權。
在套件安裝期間存取密鑰
如果您使用 Secret Manager 密鑰設定私有 NPM 套件,擁有修改程式碼權限或從存放區中特定 Git 提交觸發程式碼編譯作業的使用者,可能會存取這些密鑰。
在套件安裝期間 (手動在工作區中安裝套件或從特定 Git 提交編譯程式碼時觸發),NPM 用戶端會從 .npmrc 檔案讀取憑證,並將驗證權杖傳輸至已設定的 NPM 登錄檔。如果使用者有權修改工作區中的 .npmrc 檔案,可以設定將登錄要求重新導向至外部伺服器,藉此存取密鑰。
在下列情況中,可能會發生這種安裝作業和權杖暴露風險:
Workspace 套件安裝:在工作區中手動觸發。 這需要工作區編輯權限,可透過「Dataform 編輯器」(
roles/dataform.editor) 或「Dataform 程式碼編輯器」(roles/dataform.codeEditor) 角色取得。編譯 Git 修訂版本:在存放區中為 Git 參照 (例如分支版本或標記) 建立編譯結果時,系統會自動觸發這項作業。您必須具備
dataform.compilationResults.create權限,才能執行這項操作。
為確保憑證安全,建議採取下列做法:
請只授予受信任的使用者具有存放區編輯權限 (例如 Dataform 程式碼編輯者) 或編譯權限 (例如 Dataform 程式碼檢視者) 的角色。
使用組織政策,限制 Dataform 可連線的遠端 Git 存放區。詳情請參閱「限制遠端存放區」。
將 Dataform 服務代理的 Secret Manager 存取權,限制為僅限必要的密鑰。
查看 Dataform 角色
在 Google Cloud 控制台中,執行下列步驟:
前往「IAM & Admin」(IAM 與管理) >「Roles」(角色) 頁面。
在「Filter」(篩選器) 欄位中,選取「Used in」(使用於),輸入
Dataform,然後按 Enter 鍵。按一下列出的任一角色,即可在右側窗格中查看該角色的權限。
舉例來說,Dataform 管理員角色具備所有 Dataform 資源的完整存取權。
想進一步瞭解如何授予專案角色,請參閱「授予角色」。您可以透過這種方式授予預先定義或自訂角色。
控管個別存放區的存取權
如要使用精細權限控管 Dataform 的存取權,可以透過 Dataform API repositories.setIamPolicy 要求,在個別存放區設定 Dataform IAM 角色。
如要為個別 Dataform 存放區設定 Dataform IAM 角色,請按照下列步驟操作:
在終端機中,傳遞 Dataform API
repositories.setIamPolicy要求和存取政策。在政策中,以以下格式將使用者、群組、網域、服務代理或服務帳戶繫結至所選角色:
{ "policy": { "bindings": [ { "role": "roles/ROLE", "members": [ "TYPE:IDENTIFIER", ] }, ], } }更改下列內容:
ROLE:您要在存放區授予的 Dataform IAM 角色。TYPE:user、group、domain或serviceAccount。IDENTIFIER:要授予角色的使用者、群組、網域或服務帳戶。
在 IAM 頁面中,確認所有使用者都能透過具有
dataform.repositories.list權限的 Dataform 角色,查看完整的 Dataform 存放區清單。在 IAM 中,請確保只有需要完整存取所有 Dataform 存放區的使用者,才能在所有存放區中獲派 Dataform 管理員角色。
下列指令會傳遞 repositories.setIamPolicy Dataform API 要求,在 sales 存放區中授予單一使用者 Dataform 編輯者角色:
curl -H "Content-Type: application/json" -X POST -d '{ "policy": { "bindings": [{ "role": "roles/dataform.editor", "members": ["user:sasha@examplepetstore.com"]}] }}' "https://dataform.googleapis.com/v1/projects/examplepetstore/locations/us-central1/repositories/sales:setIamPolicy"
授予存放區公開存取權
如要授予 Dataform 存放區的公開存取權,請將存放區的 IAM 角色授予 allAuthenticatedUsers 主體。
將 IAM 角色指派給allAuthenticatedUsers主體後,透過 Google 帳戶完成驗證的服務帳戶和所有使用者,都會獲得該角色。這包括未連結至 Google Workspace 帳戶或 Cloud Identity 網域的帳戶,例如個人 Gmail 帳戶。未通過驗證的使用者 (例如匿名訪客) 不會具有這個識別碼。詳情請參閱「所有已通過驗證的使用者」。
舉例來說,如果您在 sales 存放區中授予 allAuthenticatedUsers Dataform 檢視者角色,所有透過 Google 帳戶驗證的服務帳戶和使用者,都能以唯讀模式存取所有 sales 程式碼資源。
如要授予 Dataform 存放區的公開存取權,請按照下列步驟操作:
在終端機中,傳遞 Dataform API
repositories.setIamPolicy要求和存取政策。在政策中,將
allAuthenticatedUsers主體繫結至所選角色,格式如下:{ "policy": { "bindings": [ { "role": "roles/ROLE", "members": [ "allAuthenticatedUsers", ] }, ], } }將
ROLE替換為要授予所有已驗證使用者的 Dataform IAM 角色。
下列指令會傳遞 repositories.setIamPolicy Dataform API 要求,將 sales 存放區的 Dataform 檢視者角色授予 allAuthenticatedUsers:
curl -H "Content-Type: application/json" -X POST -d '{ "policy": { "bindings": [{ "role": "roles/dataform.viewer", "members": ["allAuthenticatedUsers"]}] }}' "https://dataform.googleapis.com/v1/projects/examplepetstore/locations/us-central1/repositories/sales:setIamPolicy"
禁止公開存取存放區
如要確保任何 Dataform 存放區都不會授予公開存取權,您可以在專案中限制 allAuthenticatedUsers 主體。
如要在專案中限制 allAuthenticatedUsers,您可以設定 iam.allowedPolicyMemberDomains 政策,並從 allowed_values 清單中移除 allAuthenticatedUsers。
在iam.allowedPolicyMemberDomains政策中限制 allAuthenticatedUsers 時,專案中的任何 IAM 政策都無法使用 allAuthenticatedUsers 主體,這可防止授予所有資源 (包括 Dataform 存放區) 的公開存取權。
如要進一步瞭解 iam.allowedPolicyMemberDomains 政策,以及如何設定這項政策,請參閱「依照網域設定身分限制」。
Dataform 中的員工身分聯盟
透過員工身分聯盟,您可以使用外部識別資訊提供者 (IdP) 的服務驗證及授權使用者存取 Google Cloud 服務,並透過 IAM 管理存取權。
Dataform 支援員工身分聯盟,且沒有已知限制。
使用 IAM 控管個別資料表的存取權
本節說明如何為個別 Dataform 資料表和檢視區塊授予及撤銷 BigQuery IAM 角色。
Dataform 執行資料表或檢視區塊時,會在 BigQuery 中建立資源。在 Dataform 中開發時,您可以將 BigQuery 角色授予個別資料表和檢視區塊,以便在執行後控管 BigQuery 中的存取權。
如要進一步瞭解如何授予及撤銷資源存取權,請參閱「授予資源存取權」。
將 BigQuery 角色授予資料表或檢視表
如要將 BigQuery 角色授予資料表或檢視區塊,請在所選資料表或檢視區塊的 .sqlx 定義檔中,新增含有 GRANT DCL 陳述式的 post_operations 區塊。
如要將 BigQuery 角色授予所選資料表或檢視畫面,請按照下列步驟操作:
前往 Google Cloud 控制台的「Dataform」頁面。
選取存放區,然後選取工作區。
在「檔案」窗格中,展開
definitions/目錄。選取要授予存取權的資料表或檢視區塊的
.sqlx定義檔案。在檔案中輸入下列程式碼片段:
post_operations { GRANT "ROLE_LIST" ON "RESOURCE_TYPE" ${self()} TO "USER_LIST" }更改下列內容:
ROLE_LIST:要授予的 BigQuery 角色或以半形逗號分隔的 BigQuery 角色清單。
RESOURCE_TYPE:
TABLE或VIEW。USER_LIST:以半形逗號分隔的使用者清單,這些使用者會獲得角色。
如需有效格式清單,請參閱「user_list」。
選用:按一下「格式」。
執行資料表或檢視畫面。
如果您在累加資料表上授予存取權,請在第一次執行後,從資料表定義檔案中移除
GRANT陳述式。
下列程式碼範例顯示授予使用者資料表的 BigQuery 檢視者角色:
config { type: "table" }
SELECT ...
post_operations {
GRANT `roles/bigquery.dataViewer`
ON TABLE ${self()}
TO "user:222larabrown@gmail.com"
}
從資料表或檢視區塊撤銷 BigQuery 角色
如要從資料表或檢視區塊撤銷 BigQuery 角色,請在所選資料表或檢視區塊的 .sqlx 定義檔中,新增包含 REVOKE DCL 陳述式的 post_operations 區塊。
如要從所選資料表或檢視畫面撤銷 BigQuery 角色,請按照下列步驟操作:
前往 Google Cloud 控制台的「Dataform」頁面。
選取存放區,然後選取工作區。
在「檔案」窗格中,展開
definitions/目錄。選取要撤銷存取權的資料表或檢視區塊的
.sqlx定義檔案。在
post_operations區塊中,輸入下列REVOKE陳述式:REVOKE "ROLE_LIST" ON "RESOURCE_TYPE" ${self()} FROM "USER_LIST"更改下列內容:
- ROLE_LIST:要撤銷的 BigQuery 角色或以半形逗號分隔的 BigQuery 角色清單。
- RESOURCE_TYPE:
TABLE或VIEW。 - USER_LIST:以半形逗號分隔的使用者清單,這些使用者的角色將遭到撤銷。如需有效格式清單,請參閱「user_list」。
如要撤銷檔案中
GRANT陳述式授予的存取權,請將GRANT陳述式替換為REVOKE陳述式。選用:按一下「格式」。
執行資料表或檢視畫面。
如果撤銷增量資料表的存取權,請在第一次執行後,從資料表定義檔案中移除
REVOKE陳述式。
下列程式碼範例顯示從資料表撤銷使用者 BigQuery 檢視者角色:
config { type: "table" }
SELECT ...
post_operations {
REVOKE `roles/bigquery.dataViewer`
ON TABLE ${self()}
FROM "user:222larabrown@gmail.com"
}
集中管理資料表和檢視的 BigQuery 角色
如要從單一位置控管 BigQuery 對個別資料表和檢視區塊的存取權,您可以建立專用的 type: "operations" 檔案,並使用 GRANT 和 REVOKE DCL 陳述式。
如要透過單一type: "operations"檔案管理 BigQuery 資料表存取權,請按照下列步驟操作:
前往 Google Cloud 控制台的「Dataform」頁面。
選取存放區,然後選取工作區。
在「Files」(檔案) 窗格中,點按
definitions/旁的
「更多」選單。點選「建立檔案」。
在「Add a file path」(新增檔案路徑) 欄位中,輸入檔案名稱,然後在
definitions/後方輸入.sqlx。例如:definitions/table-access.sqlx。檔案名稱只能包含數字、英文字母、連字號和底線。
點選「建立檔案」。
在「檔案」窗格中,展開
definitions/目錄,然後選取新建立的檔案。在檔案中輸入下列程式碼片段:
config { type: "operations" } GRANT "ROLE_LIST" ON RESOURCE_TYPE RESOURCE_NAME TO "USER_LIST" REVOKE "ROLE_LIST" ON { "<var>" }}RESOURCE_TYPE RESOURCE_NAME TO "USER_LIST"更改下列內容:
- ROLE_LIST:要授予或撤銷的 BigQuery 角色或以半形逗號分隔的 BigQuery 角色清單。
- RESOURCE_TYPE:
TABLE或VIEW。 - RESOURCE_NAME:資料表或檢視區塊的名稱。
- USER_LIST:以半形逗號分隔的使用者清單,這些使用者會獲得或遭撤銷角色。如需有效格式清單,請參閱「user_list」。
視需要加入
GRANT和REVOKE陳述式。如要撤銷檔案中
GRANT陳述式授予的存取權,請將GRANT陳述式替換為REVOKE陳述式。移除
GRANT陳述式而不新增REVOKE陳述式,不會撤銷存取權。
選用:按一下「格式」。
每次更新後都執行檔案。
- 如果您在增量資料表上授予或撤銷存取權,請在第一次執行陳述式後,從檔案中移除
GRANT或REVOKE陳述式。
- 如果您在增量資料表上授予或撤銷存取權,請在第一次執行陳述式後,從檔案中移除
使用 Config API 自訂 IAM 行為
您可以使用 projects.locations.updateConfig Dataform API 方法自訂 IAM 行為,並提升安全性。
在建立資源時授予特定角色
在 projects.locations.repositories 資源中將 setAuthenticatedUserAdmin 欄位設為 true 時,Dataform 會自動授予建立存放區的使用者該存放區的 Dataform 管理員角色 (roles/dataform.admin)。此外,Dataform 會將新工作區的 Dataform 管理員角色授予給在該存放區中建立工作區的任何使用者。
您可以在 projects.locations.updateConfig 方法中使用 creator_role 欄位(預覽) 覆寫這項行為。如果 setAuthenticatedUserAdmin 為 true,且您使用自訂角色設定 creator_role 欄位,Dataform 會授予自訂角色,而非預設的 dataform.admin 角色。
實作進階排程權限
如要規定使用者必須具備明確權限才能排定 Dataform 工作流程,請在 projects.locations.updateConfig 方法中,將 enable_project_checks_for_scheduling 欄位設為 true。
啟用排程檢查時,使用者必須具備下列權限:
如要建立工作流程設定,請按照下列步驟操作:
- 專案的
dataform.workflowConfigs.create權限,由程式碼排程器角色 (roles/dataform.codeScheduler) 授予。 - 存放區的
dataform.repositories.scheduleWorkflow權限,由 Dataform 管理員角色 (roles/dataform.admin) 授予。
- 專案的
如要建立發布設定,請按照下列步驟操作:
- 專案的
dataform.releaseConfigs.create權限,由程式碼排程器角色 (roles/dataform.codeScheduler) 授予。 - 存放區的
dataform.repositories.scheduleRelease權限,由 Dataform 管理員角色 (roles/dataform.admin) 授予。
- 專案的
啟用私人工作區
如要限制 Dataform 工作區存取權,只允許工作區建立者在該工作區中讀取及編寫程式碼,請在 projects.locations.updateConfig 方法中,將 enable_private_workspace 欄位設為 true。
這項限制也適用於查看產生的構件,例如編譯的 SQL、編譯錯誤,以及工作區編譯或工作流程調用的執行記錄。
這項設定會覆寫標準 IAM 角色,將工作區存取權授予其他存放區使用者。
後續步驟
- 如要進一步瞭解 IAM,請參閱「IAM 總覽」。
- 如要進一步瞭解如何管理資源存取權,請參閱「管理專案、資料夾和機構的存取權」。
- 如要進一步瞭解員工身分聯盟的重要概念,請參閱「員工身分聯盟」。
- 如要進一步瞭解 BigQuery IAM 角色和權限,請參閱「使用 IAM 控管存取權」。
- 如要進一步瞭解如何授予 BigQuery 資料集精細權限,請參閱「控管資料集存取權」。