使用 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 服務帳戶身分與存取權管理 (IAM) 角色,以便在 BigQuery 中執行工作流程。

    關於 Dataform 中的服務帳戶

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

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

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

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

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

    • 在「存放區」層級,執行特定存放區中的所有工作流程。

    • 個別工作流程設定

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

    與 Dataform 存放區相關聯的自訂服務帳戶,只會用於從該存放區執行工作流程。所有其他存放區作業仍由預設的 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。

      詳情請參閱「設定 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. 在「Select a role」(選取角色) 清單中,選取「BigQuery Job User」(BigQuery 工作使用者) 角色。

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

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

    9. 按一下 [儲存]

    授予自訂服務帳戶權限,允許建立權杖

    如要在 Dataform 中使用自訂服務帳戶,預設的 Dataform 服務帳戶必須能夠存取自訂服務帳戶。如要授予這項存取權,請將預設 Dataform 服務帳戶新增為自訂服務帳戶的主體,並授予服務帳戶符記建立者角色

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

    1. 在 Google Cloud 控制台中,依序前往「IAM」>「服務帳戶」

      前往「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 角色

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

    Dataform 權限的安全考量

    只要使用者擁有 dataform.repositories.create 權限,就能使用預設的 Dataform 服務帳戶,以及該服務帳戶的所有權限,在 BigQuery 中執行程式碼。包括執行 Dataform 工作流程

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

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

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

    查看 Dataform 角色

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

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

      前往「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 編輯者角色授予單一使用者:

    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"
    

    授予存放區公開存取權

    如要授予 Dataform 存放區的公開存取權,請將存放區的 IAM 角色授予 allAuthenticatedUsers 主體。

    將 IAM 角色指派給 allAuthenticatedUsers 主體後,透過 Google 帳戶完成驗證的服務帳戶和所有使用者都會獲得該角色。這包括未連結至 Google Workspace 帳戶或 Cloud Identity 網域的帳戶,例如個人 Gmail 帳戶。未通過驗證的使用者 (如匿名訪客) 不會具有這個識別碼。詳情請參閱「所有已驗證的使用者」。

    舉例來說,如果您在 sales 存放區將 Dataform 檢視者角色授予 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

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

    如要進一步瞭解 iam.allowedPolicyMemberDomains 政策,以及如何設定這項政策,請參閱「依照網域設定身分限制」。

    Dataform 中的員工身分聯盟

    員工身分聯盟可讓您使用外部識別資訊提供者 (IdP) 驗證使用者身分並授權,讓他們透過 IAM 存取 Google Cloud 服務。

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

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

    本節說明如何為個別 Dataform 資料表和檢視區塊授予及撤銷 BigQuery IAM 角色。

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

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

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

    如要將 BigQuery 角色授予資料表或檢視區塊,請在所選資料表或檢視區塊的 .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 角色

    如要從資料表或檢視區塊撤銷 BigQuery 角色,請在所選資料表或檢視區塊的 .sqlx 定義檔中,新增含有 REVOKE DCL 陳述式post_operations 區塊。

    如要從所選資料表或檢視區塊撤銷 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 對個別資料表和檢視區塊的存取權,您可以建立專屬的 type: "operations" 檔案,並使用 GRANTREVOKE DCL 陳述式。

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

    1. 前往 Google Cloud 控制台的「Dataform」頁面。

      前往 Dataform

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

    3. 在「Files」(檔案) 窗格中,點按 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 陳述式。

    後續步驟