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.

    Roles required to select or create a project

    • 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 (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the BigQuery and Dataform APIs.

    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.

    Enable the APIs

  5. 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

    • 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 (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery and Dataform APIs.

    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.

    Enable the APIs

  8. Dataform に必要なアクセス権を付与する

    このセクションでは、Dataform サービス エージェントとカスタム サービス アカウントが BigQuery でワークフローを実行するために必要な Identity and Access Management(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 プロジェクト ID は、Google Cloud コンソール ダッシュボードで確認できます。詳細については、プロジェクトの識別をご覧ください。

    デフォルトの Dataform サービス エージェントに加えて、他のサービス アカウントを使用してワークフローを自動的に実行できます。カスタム サービス アカウントは、次の方法で構成できます。

    Dataform リポジトリまたはワークフロー構成を作成する際は、アクセス可能な Google Cloud プロジェクトに関連付けられた任意のサービス アカウントを選択できます。Dataform リソースに関連付けられているすべてのサービス アカウントに必要な権限を構成する必要があります。

    Dataform リポジトリに関連付けられたカスタム サービス アカウントは、そのリポジトリのワークフローの実行にのみ使用されます。他のすべてのリポジトリ オペレーションは、引き続きデフォルトの Dataform サービス アカウントによって実行されます。

    Dataform サービス エージェント、カスタム サービス アカウント、Google アカウントに必要なロール

    Dataform での認証に使用されるデフォルトの Dataform サービス エージェント、カスタム サービス アカウント、Google アカウントのユーザー認証情報(プレビュー)は、BigQuery でワークフローを実行するために、次の BigQuery IAM ロールを必要とします。

    また、Dataform で使用するカスタム サービス アカウントにアクセスできるように、デフォルトの Dataform サービス エージェントにサービス アカウント トークン作成者のロールroles/iam.serviceAccountTokenCreator)を付与する必要があります。

    厳密な act-as モードプレビュー)を有効にして、ワークフロー構成頻度設定を構成した場合は、ワークフロー構成の有効なサービス アカウントで、デフォルトの Dataform サービス エージェントにサービス アカウント ユーザー ロール(roles/iam.serviceAccountUser)を付与します。

    セキュリティ上の考慮事項

    Dataform で必要なロールを Dataform サービス エージェント、カスタム サービス アカウント、またはユーザーの Google アカウント(プレビュー)に付与する際には、次のセキュリティに関する考慮事項があります。

    • 必要なロールが付与されたサービス エージェントまたはサービス アカウントは、VPC Service Controls に関係なく、サービス エージェントまたはサービス アカウントが属するプロジェクトの BigQuery または Secret Manager へのアクセス権を取得する可能性があります。

      詳細については、VPC Service Controls を構成するをご覧ください。

    • dataform.repositories.create IAM 権限を持つユーザーは、デフォルトの Dataform サービス エージェントと、そのサービス エージェントまたはサービス アカウントに付与されたすべての権限を使用してコードを実行できます。

      詳細については、Dataform 権限のセキュリティに関する考慮事項をご覧ください。

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

    ユーザーが他のユーザーの Google アカウントのユーザー認証情報を使用して操作を行うのを防ぐため、次の制限が適用されます。

    • 別の Google アカウント ユーザーの認証情報が関連付けられているワークフロー構成を変更するには、ワークフロー構成に自分の Google アカウント ユーザーの認証情報を関連付けるか、{dataform_name_short} サービス エージェントまたはカスタム サービス アカウントで認証するようにワークフロー構成を変更する必要があります。
    • 別の Google アカウント ユーザーの認証情報が添付されているリリース構成を参照するワークフロー構成がある場合、リリース構成のコンパイル結果を変更することはできません。
    • ワークフロー構成で Google アカウントのユーザー認証情報を設定し、スケジュールでリリース構成を参照することはできません。この制限には次の影響があります。

      • Google アカウントのユーザー認証情報で認証するように設定されているリリース構成を参照するワークフロー構成がある場合、スケジュールを使用するようにリリース構成を更新することはできません。
      • Google アカウントのユーザー認証情報で認証し、スケジュールのあるリリース構成を指すワークフロー構成を作成することはできません。
      • Google アカウントのユーザー認証情報を使用して、スケジュールでリリース構成を参照するようにワークフロー構成を作成または更新することはできません。

    必要な BigQuery のロールを付与する

    デフォルトの Dataform サービス エージェント、Dataform で使用するカスタム サービス アカウント、Dataform で認証に使用するユーザーの Google アカウント(プレビュー)に必要な BigQuery IAM ロールを付与する手順は次のとおりです。

    1. Google Cloud コンソールで、[Dataform] ページに移動します。

      Dataform に移動

    2. リポジトリを作成または選択します。

    3. Google Cloud コンソールで、[IAM] ページに移動します。

      [IAM] に移動

    4. [アクセス権を付与] をクリックします。

    5. [新しいプリンシパル] フィールドに、サービス エージェント ID、サービス アカウント ID、またはユーザーの Google アカウントのメールアドレス(プレビュー)を入力します。

    6. [ロールを選択] リストで、[BigQuery ジョブユーザー] ロールを選択します。

    7. [別のロールを追加] をクリックし、[ロールを選択] プルダウン リストで [BigQuery データ編集者] ロールを選択します。

    8. [別のロールを追加] をクリックし、[ロールを選択] プルダウン リストで [BigQuery データ閲覧者] ロールを選択します。

    9. [保存] をクリックします。

    カスタム サービス アカウントにトークン作成アクセス権を付与する

    Dataform でカスタム サービス アカウントを使用するには、デフォルトの Dataform サービス エージェントがカスタム サービス アカウントにアクセスできる必要があります。このアクセス権を付与するには、デフォルトの Dataform サービス エージェントをプリンシパルとして、サービス アカウント トークン作成者のロールを持つカスタム サービス アカウントに追加する必要があります。

    デフォルトの Dataform サービス エージェントにカスタム サービス アカウントへのアクセス権を付与する手順は次のとおりです。

    1. Google Cloud コンソールで、[IAM] > [サービス アカウント] に移動します。

      [サービス アカウント] に移動

    2. プロジェクトを選択します。

    3. [プロジェクト「PROJECT_NAME」のサービス アカウント] ページで、カスタム サービス アカウントを選択します。

    4. [アクセス権を持つプリンシパル] に移動し、[アクセス権を付与] をクリックします。

    5. [新しいプリンシパル] フィールドに、デフォルトの Dataform サービス エージェント ID を入力します。

      デフォルトの Dataform サービス エージェント ID の形式は次のとおりです。

      service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com
      
    6. [ロールを選択] リストで、[サービス アカウント トークン作成者] ロールを選択します。

    7. [保存] をクリックします。

    IAM を使用して Dataform へのアクセスを制御する

    このセクションでは、Dataform のアクセス制御オプションについて説明し、Dataform ロールを表示して付与する方法について説明します。Dataform は、Identity and Access Management(IAM)を使用してアクセス制御を行います。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 ワークフローの実行も含まれます。

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

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

    デフォルトの Dataform サービス エージェントと、必要なロールと権限の詳細については、Dataform に必要なアクセス権を付与するをご覧ください。

    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 ロール。
      • またはTYPEuser
      • 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/v1/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 閲覧者のロールを allAuthenticatedUsers に付与する repositories.setIamPolicy Dataform API リクエストを渡します。

    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 を制限すると、allAuthenticatedUsers プリンシパルをプロジェクトの IAM ポリシーで使用できないため、Dataform リポジトリを含めて、すべてのリソースへの公開アクセスの付与が防止されます。

    iam.allowedPolicyMemberDomains ポリシーとその設定手順の詳細については、ドメイン別の ID の制限をご覧ください。

    Dataform の Workforce Identity 連携

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

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

    IAM を使用して個々のテーブルへのアクセスを制御する

    このセクションでは、個別の Dataform テーブルとビューに対して BigQuery IAM ロールを付与または取り消す方法について説明します。

    Dataform がテーブルまたはビューを実行すると、BigQuery にリソースが作成されます。Dataform の開発中に、BigQuery のロールを個別のテーブルとビューに付与して、実行後に BigQuery でアクセスを制御できます。

    リソースへのアクセス権の付与と取り消しについて詳しくは、リソースへのアクセス権の付与をご覧ください。

    テーブルまたはビューに BigQuery のロールを付与する

    Dataform のテーブルまたはビューに BigQuery のロールを付与するには、GRANT DCL ステートメントを使用して post_operations ブロックを選択したテーブルまたはビューの .sqlx 定義ファイルに追加します。

    選択したテーブルまたはビューに BigQuery ロールを付与する手順は次のとおりです。

    1. Google Cloud コンソールで、[Dataform] ページに移動します。

      Dataform に移動

    2. リポジトリを選択し、ワークスペースを選択します。

    3. [ファイル] ペインで「definitions/definitions」ディレクトリを展開します。

    4. アクセス権を付与するテーブルまたはビューの .sqlx 定義ファイルを選択します。

    5. このファイルに次のコード スニペットを入力します。

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

      以下を置き換えます。

      • ROLE_LIST: 付与する BigQuery のロールまたは BigQuery のロールのカンマ区切りリスト。

      • RESOURCE_TYPE: TABLE または VIEW

      • 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 のロールを取り消すには、REVOKE DCL ステートメントを使用して post_operations ブロックを選択したテーブルまたはビューの .sqlx 定義ファイルに追加します。

    選択したテーブルまたはビューから BigQuery のロールを取り消すには、次の操作を行います。

    1. Google Cloud コンソールで、[Dataform] ページに移動します。

      Dataform に移動

    2. リポジトリを選択し、ワークスペースを選択します。

    3. [ファイル] ペインで「definitions/definitions」ディレクトリを展開します。

    4. アクセスを取り消すテーブルまたはビューの .sqlx 定義ファイルを選択します。

    5. 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 をご覧ください。
    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 のロールを集約的に管理する

    1 つのロケーションの個別のテーブルとビューに対する BigQuery アクセスを制御するには、GRANT および REVOKE の DCL ステートメントを使用して専用の type: "operations" ファイルを作成します。

    1 つの type: "operations" ファイルで BigQuery テーブルのアクセスを管理する手順は次のとおりです。

    1. Google Cloud コンソールで、[Dataform] ページに移動します。

      Dataform に移動

    2. リポジトリを選択し、ワークスペースを選択します。

    3. [ファイル] ペインで、definitions/ の横にある [その他] メニューをクリックします。

    4. [ファイルを作成] をクリックします。

    5. [ファイルパスを追加] フィールドに、ファイルの名前の後に 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_TYPE: TABLE または VIEW
      • RESOURCE_NAME: テーブルまたはビューの名前。
      • USER_LIST: ロールの付与または取り消しを行う対象ユーザーのカンマ区切りのリスト。有効な形式の一覧については、user_list をご覧ください。
    9. 必要に応じて GRANT ステートメントと REVOKE ステートメントを追加します。

      1. ファイル内の GRANT ステートメントで付与されたアクセス権を取り消すには、GRANT ステートメントを REVOKE ステートメントに置き換えます。

        REVOKE ステートメントを追加せずに GRANT ステートメントを削除しても、アクセス権は取り消されません。

    10. 省略可: [書式] をクリックします。

    11. 更新のたびにファイルを実行します。

      1. 増分テーブルに対してアクセス権の付与または取り消しを行った場合は、ステートメントを最初に実行した後にファイルから GRANT ステートメントまたは REVOKE ステートメントを削除します。

    次のステップ