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.compilationResults.create
  • dataform.compilationResults.get
  • dataform.compilationResults.list
  • dataform.compilationResults.query
  • 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.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.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.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.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.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.compilationResults.*

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

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.viewer)

Read-only access to all Dataform resources.

dataform.compilationResults.get

dataform.compilationResults.list

dataform.compilationResults.query

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 の SQL ワークフローの実行が含まれます。

dataform.repositories.create 権限は、次の IAM ロールに含まれています。

ユーザーまたはサービス アカウントが BigQuery で読み書きできるデータを制限するために、選択した BigQuery データセットまたはテーブルに対して、細かな BigQuery IAM 権限を付与できます。詳細については、データセットへのアクセスの制御テーブルおよびビューへのアクセスの制御をご覧ください。

デフォルトの Dataform サービス アカウントと、必要なロールと権限の詳細については、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. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. BigQuery and Dataform API を有効にします。

    API を有効にする

  5. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  6. Google Cloud プロジェクトで課金が有効になっていることを確認します

  7. BigQuery and Dataform API を有効にします。

    API を有効にする

Dataform のロールを表示する

Google Cloud コンソールで、次の操作を行います。

  1. [IAM と管理] > [設定] ページに移動します。

    [ロール] に移動

  2. [フィルタ] フィールドで [次の中で使用] を選択し、「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 ロール
    • TYPE: usergroupdomain、または serviceAccount
    • IDENTIFIER: ロールを付与するユーザー、グループ、ドメイン、またはサービス アカウント
  3. IAM ページで、dataform.repositories.list 権限を持つ Dataform ロールを使用して、すべてのユーザーが Dataform リポジトリの完全なリストを表示できるようにします。

  4. IAM では、すべての Dataform リポジトリへの完全アクセス権が必要なユーザーに、すべてのリポジトリに対して Dataform 管理者ロールが付与されるようにします。

次のコマンドは、sales リポジトリに対する Dataform 編集者のロールを付与する repositories.setIamPolicy Dataform API リクエストを単一のユーザーに渡します。

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 プリンシパルに付与します。

allAuthenticatedUsers プリンシパルに IAM ロールを割り当てると、Google アカウントで認証されたサービス アカウントとインターネット上のすべてのユーザーにそのロールが付与されます。これには、個人用 Gmail アカウントなど、Google Workspace アカウントまたは Cloud Identity のドメインに接続していないアカウントも含まれます。認証されていないユーザー(匿名の訪問者など)は含まれません。詳細については、認証済みのすべてのユーザーをご覧ください。

たとえば、Dataform 閲覧者のロールを sales リポジトリの allAuthenticatedUsers に付与すると、Google アカウントで認証されたすべてのサービス アカウントとインターネット上のユーザーは、すべての sales コードリソースへの読み取り専用権限を持ちます。

Dataform リポジトリへの公開アクセス権を付与するには、次の手順に沿って操作します。

  1. ターミナルで、アクセス ポリシーを使用して Dataform API repositories.setIamPolicy リクエストを渡します。

  2. ポリシーで、次の形式で allAuthenticatedUsers プリンシパルを選択したロールにバインドします。

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

    次のように置き換えます。

    • ROLE: すべての認証済みユーザーに付与する Dataform IAM のロール。

次のコマンドは、sales リポジトリに対する Dataform 閲覧者ロールを付与する repositories.setIamPolicy Dataform API リクエストを 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 ポリシーの詳細と設定手順については、ドメイン別の ID の制限をご覧ください。

Dataform での Workforce Identity 連携

Workforce Identity 連携では、外部 ID プロバイダ(IdP)を使用して、IAM で Google Cloud サービスに対するユーザーの認証と承認を行います。

Dataform は、既知の制限のない Workforce Identity 連携をサポートしています。

次のステップ