使用 IAM 控管存取權

本文件說明如何在 Dataform 中執行下列操作:

事前準備

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the BigQuery and Dataform APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery and Dataform APIs.

    Enable the APIs

  8. 授予 Dataform 必要存取權

    本節將說明如何授予 Dataform 服務帳戶在 BigQuery 中執行工作流程所需的身分與存取權管理 (IAM) 角色。

    關於 Dataform 中的服務帳戶

    建立第一個 Dataform 存放區時,Dataform 會自動產生預設服務帳戶。Dataform 會使用預設服務帳戶代表您與 BigQuery 互動。根據預設,系統不會授予預設 Dataform 服務帳戶任何 BigQuery 角色或權限。您必須為預設 Dataform 服務帳戶授予必要的存取權。

    預設的 Dataform 服務帳戶 ID 格式如下:

    service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com
    

    PROJECT_NUMBER 替換為Google Cloud 專案的數字 ID。您可以在Google Cloud 控制台資訊主頁中找到 Google Cloud 專案 ID。詳情請參閱「識別專案」。

    除了預設的 Dataform 服務帳戶之外,您也可以使用其他服務帳戶代表您執行工作流程。您可以透過下列方式設定自訂服務帳戶:

    建立 Dataform 存放區或工作流程設定時,您可以選取與您有存取權的 Google Cloud 專案相關聯的任何服務帳戶。您必須為與 Dataform 資源相關聯的所有服務帳戶設定必要權限。

    與 Dataform 存放區關聯的自訂服務帳戶,只能用於執行該存放區的 workflow。所有其他存放區作業仍由預設 Dataform 服務帳戶執行。

    Dataform 服務帳戶和 Google 帳戶的必要角色

    預設和自訂服務帳戶,以及用於在 Dataform 中驗證的 Google 帳戶使用者憑證 (預先發布版),需要具備下列 BigQuery IAM 角色,才能在 BigQuery 中執行工作流程:

    此外,您還需要將服務帳戶憑證建立者角色 (roles/iam.serviceAccountTokenCreator) 授予預設 Dataform 服務帳戶,讓該帳戶能夠存取您想在 Dataform 中使用的任何自訂服務帳戶。

    如果您已啟用嚴格「以身分」模式(預先發布版),並為工作流程設定設定「頻率」,請將服務帳戶使用者角色 (roles/iam.serviceAccountUser) 授予工作流程設定有效服務帳戶的預設 Dataform 服務帳戶。

    Dataform 服務帳戶和 Google 帳戶的安全性考量

    將 Dataform 所需的角色授予服務帳戶或使用者的 Google 帳戶 (預先發布版) 時,請考量以下安全性考量:

    • 無論是否啟用 VPC Service Controls,任何已授予必要角色的服務帳戶,都可能會獲得服務帳戶所屬專案中的 BigQuery 或 Secret Manager 存取權。

      詳情請參閱「為 Dataform 設定 VPC Service Controls」。

    • 任何具有 dataform.repositories.create IAM 權限的使用者,都可以使用預設 Dataform 服務帳戶執行程式碼,以及該服務帳戶的所有授予權限。

      詳情請參閱「Dataform 權限的安全性考量」。

    如要限制使用者或服務帳戶可在 BigQuery 中讀取或寫入的資料,您可以為所選 BigQuery 資料集或資料表授予精細的 BigQuery IAM 權限。詳情請參閱「控管資料集存取權」和「控管資料表和檢視畫面的存取權」。

    為避免使用者使用其他使用者的 Google 帳戶憑證執行動作,我們會強制執行下列限制:

    • 如要修改附有其他 Google 帳戶使用者憑證的工作流程設定,您必須將自己的 Google 帳戶使用者憑證附加至工作流程設定,或變更工作流程設定,以便透過服務帳戶進行驗證。
    • 如果有工作流程設定會參照附加其他 Google 帳戶使用者憑證的發布設定,您就無法修改發布設定的編譯結果。
    • 您無法設定工作流程設定,以便透過 Google 帳戶使用者憑證進行驗證,並參照含有排程的發布設定。這項限制會導致下列後果:

      • 如果有工作流程設定會參照使用 Google 帳戶使用者憑證驗證的發布設定,您就無法更新發布設定以使用排程。
      • 您無法建立工作流程設定,以 Google 帳戶使用者憑證進行驗證,並指向含有排程的發布設定。
      • 您無法建立或更新工作流程設定,以便使用 Google 帳戶使用者憑證,並指向排程的發布設定。

    將必要的 BigQuery 角色授予 Dataform 中使用的服務帳戶或 Google 帳戶

    如要將必要的 BigQuery IAM 角色授予預設 Dataform 服務帳戶、要在 Dataform 中使用的自訂服務帳戶,或是要在 Dataform 中驗證的使用者 Google 帳戶 (預先發布版),請按照下列步驟操作:

    1. 在 Google Cloud 控制台中,前往「Dataform」頁面。

      前往 Dataform

    2. 選取或建立存放區

    3. 前往 Google Cloud 控制台的「IAM」頁面。

      前往身分與存取權管理頁面

    4. 點選「授予存取權」。

    5. 在「新增主體」欄位中,輸入服務帳戶 ID 或使用者的 Google 帳戶電子郵件地址 (預覽)。

    6. 在「請選擇角色」清單中,選取「BigQuery 工作使用者」角色。

    7. 點選「新增其他角色」,然後在「請選擇角色」清單中,選取「BigQuery 資料編輯者」角色。

    8. 點選「新增其他角色」,然後在「請選擇角色」清單中,選取「BigQuery 資料檢視者」角色。

    9. 按一下 [儲存]

    將憑證建立權限授予自訂服務帳戶

    如要在 Dataform 中使用自訂服務帳戶,預設的 Dataform 服務帳戶必須能夠存取自訂服務帳戶。如要授予這項存取權,您必須將預設 Dataform 服務帳戶新增為自訂服務帳戶的實體,並授予「Service Account Token Creator」角色。

    如要將預設 Dataform 服務帳戶的存取權授予自訂服務帳戶,請按照下列步驟操作:

    1. 在 Google Cloud 控制台中,依序前往「IAM」>「Service accounts」

      前往「Service accounts」(服務帳戶)

    2. 選取專案。

    3. 在「專案『PROJECT_NAME』的服務帳戶」頁面,選取自訂 Dataform 服務帳戶。

    4. 前往「權限」,然後點選「授予存取權」

    5. 在「新增主體」欄位中,輸入預設 Dataform 服務帳戶 ID。

      預設的 Dataform 服務帳戶 ID 格式如下:

      service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com
      
    6. 在「Select a role」清單中,選取「Service Account Token Creator」角色。

    7. 按一下 [儲存]

    使用 IAM 控管 Dataform 的存取權

    本節說明 Dataform 的存取權控制選項,並說明如何查看及授予 Dataform 角色。Dataform 會使用 Identity and Access Management (IAM) 控管存取權。如要進一步瞭解 IAM 中的角色和權限,請參閱「瞭解角色和權限」。

    預先定義的 Dataform 角色

    下表列出可讓您存取 Dataform 資源的預先定義角色:

    Role Permissions

    (roles/dataform.admin)

    Full access to all Dataform resources.

    dataform.*

    • dataform.commentThreads.create
    • dataform.commentThreads.delete
    • dataform.commentThreads.get
    • dataform.commentThreads.list
    • dataform.commentThreads.update
    • dataform.comments.create
    • dataform.comments.delete
    • dataform.comments.get
    • dataform.comments.list
    • dataform.comments.update
    • dataform.compilationResults.create
    • dataform.compilationResults.get
    • dataform.compilationResults.list
    • dataform.compilationResults.query
    • dataform.config.get
    • dataform.config.update
    • dataform.locations.get
    • dataform.locations.list
    • dataform.releaseConfigs.create
    • dataform.releaseConfigs.delete
    • dataform.releaseConfigs.get
    • dataform.releaseConfigs.list
    • dataform.releaseConfigs.update
    • dataform.repositories.commit
    • dataform.repositories.computeAccessTokenStatus
    • dataform.repositories.create
    • dataform.repositories.delete
    • dataform.repositories.fetchHistory
    • dataform.repositories.fetchRemoteBranches
    • dataform.repositories.get
    • dataform.repositories.getIamPolicy
    • dataform.repositories.list
    • dataform.repositories.queryDirectoryContents
    • dataform.repositories.readFile
    • dataform.repositories.setIamPolicy
    • dataform.repositories.update
    • dataform.workflowConfigs.create
    • dataform.workflowConfigs.delete
    • dataform.workflowConfigs.get
    • dataform.workflowConfigs.list
    • dataform.workflowConfigs.update
    • dataform.workflowInvocations.cancel
    • dataform.workflowInvocations.create
    • dataform.workflowInvocations.delete
    • dataform.workflowInvocations.get
    • dataform.workflowInvocations.list
    • dataform.workflowInvocations.query
    • dataform.workspaces.commit
    • dataform.workspaces.create
    • dataform.workspaces.delete
    • dataform.workspaces.fetchFileDiff
    • dataform.workspaces.fetchFileGitStatuses
    • dataform.workspaces.fetchGitAheadBehind
    • dataform.workspaces.get
    • dataform.workspaces.getIamPolicy
    • dataform.workspaces.installNpmPackages
    • dataform.workspaces.list
    • dataform.workspaces.makeDirectory
    • dataform.workspaces.moveDirectory
    • dataform.workspaces.moveFile
    • dataform.workspaces.pull
    • dataform.workspaces.push
    • dataform.workspaces.queryDirectoryContents
    • dataform.workspaces.readFile
    • dataform.workspaces.removeDirectory
    • dataform.workspaces.removeFile
    • dataform.workspaces.reset
    • dataform.workspaces.searchFiles
    • dataform.workspaces.setIamPolicy
    • dataform.workspaces.writeFile

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.codeCommenter)

    Permissions to comment, at the repository level. Grants CRUD access over commentThread and comment resources.

    dataform.commentThreads.*

    • dataform.commentThreads.create
    • dataform.commentThreads.delete
    • dataform.commentThreads.get
    • dataform.commentThreads.list
    • dataform.commentThreads.update

    dataform.comments.*

    • dataform.comments.create
    • dataform.comments.delete
    • dataform.comments.get
    • dataform.comments.list
    • dataform.comments.update

    dataform.locations.get

    dataform.repositories.get

    dataform.repositories.readFile

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.codeCreator)

    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.

    dataform.commentThreads.get

    dataform.commentThreads.list

    dataform.comments.get

    dataform.comments.list

    dataform.locations.*

    • dataform.locations.get
    • dataform.locations.list

    dataform.repositories.create

    dataform.repositories.list

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.codeEditor)

    Edit access code resources.

    dataform.commentThreads.*

    • dataform.commentThreads.create
    • dataform.commentThreads.delete
    • dataform.commentThreads.get
    • dataform.commentThreads.list
    • dataform.commentThreads.update

    dataform.comments.*

    • dataform.comments.create
    • dataform.comments.delete
    • dataform.comments.get
    • dataform.comments.list
    • dataform.comments.update

    dataform.compilationResults.*

    • dataform.compilationResults.create
    • dataform.compilationResults.get
    • dataform.compilationResults.list
    • dataform.compilationResults.query

    dataform.locations.*

    • dataform.locations.get
    • dataform.locations.list

    dataform.repositories.commit

    dataform.repositories.computeAccessTokenStatus

    dataform.repositories.create

    dataform.repositories.fetchHistory

    dataform.repositories.fetchRemoteBranches

    dataform.repositories.get

    dataform.repositories.getIamPolicy

    dataform.repositories.list

    dataform.repositories.queryDirectoryContents

    dataform.repositories.readFile

    dataform.workspaces.commit

    dataform.workspaces.create

    dataform.workspaces.delete

    dataform.workspaces.fetchFileDiff

    dataform.workspaces.fetchFileGitStatuses

    dataform.workspaces.fetchGitAheadBehind

    dataform.workspaces.get

    dataform.workspaces.getIamPolicy

    dataform.workspaces.installNpmPackages

    dataform.workspaces.list

    dataform.workspaces.makeDirectory

    dataform.workspaces.moveDirectory

    dataform.workspaces.moveFile

    dataform.workspaces.pull

    dataform.workspaces.push

    dataform.workspaces.queryDirectoryContents

    dataform.workspaces.readFile

    dataform.workspaces.removeDirectory

    dataform.workspaces.removeFile

    dataform.workspaces.reset

    dataform.workspaces.searchFiles

    dataform.workspaces.writeFile

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.codeOwner)

    Full access to code resources.

    dataform.commentThreads.*

    • dataform.commentThreads.create
    • dataform.commentThreads.delete
    • dataform.commentThreads.get
    • dataform.commentThreads.list
    • dataform.commentThreads.update

    dataform.comments.*

    • dataform.comments.create
    • dataform.comments.delete
    • dataform.comments.get
    • dataform.comments.list
    • dataform.comments.update

    dataform.compilationResults.*

    • dataform.compilationResults.create
    • dataform.compilationResults.get
    • dataform.compilationResults.list
    • dataform.compilationResults.query

    dataform.locations.*

    • dataform.locations.get
    • dataform.locations.list

    dataform.repositories.*

    • dataform.repositories.commit
    • dataform.repositories.computeAccessTokenStatus
    • dataform.repositories.create
    • dataform.repositories.delete
    • dataform.repositories.fetchHistory
    • dataform.repositories.fetchRemoteBranches
    • dataform.repositories.get
    • dataform.repositories.getIamPolicy
    • dataform.repositories.list
    • dataform.repositories.queryDirectoryContents
    • dataform.repositories.readFile
    • dataform.repositories.setIamPolicy
    • dataform.repositories.update

    dataform.workspaces.*

    • dataform.workspaces.commit
    • dataform.workspaces.create
    • dataform.workspaces.delete
    • dataform.workspaces.fetchFileDiff
    • dataform.workspaces.fetchFileGitStatuses
    • dataform.workspaces.fetchGitAheadBehind
    • dataform.workspaces.get
    • dataform.workspaces.getIamPolicy
    • dataform.workspaces.installNpmPackages
    • dataform.workspaces.list
    • dataform.workspaces.makeDirectory
    • dataform.workspaces.moveDirectory
    • dataform.workspaces.moveFile
    • dataform.workspaces.pull
    • dataform.workspaces.push
    • dataform.workspaces.queryDirectoryContents
    • dataform.workspaces.readFile
    • dataform.workspaces.removeDirectory
    • dataform.workspaces.removeFile
    • dataform.workspaces.reset
    • dataform.workspaces.searchFiles
    • dataform.workspaces.setIamPolicy
    • dataform.workspaces.writeFile

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.codeViewer)

    Read-only access to all code resources.

    dataform.compilationResults.*

    • dataform.compilationResults.create
    • dataform.compilationResults.get
    • dataform.compilationResults.list
    • dataform.compilationResults.query

    dataform.locations.*

    • dataform.locations.get
    • dataform.locations.list

    dataform.repositories.computeAccessTokenStatus

    dataform.repositories.fetchHistory

    dataform.repositories.fetchRemoteBranches

    dataform.repositories.get

    dataform.repositories.getIamPolicy

    dataform.repositories.list

    dataform.repositories.queryDirectoryContents

    dataform.repositories.readFile

    dataform.workspaces.fetchFileDiff

    dataform.workspaces.fetchFileGitStatuses

    dataform.workspaces.fetchGitAheadBehind

    dataform.workspaces.get

    dataform.workspaces.getIamPolicy

    dataform.workspaces.list

    dataform.workspaces.queryDirectoryContents

    dataform.workspaces.readFile

    dataform.workspaces.searchFiles

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.editor)

    Edit access to Workspaces and Read-only access to Repositories.

    dataform.commentThreads.get

    dataform.commentThreads.list

    dataform.comments.get

    dataform.comments.list

    dataform.compilationResults.*

    • dataform.compilationResults.create
    • dataform.compilationResults.get
    • dataform.compilationResults.list
    • dataform.compilationResults.query

    dataform.config.get

    dataform.locations.*

    • dataform.locations.get
    • dataform.locations.list

    dataform.releaseConfigs.get

    dataform.releaseConfigs.list

    dataform.repositories.computeAccessTokenStatus

    dataform.repositories.fetchHistory

    dataform.repositories.fetchRemoteBranches

    dataform.repositories.get

    dataform.repositories.getIamPolicy

    dataform.repositories.list

    dataform.repositories.queryDirectoryContents

    dataform.repositories.readFile

    dataform.workflowConfigs.get

    dataform.workflowConfigs.list

    dataform.workflowInvocations.*

    • dataform.workflowInvocations.cancel
    • dataform.workflowInvocations.create
    • dataform.workflowInvocations.delete
    • dataform.workflowInvocations.get
    • dataform.workflowInvocations.list
    • dataform.workflowInvocations.query

    dataform.workspaces.commit

    dataform.workspaces.create

    dataform.workspaces.delete

    dataform.workspaces.fetchFileDiff

    dataform.workspaces.fetchFileGitStatuses

    dataform.workspaces.fetchGitAheadBehind

    dataform.workspaces.get

    dataform.workspaces.getIamPolicy

    dataform.workspaces.installNpmPackages

    dataform.workspaces.list

    dataform.workspaces.makeDirectory

    dataform.workspaces.moveDirectory

    dataform.workspaces.moveFile

    dataform.workspaces.pull

    dataform.workspaces.push

    dataform.workspaces.queryDirectoryContents

    dataform.workspaces.readFile

    dataform.workspaces.removeDirectory

    dataform.workspaces.removeFile

    dataform.workspaces.reset

    dataform.workspaces.searchFiles

    dataform.workspaces.writeFile

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.serviceAgent)

    Gives permission for the Dataform API to access a secret from Secret Manager

    dataform.compilationResults.create

    dataform.workflowInvocations.create

    resourcemanager.projects.get

    resourcemanager.projects.list

    (roles/dataform.viewer)

    Read-only access to all Dataform resources.

    dataform.commentThreads.get

    dataform.commentThreads.list

    dataform.comments.get

    dataform.comments.list

    dataform.compilationResults.get

    dataform.compilationResults.list

    dataform.compilationResults.query

    dataform.config.get

    dataform.locations.*

    • dataform.locations.get
    • dataform.locations.list

    dataform.releaseConfigs.get

    dataform.releaseConfigs.list

    dataform.repositories.computeAccessTokenStatus

    dataform.repositories.fetchHistory

    dataform.repositories.fetchRemoteBranches

    dataform.repositories.get

    dataform.repositories.getIamPolicy

    dataform.repositories.list

    dataform.repositories.queryDirectoryContents

    dataform.repositories.readFile

    dataform.workflowConfigs.get

    dataform.workflowConfigs.list

    dataform.workflowInvocations.get

    dataform.workflowInvocations.list

    dataform.workflowInvocations.query

    dataform.workspaces.fetchFileDiff

    dataform.workspaces.fetchFileGitStatuses

    dataform.workspaces.fetchGitAheadBehind

    dataform.workspaces.get

    dataform.workspaces.getIamPolicy

    dataform.workspaces.list

    dataform.workspaces.queryDirectoryContents

    dataform.workspaces.readFile

    dataform.workspaces.searchFiles

    resourcemanager.projects.get

    resourcemanager.projects.list

    自訂資料表單角色

    自訂角色可包含您指定的任何權限。您可以建立自訂角色,其中包含執行特定管理作業的權限,例如建立開發工作區或在開發工作區中建立檔案和目錄。如要建立自訂角色,請參閱「建立及管理自訂角色」。

    資料表單權限的安全性考量

    凡是擁有 dataform.repositories.create 權限的使用者,都可以使用預設 Dataform 服務帳戶和該服務帳戶的所有授權,在 BigQuery 中執行程式碼。這包括執行 Dataform 工作流程

    下列 IAM 角色具備 dataform.repositories.create 權限:

    如要限制使用者或服務帳戶可在 BigQuery 中讀取或寫入的資料,您可以為所選 BigQuery 資料集或資料表授予精細的 BigQuery IAM 權限。詳情請參閱「控管資料集存取權」和「控管資料表和檢視畫面的存取權」。

    如要進一步瞭解預設 Dataform 服務帳戶,以及所需的角色和權限,請參閱「授予 Dataform 必要存取權」。

    查看 Dataform 角色

    在 Google Cloud 主控台中執行下列步驟:

    1. 依序前往「IAM & Admin」(IAM 與管理) >「Roles」(角色) 頁面。

      前往「角色」

    2. 在「Filter」欄位中,選取「Used in」,輸入 Dataform,然後按下 Enter 鍵。

    3. 按一下列出的任一角色,即可在右側窗格中查看該角色的權限。

      舉例來說,Dataform 管理員角色具備所有 Dataform 資源的完整存取權。

    如要進一步瞭解如何在專案中授予角色,請參閱「授予角色」一文。您可以透過這種方式授予預先定義或自訂角色。

    控管個別存放區的存取權

    如要透過精細的權限控管 Dataform 存取權,您可以使用 Dataform API repositories.setIamPolicy 要求,在個別存放區設定 Dataform IAM 角色。

    如要在個別 Dataform 存放區中設定 Dataform IAM 角色,請按照下列步驟操作:

    1. 在終端機中,使用存取政策傳遞 Dataform API repositories.setIamPolicy 要求。

    2. 在政策中,將使用者、群組、網域或服務帳戶繫結至所選角色,格式如下:

      {
      "policy":
         {
            "bindings": [
            {
               "role": "roles/ROLE",
               "members": [
                  "TYPE:IDENTIFIER",
               ]
            },
            ],
         }
      }
      

      更改下列內容:

      • ROLE:您要在存放區中授予的 Dataform IAM 角色。
      • TYPEusergroupdomainserviceAccount
      • IDENTIFIER:您要將角色授予的使用者、群組、網域或服務帳戶。
    3. 在 IAM 頁面中,請確保所有使用者都能透過具有 dataform.repositories.list 權限的 Dataform 角色查看完整的 Dataform 存放區清單。

    4. 在 IAM 中,請確保只有需要存取所有 Dataform 存放區完整存取權的使用者,才能在所有存放區中獲得 Dataform 管理員角色。

    下列指令會傳遞 repositories.setIamPolicy Dataform API 要求,將 sales 存放區的 Dataform Editor 角色授予單一使用者:

    curl -H "Content-Type: application/json" -X POST -d '{ "policy": { "bindings": [{ "role": "roles/dataform.editor", "members": ["user:sasha@examplepetstore.com"]}] }}' "https://dataform.googleapis.com/v1beta1/projects/examplepetstore/locations/us-central1/repositories/sales:setIamPolicy"
    

    授予存放區的公開存取權

    您可以將存放區的 IAM 角色授予 allAuthenticatedUsers 主體,藉此授予 Dataform 存放區的公開存取權。

    將 IAM 角色指派給 allAuthenticatedUsers 授權對象後,服務帳戶和透過 Google 帳戶驗證的所有網路使用者都會獲得該角色。這包括未連結至 Google Workspace 帳戶或 Cloud Identity 網域的帳戶,例如個人 Gmail 帳戶。未通過驗證的使用者 (例如匿名訪客) 不在此範圍內。詳情請參閱「所有已驗證的使用者」。

    舉例來說,如果您將 Dataform 檢視者角色授予 sales 存放區的 allAuthenticatedUsers,則所有服務帳戶和透過 Google 帳戶驗證的網路使用者,都會獲得所有 sales 程式碼資源的唯讀存取權。

    如要授予 Dataform 存放區的公開存取權,請按照下列步驟操作:

    1. 在終端機中,使用存取政策傳遞 Dataform API repositories.setIamPolicy 要求。

    2. 在政策中,請按照下列格式將 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/v1beta1/projects/examplepetstore/locations/us-central1/repositories/sales:setIamPolicy"
    

    禁止存放區的公開存取

    如要確保任何 Dataform 存放區都不會授予公眾存取權,您可以在專案中限制 allAuthenticatedUsers 授權主體。

    如要限制專案中的 allAuthenticatedUsers,您可以設定 iam.allowedPolicyMemberDomains 政策,並從 allowed_values 清單中移除 allAuthenticatedUsers

    iam.allowedPolicyMemberDomains 政策中限制 allAuthenticatedUsers 後,allAuthenticatedUsers 主體就無法用於專案中的任何 IAM 政策,因此無法將公開存取權授予所有資源,包括 Dataform 存放區。

    如要進一步瞭解 iam.allowedPolicyMemberDomains 政策,以及設定相關操作說明,請參閱「依網域限制身分」。

    Dataform 中的員工身分聯盟

    員工身分聯盟可讓您使用外部身分資訊提供者 (IdP) 驗證使用者,並授權使用者使用 IAM 的 Google Cloud 服務。

    Dataform 支援員工身分聯盟,且沒有已知的限制。

    使用 IAM 控管個別資料表的存取權

    本節說明如何針對個別 Dataform 資料表和檢視畫面,授予及撤銷 BigQuery IAM 角色。

    當 Dataform 執行資料表或檢視表時,會在 BigQuery 中建立資源。在 Dataform 的開發期間,您可以將 BigQuery 角色授予個別資料表和檢視表,以便在執行後控管其在 BigQuery 中的存取權。

    如要進一步瞭解如何授予及撤銷資源存取權,請參閱「授予資源存取權」。

    將 BigQuery 角色授予資料表或檢視表

    您可以將 BigQuery 角色授予 Dataform 中的資料表或 View,方法是在所選資料表或 View 的 .sqlx 定義檔案中,新增含有 GRANT DCL 陳述式的 post_operations 區塊。

    如要將 BigQuery 角色授予所選資料表或檢視畫面,請按照下列步驟操作:

    1. 在 Google Cloud 控制台中,前往「Dataform」頁面。

      前往 Dataform

    2. 選取存放區,然後選取工作區。

    3. 在「檔案」窗格中展開 definitions/ 目錄。

    4. 選取要授予存取權的資料表或檢視畫面的 .sqlx 定義檔案。

    5. 在檔案中輸入下列程式碼片段:

      post_operations {
          GRANT "ROLE_LIST"
          ON "RESOURCE_TYPE" ${self()}
          TO "USER_LIST"
      }
      

      更改下列內容:

      • ROLE_LIST:您要授予的 BigQuery 角色或以半形逗號分隔的 BigQuery 角色清單。

      • RESOURCE_TYPETABLEVIEW

      • USER_LIST:以逗號分隔的清單,列出授予角色的使用者。

        如需有效格式的清單,請參閱 user_list

    6. 選用步驟:按一下「格式」

    7. 執行資料表或檢視表。

    8. 如果您已授予增量資料表的存取權,請在第一次執行後,從資料表定義檔案中移除 GRANT 陳述式。

    以下程式碼範例顯示授予使用者資料表的 BigQuery 檢視者角色

    config { type: "table" }
    
    SELECT ...
    
    post_operations {
      GRANT `roles/bigquery.dataViewer`
      ON TABLE ${self()}
      TO "user:222larabrown@gmail.com"
    }
    

    從資料表或檢視表中撤銷 BigQuery 角色

    您可以將含有 REVOKE DCL 陳述式的 post_operations 區塊新增至所選資料表或檢視表的 .sqlx 定義檔案,藉此撤銷資料表或檢視表的 BigQuery 角色。

    如要撤銷所選資料表或檢視表的 BigQuery 角色,請按照下列步驟操作:

    1. 在 Google Cloud 控制台中,前往「Dataform」頁面。

      前往 Dataform

    2. 選取存放區,然後選取工作區。

    3. 在「檔案」窗格中展開 definitions/ 目錄。

    4. 選取要撤銷存取權的資料表或檢視畫面的 .sqlx 定義檔案。

    5. post_operations 區塊中,輸入以下 REVOKE 陳述式:

          REVOKE "ROLE_LIST"
          ON "RESOURCE_TYPE" ${self()}
          FROM "USER_LIST"
      

      更改下列內容:

      • ROLE_LIST:您要撤銷的 BigQuery 角色或以半形逗號分隔的 BigQuery 角色清單。
      • RESOURCE_TYPETABLEVIEW
      • USER_LIST:以逗號分隔的清單,列出從中撤銷角色的使用者。如需有效格式的清單,請參閱 user_list
    6. 如要撤銷檔案中 GRANT 陳述式中授予的存取權,請將 GRANT 陳述式替換為 REVOKE 陳述式。

    7. 選用步驟:按一下「格式」

    8. 執行資料表或檢視表。

    9. 如果您撤銷了對增量資料表的存取權,請在第一次執行後,從資料表定義檔案中移除 REVOKE 陳述式。

    下列程式碼範例說明如何從表格中使用者撤銷 BigQuery 檢視者角色

    config { type: "table" }
    
    SELECT ...
    
    post_operations {
      REVOKE `roles/bigquery.dataViewer`
      ON TABLE ${self()}
      FROM "user:222larabrown@gmail.com"
    }
    

    統一管理資料表和檢視表的 BigQuery 角色

    如要控管 BigQuery 對單一位置中個別資料表和檢視表的存取權,您可以使用 GRANTREVOKE DCL 陳述式建立專屬的 type: "operations" 檔案。

    如要在單一 type: "operations" 檔案中管理 BigQuery 資料表存取權,請按照下列步驟操作:

    1. 在 Google Cloud 控制台中,前往「Dataform」頁面。

      前往 Dataform

    2. 選取存放區,然後選取工作區。

    3. 在「檔案」窗格中,點選 definitions/ 旁的 「更多」選單。

    4. 點選「建立檔案」

    5. 在「Add a file path」欄位中,輸入檔案名稱,並在 definitions/ 後方加上 .sqlx。例如:definitions/table-access.sqlx

      檔案名稱只能包含數字、英文字母、連字號和底線。

    6. 點選「建立檔案」

    7. 在「檔案」窗格中展開「definitions/目錄,然後選取新建立的檔案。

    8. 在檔案中輸入下列程式碼片段:

        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_TYPETABLEVIEW
      • RESOURCE_NAME:資料表或檢視畫面的名稱。
      • USER_LIST:以逗號分隔的使用者清單,列出授予或撤銷角色的使用者。如需有效格式的清單,請參閱 user_list
    9. 視需要加入 GRANTREVOKE 陳述式。

      1. 如要撤銷檔案中 GRANT 陳述式所授予的存取權,請將 GRANT 陳述式替換為 REVOKE 陳述式。

        移除 GRANT 陳述式,但未新增 REVOKE 陳述式,不會撤銷存取權。

    10. 選用步驟:按一下「格式」

    11. 在每次更新後執行該檔案。

      1. 如果您授予或撤銷增量資料表的存取權,請在第一次執行陳述式後,從檔案中移除 GRANTREVOKE 陳述式。

    後續步驟