厳格な act-as モードでは、Dataform で次のユーザー操作に対して追加のセキュリティ チェックが有効になります。
- リポジトリの作成または更新。
- ワークフロー構成の作成または更新。
- ワークフローの呼び出しの作成。
- リリース構成の更新。
この追加のセキュリティ チェックでは、これらのアクションを実行するユーザーに、有効なサービス アカウントに対する iam.serviceAccounts.actAs 権限が必要です。有効なサービス アカウントとは、ワークフローの実行に使用される認証情報を持つサービス アカウントです。
詳細については、
サービス アカウントをリソースに関連付けるをご覧ください。
厳格な act-as モードは、すべてのリポジトリに適用されます。
必要なロール
このドキュメントのタスクを実行するために必要な権限を取得するには、次の IAM ロールを付与するように管理者へ依頼してください。
- カスタム サービス アカウントに対する サービス アカウント ユーザー
(
roles/iam.serviceAccountUser) -
Logging でログを表示する:
ログビューア (
roles/logging.viewer) プロジェクトに対する -
ユーザーまたはサービス アカウントに IAM ロールを付与する:
サービス アカウント管理者 (
roles/iam.serviceAccountAdmin) プロジェクトに対する
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタム ロールや他の事前定義 ロールから取得することもできます。
有効なサービス アカウントの act-as 権限を確認する
Dataform ワークフローが安全に中断なく実行されるようにするには、ワークフローで使用するサービス アカウントの act-as 権限を確認することが重要です。このセクションでは、リソースの有効なサービス アカウントを特定し、Cloud Logging を使用して権限の問題を確認し、見つかった問題を解決する方法について説明します。
有効なサービス アカウントを特定する
ワークフローを実行している有効なサービス アカウントは、リソースの種類と次の条件に基づいて特定できます。
| リソースの種類 | 有効なサービス アカウント |
|---|---|
| リポジトリ | リポジトリ用に構成されたカスタム サービス アカウント。すべてのリポジトリにカスタム サービス アカウントが必要です。このサービス アカウントは、 |
| ワークフロー構成 | 新しいワークフロー構成では、ワークフロー構成の作成時に選択したカスタム サービス アカウントが使用されます。サービス アカウントが選択されていない場合は、リポジトリのサービス アカウントが使用されます。 |
| ワークフローの呼び出し | コンパイル結果が コンパイル結果からワークフローの呼び出しを作成する場合、 それ以外の場合、デフォルトではリポジトリ レベルで構成されたサービス アカウントが使用されます。 |
Cloud Logging で権限の問題を確認する
セキュリティを強化するため、Dataform は、Dataform リソースで使用されるサービス アカウントに iam.serviceAccounts.actAs 権限がないかどうかを確認します。
これらのチェックの結果(権限に関する潜在的な問題を含む)は、Cloud Logging に記録されます。これらのログを定期的に確認して、不足している iam.serviceAccounts.actAs 権限を特定し、付与する必要があります。これらのログを確認することで、Dataform ワークフローと構成が中断なく機能し続けるようにします。
Cloud Logging でログを確認する
コンソールで、[**ログ エクスプローラ**] ページに移動します。 Google Cloud
ログを確認する Google Cloud プロジェクトを選択します。
クエリエディタを使用して、次のオプションで Dataform
actAsログをフィルタします。失敗して対応が必要な
actAsチェックのみを一覧表示するには、次のクエリを使用します。logName: "projects/PROJECT_ID/logs/dataform.googleapis.com%2Factas_dry_run_result" jsonPayload.dryRunResult = falseすべての
actAsチェックを一覧表示するには、次のクエリを使用します。logName: "projects/PROJECT_ID/logs/dataform.googleapis.com%2Factas_dry_run_result"
PROJECT_IDは、実際の Google Cloud プロジェクト ID に置き換えます。[クエリを実行] をクリックします。
ログエントリを解釈する
クエリ結果でログエントリを開き、次の jsonPayload フィールドを表示します。
| フィールド | タイプ | 説明 |
|---|---|---|
dryRunResult |
ブール値 | true: 権限チェックに合格しました。false: チェックに失敗しました。呼び出し元のプリンシパルに、サービス アカウントに対する iam.serviceAccounts.actAs 権限がありません。 |
caller |
文字列 | API 呼び出しを開始したプリンシパル(ユーザーまたはサービス アカウント)のメールアドレス。 |
serviceAccount |
文字列 | 呼び出し元のプリンシパルが act-as を試みたサービス アカウント。通常、このフィールドは dryRunResult フィールドが false の場合に存在します。 |
apiMethod |
文字列 | チェックをトリガーした Dataform API メソッド(CreateWorkflowInvocation、UpdateRepository など)。 |
*_context |
オブジェクト | 呼び出された API メソッドに関連するリソース名を含むオブジェクト。詳細については、コンテキスト オブジェクトをご覧ください。 |
コンテキスト オブジェクト
ログエントリには、jsonPayload フィールド内にコンテキスト オブジェクトが含まれています。このオブジェクトの
フィールドには、関連する Dataform エンティティの完全修飾 Google Cloud リソース
名が含まれています。これらの名前は、次のリストに示す標準構造に従っているため、リソースを正確に識別できます。
create_workflow_invocation_context: API メソッドがCreateWorkflowInvocationの場合に存在します。workflowInvocation: ワークフローの呼び出しのリソース名。- リソース名の形式は次のとおりです:
projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowInvocations/WORKFLOW_INVOCATION_ID。
- リソース名の形式は次のとおりです:
compilationResultまたはworkflowConfig: 呼び出しに使用されるソースのリソース名。compilationResultのリソース名の形式はprojects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/compilationResults/COMPILATION_RESULT_IDです。workflowConfigのリソース名の形式はprojects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowConfigs/WORKFLOW_CONFIG_IDです。
create_repository_contextまたはupdate_repository_context: API メソッドがCreateRepositoryまたはUpdateRepositoryの場合に存在します。repository: Dataform リポジトリのリソース名。- リソース名の形式は次のとおりです:
projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID
- リソース名の形式は次のとおりです:
update_release_config_context: API メソッドがUpdateReleaseConfigの場合に存在します。releaseConfig: リリース構成のリソース名。- リソース名の形式は次のとおりです:
projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/releaseConfigs/RELEASE_CONFIG_ID。
- リソース名の形式は次のとおりです:
create_workflow_config_contextまたはupdate_workflow_config_context: API メソッドがCreateWorkflowConfigまたはUpdateWorkflowConfigの場合に存在します。workflowConfig: ワークフロー構成のリソース名。- リソース名の形式は次のとおりです:
projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowConfigs/WORKFLOW_CONFIG_ID。
- リソース名の形式は次のとおりです:
ドキュメントに記載されている形式とロギング エントリを比較するには、次のように置き換えます。
PROJECT_ID: プロジェクトの固有識別子 Google Cloud 。LOCATION_ID: Dataform リポジトリが配置されているリージョン。REPOSITORY_ID: Dataform リポジトリのユーザー定義 ID。これは、リポジトリの作成時に付けられた名前です。COMPILATION_RESULT_ID: Dataform コンパイル結果のシステム生成の一意の識別子。RELEASE_CONFIG_ID: Dataform リリース構成のユーザー定義 ID。WORKFLOW_CONFIG_ID: Dataform ワークフロー構成のユーザー定義 ID。
権限の問題を解決する
dryRunResult フィールドが false のログエントリが見つかった場合は、次の操作を行います。
jsonPayloadの詳細で、callerフィールドのメールアドレスをメモして、プリンシパルを特定します。serviceAccountフィールドのメールアドレスをメモして、サービス アカウントを特定します。呼び出し元のプリンシパルに、サービス アカウントとして動作する権限が付与されていることを確認します。 この権限を付与すると、呼び出し元はサービス アカウントが保持する権限を使用できます。
アクセスが意図されている場合は、ターゲット サービス アカウントの呼び出し元のプリンシパルに サービス アカウント ユーザーのロール (
roles/iam.serviceAccountUser)を付与します。詳細については、 必要な IAM ロールを付与するをご覧ください。
ロールを付与すると、呼び出し元とサービス アカウントの組み合わせの今後のログには dryRunResult: true が表示されます。
必要な IAM ロールを付与する
サービス アカウント ユーザーのロール
(roles/iam.serviceAccountUser)には、厳格な act-as モードに必要な iam.serviceAccounts.actAs
権限が含まれています。Dataform API を使用する場合は、呼び出す
projects.locations.repositories メソッド
に基づいて、有効なサービス アカウントにサービス アカウント ユーザーのロールが付与されている必要があります。
createまたはpatchRepository.ServiceAccountプロパティが設定されている場合は、そのプロパティにサービス アカウント ユーザーのロールが付与されている必要があります。patchメソッドを呼び出す場合は、リポジトリ内のすべてのワークフロー構成のすべての有効なサービス アカウントにサービス アカウント ユーザーのロールが付与されている必要があります。
workflowConfigs.createまたはworkflowConfigs.patch- ワークフロー構成で使用される有効なサービス アカウントにサービス アカウント ユーザーのロールが付与されている必要があります。
releaseConfigs.patch- このリリース構成を使用してワークフロー構成で使用されるすべての有効なサービス アカウントにサービス アカウント ユーザーのロールが付与されている必要があります。
workflowInvocations.create- ワークフローの呼び出しで使用される有効なサービス アカウントにサービス アカウント ユーザーのロールが付与されている必要があります。
カスタム サービス アカウントにサービス アカウント ユーザーのロールを付与する手順は次のとおりです。
コンソールで、[**IAM**] > [**サービス アカウント**] に移動します。 Google Cloud
プロジェクトを選択します。
[**プロジェクト「PROJECT_NAME」のサービス アカウント**] ページで、カスタム サービス アカウントを選択します。
[アクセス権を持つプリンシパル] に移動し、[アクセスを許可] をクリックします。
[新しいプリンシパル] フィールドに、デフォルトの Dataform サービス エージェント ID を入力します。
デフォルトの Dataform サービス エージェント ID の形式は次のとおりです。
service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.comPROJECT_NUMBERは、使用する Google Cloud プロジェクト番号に置き換えます。[ロールを選択] リストで、[サービス アカウント ユーザー] ロールを選択します。
[別のロールを追加] をクリックし、[サービス アカウント トークン作成者] ロールを選択します。
[保存] をクリックします。
詳細については、 ワークフロー構成の作成に必要なロール と リリース構成の作成に必要なロールをご覧ください。
厳格な act-as モードが自動リリースと実行に与える影響
厳格な act-as モードは、リポジトリの自動リリースとワークフローの自動実行に次のような影響を与えます。
サードパーティのリポジトリに接続されていないリポジトリの場合:
- リリース構成で自動リリースの
Cron スケジュール
を設定することはできません。これは、下流のサービス アカウントに対する必要な
iam.serviceAccounts.actAs権限がない可能性のあるユーザーによるコード変更が自動的にデプロイされないようにするために適用されます。 - ワークフロー構成で Cron スケジュールを使用してスケジュールされたワークフロー実行は有効なままです。これらの自動実行を成功させるには、ワークフロー構成で指定された
有効なサービス アカウント
に対する
iam.serviceAccounts.actAs権限をデフォルト Dataform サービス エージェントに付与する必要があります。
サードパーティのリポジトリに接続されているリポジトリの場合:
- スケジュールされたリリースとスケジュールされたワークフロー実行は許可されます。
- リリース構成からの自動リリースまたはワークフロー構成からの自動
実行を有効にするには、関連する
有効なサービス アカウントに対する
iam.serviceAccounts.actAs権限 をデフォルトの Dataform サービス エージェントに付与する必要があります:- 自動リリース構成の場合は、このリリース構成によってトリガーされるすべてのワークフロー構成の有効なサービス アカウントに対する権限を付与します。
- 自動ワークフロー構成の場合は、そのワークフロー構成で使用される有効なサービス アカウントに対する権限を付与します。
次のステップ
- リポジトリの作成方法については、 リポジトリを作成するをご覧ください。
- Dataform と BigQuery の連携の詳細については、 ワークフローの概要をご覧ください。
- ワークフロー構成の作成方法については、 実行をスケジュールするをご覧ください。
- リリース構成の作成方法については、 コンパイルを構成するをご覧ください。