このドキュメントでは、Dataform で次の操作を行う方法について説明します。
- Dataform に必要なアクセス権を付与します。
- IAM を使用して Dataform へのアクセスを制御する
- IAM を使用して個々のテーブルへのアクセスを制御する。
始める前に
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and Dataform APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and Dataform APIs.
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 サービス アカウントに必要なロール
Dataform で使用されるデフォルトのサービス アカウントとカスタム サービス アカウントが BigQuery でワークフローを実行するには、次の BigQuery IAM ロールが必要です。
- Dataform が読み取りと書き込みの両方のアクセス権を必要とするプロジェクトに対する BigQuery データ編集者。 通常は、Dataform リポジトリをホストするプロジェクトが含まれます。
- Dataform が読み取り専用アクセス権を必要とするプロジェクトに対する BigQuery データ閲覧者。
- Dataform リポジトリをホストするプロジェクトに対する BigQuery ジョブユーザー。
- BigQuery データセットに対してクエリを実行する場合の BigQuery データオーナー。
- BigQuery ポリシータグを使用する場合の列レベルのアクセス制御のための BigQuery のロール。
また、デフォルトの Dataform サービス アカウントにサービス アカウント トークン作成者のロール(roles/iam.serviceAccountTokenCreator
)を付与して、Dataform で使用するカスタム サービス アカウントにアクセスできるようにする必要があります。
Dataform サービス アカウントのセキュリティに関する考慮事項
Dataform で必要なロールをサービス アカウントに付与する際には、次のセキュリティに関する考慮事項があります。
必要なロールが付与されたサービス アカウントは、VPC Service Controls に関係なく、サービス アカウントが属するプロジェクトの BigQuery または Secret Manager へのアクセス権を取得する可能性があります。
詳細については、Dataform 用に VPC Service Controls を構成するをご覧ください。
dataform.repositories.create
IAM 権限を持つユーザーは、デフォルトの Dataform サービス アカウントと、そのサービス アカウントに付与されたすべての権限を使用してコードを実行できます。詳細については、Dataform 権限のセキュリティに関する考慮事項をご覧ください。
ユーザーまたはサービス アカウントが BigQuery で読み書きできるデータを制限するために、選択した BigQuery データセットまたはテーブルに対して、細かな BigQuery IAM 権限を付与できます。詳細については、データセットへのアクセスの制御とテーブルとビューへのアクセスの制御をご覧ください。
Dataform で使用されるサービス アカウントに必要な BigQuery ロールを付与する
デフォルトの Dataform サービス アカウントまたは Dataform で使用するカスタム サービス アカウントに必要な BigQuery IAM ロールを付与する手順は次のとおりです。
Google Cloud コンソールの [Dataform] ページに移動します。
リポジトリを作成または選択します。
Google Cloud コンソールの [IAM] ページに移動します。
[アクセス権を付与] をクリックします。
[新しいプリンシパル] フィールドに、サービス アカウント ID を入力します。
[ロールを選択] リストで、[BigQuery ジョブユーザー] ロールを選択します。
[別のロールを追加] をクリックし、[ロールを選択] プルダウン リストで [BigQuery データ編集者] ロールを選択します。
[別のロールを追加] をクリックし、[ロールを選択] プルダウン リストで [BigQuery データ閲覧者] ロールを選択します。
[保存] をクリックします。
カスタム サービス アカウントにトークン作成のアクセス権を付与する
Dataform でカスタム サービス アカウントを使用するには、デフォルトの Dataform サービス アカウントがカスタム サービス アカウントにアクセスできる必要があります。このアクセス権を付与するには、デフォルトの Dataform サービス アカウントをプリンシパルとして、サービス アカウント トークン作成者のロールを持つカスタム サービス アカウントに追加する必要があります。
デフォルトの Dataform サービス アカウントにカスタム サービス アカウントへのアクセス権を付与する手順は次のとおりです。
Google Cloud コンソールで、[IAM] > [サービス アカウント] に移動します。
プロジェクトを選択します。
[プロジェクト「PROJECT_NAME」のサービス アカウント] ページで、カスタム Dataform サービス アカウントを選択します。
[権限] に移動し、[アクセスを許可] をクリックします。
[新しいプリンシパル] フィールドに、Dataform サービス アカウント ID を入力します。
デフォルトの Dataform サービス アカウント ID の形式は次のとおりです。
service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com
[ロールを選択] リストで、[サービス アカウント トークン作成者] ロールを選択します。
[保存] をクリックします。
IAM を使用して Dataform へのアクセスを制御する
このセクションでは、Dataform のアクセス制御オプションと、Dataform ロールの表示と付与の方法について説明します。Dataform は、Identity and Access Management(IAM)を使用してアクセス制御を行います。IAM のロールと権限の詳細については、ロールと権限についてをご覧ください。
Dataform の事前定義ロール
次の表に、Dataform リソースへのアクセスを許可する事前定義ロールを一覧表示します。
Role | Permissions |
---|---|
Dataform Admin( Full access to all Dataform resources. |
|
Code Commenter Beta( Permissions to comment, at the repository level. Grants CRUD access over commentThread and comment resources. |
|
Code Creator( Access only to private and shared code resources. The permissions in the Code Creator let you create and list code in Dataform, and access only the code that you created and code that was explicitly shared with you. |
|
Code Editor( Edit access code resources. |
|
Code Owner( Full access to code resources. |
|
Code Viewer( Read-only access to all code resources. |
|
Dataform Editor( Edit access to Workspaces and Read-only access to Repositories. |
|
Dataform Viewer( Read-only access to all Dataform resources. |
|
カスタム Dataform ロール
カスタムロールには、指定した権限を含めることができます。開発ワークスペースの作成や開発ワークスペース内のファイルとディレクトリの作成など、特定の管理オペレーションを実行する権限を含むカスタムロールを作成できます。カスタムロールを作成するには、カスタムロールの作成と管理をご覧ください。
Dataform 権限のセキュリティに関する考慮事項
dataform.repositories.create
権限を持つユーザーは、デフォルトの Dataform サービス アカウントと、そのサービス アカウントに付与されたすべての権限を使用して BigQuery でコードを実行できます。これには、Dataform ワークフローの実行も含まれます。
dataform.repositories.create
権限は、次の IAM ロールに含まれています。
- BigQuery 管理者(
roles/bigquery.admin
) - BigQuery ジョブユーザー(
roles/bigquery.jobUser
) - BigQuery Studio ユーザー(
roles/bigquery.studioUser
) - BigQuery ユーザー(
roles/bigquery.user
) - コード作成者(
roles/dataform.codeCreator
) - コードエディタ(
roles/dataform.codeEditor
) - コードオーナー(
roles/dataform.codeOwner
) - Colab Enterprise ユーザー(
roles/aiplatform.colabEnterpriseUser
) - Dataform 管理者(
roles/dataform.admin
)
ユーザーまたはサービス アカウントが BigQuery で読み書きできるデータを制限するために、選択した BigQuery データセットまたはテーブルに対して、細かな BigQuery IAM 権限を付与できます。詳細については、データセットへのアクセスの制御とテーブルとビューへのアクセスの制御をご覧ください。
デフォルトの Dataform サービス アカウントと、必要なロールと権限の詳細については、Dataform に必要なアクセス権を付与するをご覧ください。
Dataform のロールを表示する
Google Cloud コンソールで、次の操作を行います。
[IAM と管理] > [ロール] ページに移動します。
[フィルタ] フィールドで [次の中で使用] を選択し、「
Dataform
」と入力して Enter キーを押します。一覧表示されたロールのいずれかをクリックして、右側のペインにロールの権限を表示します。
たとえば、Dataform 管理者のロールには、すべての Dataform リソースに対する完全なアクセス権が付与されます。
プロジェクトに対するロールの付与については、ロールの付与をご覧ください。 この方法を使用して事前定義ロールまたはカスタムロールを付与できます。
個々のリポジトリへのアクセスを制御する
細かい権限で Dataform へのアクセスを制御するには、Dataform API repositories.setIamPolicy
リクエストを使用して、個々のリポジトリに Dataform IAM ロールを設定します。
個々の Dataform リポジトリに Dataform IAM ロールを設定するには、次の操作を行います。
ターミナルで、アクセス ポリシーを指定して Dataform API
repositories.setIamPolicy
リクエストを渡します。ポリシーで、ユーザー、グループ、ドメイン、またはサービス アカウントを、選択したロールに次の形式でバインドします。
{ "policy": { "bindings": [ { "role": "roles/ROLE", "members": [ "TYPE:IDENTIFIER", ] }, ], } }
以下を置き換えます。
ROLE
: リポジトリに付与する Dataform IAM ロール。- または
TYPE
user
IDENTIFIER
: ロールを付与するユーザー、グループ、ドメイン、サービス アカウント。
IAM ページで、すべてのユーザーが
dataform.repositories.list
権限を持つ Dataform ロールを使用して Dataform リポジトリの完全なリストを表示できるようにします。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 リポジトリへの公開アクセス権を付与する手順は次のとおりです。
ターミナルで、アクセス ポリシーを指定して Dataform API
repositories.setIamPolicy
リクエストを渡します。ポリシーで、
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/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 連携をサポートしており、既知の制限はありません。
IAM を使用して個々のテーブルへのアクセスを制御する
このセクションでは、個々の Dataform テーブルとビューに対して BigQuery IAM ロールを付与または取り消す方法について説明します。
Dataform がテーブルまたはビューを実行すると、BigQuery にリソースが作成されます。Dataform の開発中に、BigQuery のロールを個別のテーブルとビューに付与して、実行後に BigQuery でアクセスを制御できます。
リソースへのアクセス権の付与と取り消しについて詳しくは、リソースへのアクセス権の付与をご覧ください。
テーブルまたはビューに BigQuery ロールを付与する
Dataform のテーブルまたはビューに BigQuery のロールを付与するには、GRANT
DCL ステートメントを使用して post_operations
ブロックを選択したテーブルまたはビューの .sqlx
定義ファイルに追加します。
選択したテーブルまたはビューに BigQuery のロールを付与する手順は次のとおりです。
Google Cloud コンソールの [Dataform] ページに移動します。
リポジトリを選択し、ワークスペースを選択します。
[ファイル] ペインで「
definitions/
definitions」ディレクトリを展開します。アクセス権を付与するテーブルまたはビューの
.sqlx
定義ファイルを選択します。このファイルに次のコード スニペットを入力します。
post_operations { GRANT "ROLE_LIST" ON "RESOURCE_TYPE" ${self()} TO "USER_LIST" }
以下を置き換えます。
ROLE_LIST: 付与する BigQuery のロールまたは BigQuery のロールのカンマ区切りリスト。
RESOURCE_TYPE:
TABLE
またはVIEW
。USER_LIST: ロールが付与されているユーザーのカンマ区切りのリスト。
有効な形式の一覧については、user_list をご覧ください。
省略可: [書式] をクリックします。
テーブルまたはビューを実行します。
増分テーブルに対してアクセス権を付与した場合は、最初の実行後にテーブル定義ファイルから
GRANT
ステートメントを削除します。
次のコードサンプルは、ユーザーにテーブルに対して付与される BigQuery 閲覧者のロールを示しています。
config { type: "table" }
SELECT ...
post_operations {
GRANT `roles/bigquery.dataViewer`
ON TABLE ${self()}
TO "user:222larabrown@gmail.com"
}
テーブルまたはビューから BigQuery ロールを取り消す
テーブルまたはビューから BigQuery のロールを取り消すには、REVOKE
DCL ステートメントを使用して post_operations
ブロックを選択したテーブルまたはビューの .sqlx
定義ファイルに追加します。
選択したテーブルまたはビューから BigQuery ロールを取り消す手順は次のとおりです。
Google Cloud コンソールの [Dataform] ページに移動します。
リポジトリを選択し、ワークスペースを選択します。
[ファイル] ペインで「
definitions/
definitions」ディレクトリを展開します。アクセス権を取り消すテーブルまたはビューの
.sqlx
定義ファイルを選択します。post_operations
ブロックに次のREVOKE
ステートメントを入力します。REVOKE "ROLE_LIST" ON "RESOURCE_TYPE" ${self()} FROM "USER_LIST"
以下を置き換えます。
- ROLE_LIST: 取り消す BigQuery のロールまたは BigQuery のロールのカンマ区切りリスト。
- RESOURCE_TYPE:
TABLE
またはVIEW
。 - USER_LIST: ロールを取り消す対象ユーザーのカンマ区切りのリスト。有効な形式の一覧については、user_list をご覧ください。
ファイル内の
GRANT
ステートメントで付与されたアクセス権を取り消すには、GRANT
ステートメントをREVOKE
ステートメントに置き換えます。省略可: [書式] をクリックします。
テーブルまたはビューを実行します。
増分テーブルに対してアクセス権を取り消した場合は、最初の実行後にテーブル定義ファイルから
REVOKE
ステートメントを削除します。
次のサンプルコードは、ユーザーから取り消されたテーブルに対する BigQuery 閲覧者のロールを示しています。
config { type: "table" }
SELECT ...
post_operations {
REVOKE `roles/bigquery.dataViewer`
ON TABLE ${self()}
FROM "user:222larabrown@gmail.com"
}
テーブルとビューの BigQuery のロールを集約的に管理する
1 つのロケーションの個別のテーブルとビューに対する BigQuery アクセスを制御するには、GRANT
および REVOKE
の DCL ステートメントを使用して専用の type: "operations"
ファイルを作成します。
1 つの type: "operations"
ファイルで BigQuery テーブルへのアクセスを管理する手順は次のとおりです。
Google Cloud コンソールの [Dataform] ページに移動します。
リポジトリを選択し、ワークスペースを選択します。
[ファイル] ペインで、
definitions/
の横にある[その他] メニューをクリックします。
[ファイルを作成] をクリックします。
[ファイルパスを追加] フィールドに、ファイルの名前の後に
definitions/
の後に.sqlx
を入力します。例:definitions/table-access.sqlx
。ファイル名 には数字、英字、ハイフン、アンダースコアのみを使用できます。
[ファイルを作成] をクリックします。
[ファイル] ペインで
definitions/
ディレクトリを展開し、新しく作成されたファイルを選択します。このファイルに次のコード スニペットを入力します。
config { type: "operations" } GRANT "ROLE_LIST" ON RESOURCE_TYPE RESOURCE_NAME TO "USER_LIST" REVOKE "ROLE_LIST" ON { "<var>" }}RESOURCE_TYPE RESOURCE_NAME TO "USER_LIST"
以下を置き換えます。
- ROLE_LIST: 付与または取り消しを行う BigQuery のロールまたは BigQuery のロールのカンマ区切りリスト。
- RESOURCE_TYPE:
TABLE
またはVIEW
。 - RESOURCE_NAME: テーブルまたはビューの名前。
- USER_LIST: ロールの付与または取り消しを行う対象ユーザーのカンマ区切りのリスト。有効な形式の一覧については、user_list をご覧ください。
必要に応じて
GRANT
ステートメントとREVOKE
ステートメントを追加します。ファイル内の
GRANT
ステートメントで付与されたアクセス権を取り消すには、GRANT
ステートメントをREVOKE
ステートメントに置き換えます。REVOKE
ステートメントを追加せずにGRANT
ステートメントを削除しても、アクセス権は取り消されません。
省略可: [書式] をクリックします。
更新するたびにファイルを実行します。
- 増分テーブルに対してアクセス権の付与または取り消しを行った場合は、ステートメントを最初に実行した後にファイルから
GRANT
ステートメントまたはREVOKE
ステートメントを削除します。
- 増分テーブルに対してアクセス権の付与または取り消しを行った場合は、ステートメントを最初に実行した後にファイルから
次のステップ
- IAM について詳しくは、IAM の概要をご覧ください。
- リソースに対するアクセス管理の詳細については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。
- Workforce Identity 連携の主なコンセプトの詳細については、Workforce Identity 連携をご覧ください。
- BigQuery IAM ロールと権限の詳細については、IAM によるアクセス制御をご覧ください。
- BigQuery データセットに対する細かいアクセス権限付与の詳細については、データセットへのアクセスの制御をご覧ください。