厳格な act-as モードを使用する

厳格な act-as モードでは、Dataform で次のユーザー アクションに対して追加のセキュリティ チェックが有効になります。

  • リポジトリの作成または更新
  • ワークフロー構成の作成または更新
  • ワークフロー呼び出しの作成
  • リリース構成を更新する

この追加のセキュリティ チェックでは、これらのアクションを実行するユーザーに、有効なサービス アカウント(ワークフローの実行に認証情報が使用されるサービス アカウント)に対する iam.serviceAccounts.actAs 権限が必要です。詳細については、サービス アカウントをリソースに関連付けるをご覧ください。

これらの権限は、次の方法で有効にできます。

必要なロール

このドキュメントのタスクを完了するために必要な権限を取得するには、カスタム サービス アカウントに対するサービス アカウント ユーザー roles/iam.serviceAccountUser)IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

有効なサービス アカウントを特定する

ワークフローを実行している有効なサービス アカウントは、リソースタイプと次の条件に基づいて決定できます。

リソースの種類 有効なサービス アカウント
リポジトリ

リポジトリを作成するときにカスタム サービス アカウントを選択すると、Repository.ServiceAccount サービス アカウントが使用されます。

それ以外の場合は、デフォルトで Dataform サービス エージェントになります。

ワークフロー構成

カスタム サービス アカウントは、ワークフロー構成を作成するときに選択できます。

それ以外の場合、デフォルトはリポジトリの Dataform サービス エージェントになります。

ワークフローの呼び出し

コンパイル結果が WORKFLOW_CONFIG の場合、ワークフロー構成の有効なサービス アカウントが使用されます。

コンパイル結果からワークフロー呼び出しを作成すると、WorkflowInvocation.InvocationConfig サービス アカウントが設定されている場合は、そのアカウントが使用されます。

それ以外の場合、デフォルトはリポジトリの Dataform サービス エージェントになります。

サービス アカウント ユーザーの IAM ロールを付与する

サービス アカウント ユーザーのロール(roles/iam.serviceAccountUser)には、厳密な act-as モードに必要な iam.serviceAccounts.actAs 権限が含まれています。Dataform API を使用する場合は、呼び出す projects.locations.repositories メソッドに基づいて、有効なサービス アカウントにサービス アカウント ユーザーのロールが付与されている必要があります。

  • create または patch
    • Repository.ServiceAccount プロパティが設定されている場合は、そのプロパティにサービス アカウント ユーザーロールが付与されている必要があります。
    • patch メソッドを呼び出す場合は、リポジトリ内のすべてのワークフロー構成のすべての有効なサービス アカウントに対してサービス アカウント ユーザーのロールが付与されている必要があります。
  • workflowConfigs.create または workflowConfigs.patch
    • ワークフロー構成で使用される有効なサービス アカウントに、サービス アカウント ユーザーロールが付与されている必要があります。
  • releaseConfigs.patch
    • このリリース構成を使用するワークフロー構成で使用されるすべての有効なサービス アカウントに対して、サービス アカウント ユーザーのロールが付与されている必要があります。
  • workflowInvocations.create
    • ワークフローの呼び出しで使用される有効なサービス アカウントに、サービス アカウント ユーザーのロールが付与されている必要があります。

カスタム サービス アカウントにサービス アカウント ユーザー ロールを付与する手順は、次のとおりです。

  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. [保存] をクリックします。

詳細については、ワークフロー構成の作成に必要なロールリリース構成の作成に必要なロールをご覧ください。

厳密な act-as モードが自動リリースと実行に与える影響

厳密な act-as モードを有効にすると、リポジトリの自動リリースとワークフローの自動実行に次のような影響があります。

サードパーティ リポジトリに接続されていないリポジトリの場合:

  • リリース構成で自動リリース用の Cron スケジュールを設定することはできません。これは、必要な iam.serviceAccounts.actAs 権限を持たないユーザーがダウンストリーム サービス アカウントに対して行ったコード変更が自動的にデプロイされないようにするために適用されます。
  • ワークフロー構成で Cron スケジュールを使用してスケジュールされたワークフロー実行は、引き続き有効になります。これらの自動実行を成功させるには、ワークフロー構成で指定された有効なサービス アカウントに対する iam.serviceAccounts.actAs 権限をデフォルトの Dataform サービス エージェントに付与する必要があります。

サードパーティ リポジトリに接続されているリポジトリの場合:

  • リリースとワークフローの実行のスケジュール設定は許可されています。
  • リリース構成からの自動リリースまたはワークフロー構成からの自動実行を有効にするには、関連する有効なサービス アカウントに対する iam.serviceAccounts.actAs 権限をデフォルトの Dataform サービス エージェントに付与する必要があります。
    • 自動リリース構成の場合は、このリリース構成によってトリガーされるすべてのワークフロー構成の有効なサービス アカウントに権限を付与します。
    • 自動ワークフロー構成の場合は、そのワークフロー構成で使用される有効なサービス アカウントに対する権限を付与します。

次のステップ