プロジェクト間サービス アカウントをサポートする

すべての Eventarc トリガーは、トリガーの作成時に Identity and Access Management(IAM)サービス アカウントに関連付けられます。トリガーは、サービス アカウントをデフォルトの ID として使用します。

デフォルトでは、ある Google Cloud プロジェクトで IAM サービス アカウントを作成して、別のプロジェクトのリソースに接続することはできません。ただし、組織のサービス アカウントを別のプロジェクトに一元化すると、サービス アカウントの管理が容易になります。このドキュメントでは、あるプロジェクトのサービス アカウントを別のプロジェクトの Eventarc トリガーに関連付けるために必要な手順の概要について説明します。

これらの操作を行う権限がない場合は、権限の付与を管理者に依頼してください。

プロジェクト間サービス アカウントの使用を有効にする

サービス アカウント プロジェクトで次の手順を完了します。

  1. Google Cloud コンソールで、[組織のポリシー] ページに移動します。

    [組織のポリシー] に移動

  2. プロジェクト間サービス アカウントの使用を無効にするポリシーを適用している場合は、そのようなポリシーを無効にする必要があります。

    詳細については、プロジェクト間でサービス アカウントの接続を有効にするをご覧ください。

  3. サービス アカウントを作成し、その名前をメモします。

サービス アカウント認証の権限を付与する

プリンシパルは、いくつかの方法でサービス アカウントを使用した認証を行うことができます。それぞれの認証タイプで、プリンシパルにサービス アカウントに対する特定の IAM 権限が必要です。詳細については、サービス アカウントの認証に必要なロールをご覧ください。

  1. トリガーを含む Google Cloud プロジェクトの Eventarc サービス エージェントにサービス アカウント トークン作成者roles/iam.serviceAccountTokenCreator)IAM ロールを付与します。これにより、サービス エージェントはプロジェクト間でのサービス アカウントのアクセスを管理できます。サービス エージェントは、特定のプロジェクトの Google Cloud サービスの ID です。詳細については、サービス エージェントをご覧ください。

    コンソール

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

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

    2. Eventarc トリガーに接続するサービス アカウントを所有するプロジェクトを選択します。

    3. 以前に作成したサービス アカウントのメールアドレスをクリックします。

    4. [権限] タブをクリックします。

    5. [このサービス アカウントにアクセスできるプリンシパル] セクションで、[ アクセス権を付与] をクリックします。

    6. [新しいプリンシパル] フィールドに、Eventarc サービス エージェントのメールアドレスを入力します。

      service-EVENTARC_PROJECT_NUMBER@gcp-sa-eventarc.iam.gserviceaccount.com

      EVENTARC_PROJECT_NUMBER は、トリガーを含むプロジェクトの Google Cloud プロジェクト番号に置き換えます。

    7. [別のロールを追加] をクリックします。

    8. [ロールを選択] リストで、[サービス アカウント トークン作成者] でフィルタして、ロールを選択します。

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

    gcloud

    gcloud iam service-accounts add-iam-policy-binding コマンドを実行します。

    gcloud iam service-accounts add-iam-policy-binding \
        SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
        --member='serviceAccount:service-EVENTARC_PROJECT_NUMBER@gcp-sa-eventarc.iam.gserviceaccount.com' \
        --role='roles/iam.serviceAccountTokenCreator'

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

    • SERVICE_ACCOUNT_NAME: サービス アカウントの名前
    • SERVICE_ACCOUNT_PROJECT_ID: サービス アカウントを所有するプロジェクトの Google Cloud プロジェクト ID
    • EVENTARC_PROJECT_NUMBER: トリガーを含むプロジェクトの Google Cloud プロジェクト番号
  2. トリガーを作成するすべてのプリンシパルにサービス アカウント ユーザーroles/iam.serviceAccountUser)IAM ロールを付与します(たとえば、トリガーを含む Google Cloud プロジェクトの Eventarc サービス エージェントなど)。この事前定義ロールには、サービス アカウントをリソースに関連付けるために必要な iam.serviceAccounts.actAs 権限が含まれています。

    コンソール

    プロジェクトにロールを付与して、プリンシパルが複数のサービス アカウントの権限を借用できるようにします。

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

      [IAM] に移動

    2. サービス アカウントを所有するプロジェクトを選択します。

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

    4. [新しいプリンシパル] フィールドに、プリンシパルのメールアドレスを入力します。

    5. [ロールを選択] リストで、[サービス アカウント ユーザー] でフィルタし、ロールを選択します。

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

    または、サービス アカウントにロールを付与して、プリンシパルが特定のサービス アカウントの権限のみを借用できるようにします。

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

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

    2. サービス アカウントを所有するプロジェクトを選択します。

    3. 以前に作成したサービス アカウントのメールアドレスをクリックします。

    4. [権限] タブをクリックします。

    5. [このサービス アカウントにアクセスできるプリンシパル] セクションで、[ アクセス権を付与] をクリックします。

    6. [新しいプリンシパル] フィールドに、プリンシパルのメールアドレスを入力します。

    7. [別のロールを追加] をクリックします。

    8. [ロールを選択] リストで、[サービス アカウント ユーザー] でフィルタし、ロールを選択します。

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

    gcloud

    gcloud projects add-iam-policy-binding コマンドを実行してプロジェクトにロールを付与し、プリンシパルが複数のサービス アカウントの権限を借用できるようにします。

    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member=PRINCIPAL \
        --role='roles/iam.serviceAccountUser'

    または、gcloud iam service-accounts add-iam-policy-binding コマンドを実行してサービス アカウントにロールを付与し、プリンシパルが特定のサービス アカウントの権限を借用できるようにします。

    gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_RESOURCE_NAME \
        --member=PRINCIPAL \
        --role='roles/iam.serviceAccountUser'

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

    • SERVICE_ACCOUNT_PROJECT_ID: サービス アカウントを所有するプロジェクトの Google Cloud プロジェクト ID
    • PRINCIPAL: トリガー作成者の識別子(user|group|serviceAccount:email または domain:domain の形式)。例:
      • user:test-user@gmail.com
      • group:admins@example.com
      • serviceAccount:test123@example.domain.com
      • domain:example.domain.com m
    • SERVICE_ACCOUNT_RESOURCE_NAME: サービス アカウントの完全なリソース名。例:

      projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com

      ここで

      • SERVICE_ACCOUNT_PROJECT_ID は、サービス アカウントを所有する Google Cloud プロジェクト ID です。
      • SERVICE_ACCOUNT_NAME は、サービス アカウントの名前です。

イベント ルーティングをサポートするための権限を付与する

Eventarc トリガーを作成する前に、Eventarc を使用したイベントのルーティングをサポートする他の IAM 権限を付与する必要があります。

  1. Eventarc トリガーが処理を行う際にアクセスする必要のあるリソース、イベント プロバイダ、宛先に基づいて適切な権限を付与します。詳細については、すべてのロールと権限をご覧ください。

  2. プロジェクト間サービス アカウントを使用してトリガーを作成します。

次のステップ