VPC ネットワークの内部 HTTP エンドポイントのロールと権限

このドキュメントでは、Eventarc を使用して Google Cloud から Virtual Private Cloud(VPC)ネットワークの内部 HTTP エンドポイントにイベントを転送するために、Identity and Access Management(IAM)のロールと権限を付与する方法について説明します。

  1. Eventarc API を呼び出すプリンシパルにプロジェクト全体の権限を付与します(Eventarc トリガー作成者など)。

    1. Eventarc 管理者ロールを使用すると、トリガーの作成時にサービス アカウントを指定するなど、すべての Eventarc リソースを完全に制御できます。
    2. サービス アカウント ユーザーのロールを使用すると、プリンシパルがサービス アカウントの権限を借用してサービス アカウントを使用できます。サービス アカウントは Eventarc トリガーに関連付けられ、トリガーの ID を表します。
  2. トリガー サービス アカウントに Eventarc トリガー権限を付与する: Eventarc イベント受信者ロールを使用すると、Eventarc トリガーはイベント プロバイダからイベントを受信できます。Cloud Pub/Sub から直接イベントを転送する場合は、このロールを付与する必要はありません。

  3. Google サービス エージェントに権限を付与する:

    1. 内部 HTTP エンドポイントの URI が、Cloud DNS によって解決可能なサービスの内部 DNS 名を使用している場合は、Cloud DNS ピアのロールを付与します。
    2. Cloud Storage からの直接イベントのトリガーを作成する場合は、Pub/Sub パブリッシャーのロールを付与します。
    3. 2021 年 4 月 8 日以前に Cloud Pub/Sub サービス エージェントを有効にした場合は、サービス アカウント トークン作成者のロールを付与します。

IAM ロールの付与の詳細については、アクセスの管理をご覧ください。必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

プロジェクト全体の権限を付与する

プロジェクト作成者にはオーナーロールroles/owner)が付与されます。デフォルトでは、このロールには、ほとんどの Google Cloud リソースに対する完全アクセスに必要な権限が含まれています。それ以外の場合は、適切なリソースの管理者が適切なプリンシパル(メンバー)に必要なロールを付与する必要があります。

プリンシパルは Google アカウント(エンドユーザーの場合)やサービス アカウント(アプリケーションとコンピューティング ワークロードの場合)になることもあります。各プリンシパルには、一意の識別子(通常はメールアドレス)があります。

  1. Eventarc 管理者ロールroles/eventarc.admin)を使用すると、すべての Eventarc リソースを完全に制御できます。

    プロジェクトに対するロールを付与します。

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=PRINCIPAL \
        --role=roles/eventarc.admin

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

    • PROJECT_ID: Google Cloud プロジェクト ID。
    • PRINCIPAL: トリガー作成者の識別子。通常、PRINCIPAL_TYPE:ID の形式で指定します。例: user:my-user@example.com。有効な PRINCIPAL_TYPE 値の一覧については、ポリシー バインディングのリファレンスをご覧ください。
  2. サービス アカウント ユーザーのロールroles/iam.serviceAccountUser)を使用すると、プリンシパルはサービス アカウントとして操作を実行できます。

    たとえば、ユーザー管理のサービス アカウントを Eventarc トリガーに関連付けるには、このロールが必要です。また、Cloud Run サービスをデプロイするときに、ランタイム サービス アカウントとして機能させる場合にも必要です。詳細については、サービス アカウントの権限借用をご覧ください。

    プロジェクトに対するロールを付与して、プリンシパルに複数のサービス アカウントの権限借用を許可します。あるいは、サービス アカウントにロールを付与して、プリンシパルに特定のサービス アカウントの権限借用を許可します。

    プロジェクトに対するロールを付与します。

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

    または、サービス アカウントにロールを付与します。

    gcloud iam service-accounts add-iam-policy-binding \
        projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
        --member=PRINCIPAL \
        --role=roles/iam.serviceAccountUser

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

    • SERVICE_ACCOUNT_PROJECT_ID: サービス アカウントを含む Google Cloud プロジェクト ID。
    • SERVICE_ACCOUNT_NAME: サービス アカウントの名前。

Eventarc トリガーの権限を付与する

すべての Eventarc トリガーは、トリガーの作成時に IAM サービス アカウントに関連付けられます。トリガーがデフォルトの ID として使用するユーザー管理のサービス アカウントを指定できます。トリガーの作成時にサービス アカウントを指定しない場合、トリガーの ID に Compute Engine のデフォルトのサービス アカウントが使用されます。

トリガーを柔軟に管理できるように、独自のユーザー管理サービス アカウントを作成することをおすすめします。

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

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
        --description="DESCRIPTION" \
        --display-name="DISPLAY_NAME"
    

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

    • SERVICE_ACCOUNT_NAME: サービス アカウントの名前。この名前は、サービス アカウントを識別するメールアドレスに表示されます。
    • DESCRIPTION: サービスの説明(省略可)
    • DISPLAY_NAME: Google Cloud コンソールに表示するサービス アカウント名
  2. トリガーがイベントを受信できるように、プロジェクトの Eventarc イベント受信者のロールroles/eventarc.eventReceiver)を Eventarc トリガーに関連付けられたサービス アカウントに付与します。

    Cloud Pub/Sub から直接イベントを転送する場合は、Eventarc イベント受信者のロールを付与する必要はありません。

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/eventarc.eventReceiver
    

    SERVICE_ACCOUNT_NAME は、前の手順でメモしたサービス アカウントの名前に置き換えます。

Google サービス エージェントに権限を付与する

一部の Google Cloud サービスでは、ユーザーのリソースにアクセスするために、Google 管理のサービス アカウントを使用しています。これらのサービス アカウントは、サービス エージェントとも呼ばれます。API にサービス エージェントが必要な場合は、API を有効にして使用した後、サービス エージェントが作成されます。

  1. VPC ネットワークの内部 HTTP エンドポイントの URI が、Cloud DNS によって解決可能なサービスの内部 DNS 名を使用している場合、DNS ピアリング ゾーンのあるターゲット ネットワークにアクセスするには、VPC ホスト プロジェクトの DNS ピアのロールroles/dns.peer)を Eventarc サービス エージェントに付与します。

    gcloud projects add-iam-policy-binding VPC_HOST_PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-eventarc.iam.gserviceaccount.com \
        --role=roles/dns.peer

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

    • VPC_HOST_PROJECT_ID: VPC ホスト プロジェクトの Google Cloud プロジェクト ID。共有 VPC を使用すると、1 つ以上のサービス プロジェクトをホスト プロジェクトに接続できます。これにより、複数のプロジェクトのリソースを共通の VPC ネットワークに接続できます。

      VPC ネットワークの構成方法によっては、VPC ホスト プロジェクトが Eventarc トリガー プロジェクトになる場合があります。

    • PROJECT_NUMBER: Eventarc トリガー プロジェクトの Google Cloud プロジェクト番号。プロジェクト番号は、Google Cloud コンソールの [ようこそ] ページで確認できます。また、次のコマンドで確認することもできます。

      gcloud projects describe PROJECT_ID --format='value(projectNumber)'
  2. Cloud Storage からの直接イベントのトリガーを作成する場合、トピックへのメッセージのパブリッシュをサポートするには、Pub/Sub パブリッシャーのロールroles/pubsub.publisher)をプロジェクトの Cloud Storage サービス エージェントに送信します。

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com \
        --role=roles/pubsub.publisher

    PROJECT_NUMBER は、実際の Google Cloud プロジェクトの番号に置き換えます。プロジェクト番号は、Google Cloud コンソールの [ようこそ] ページで確認できます。また、次のコマンドで確認することもできます。

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'
  3. 2021 年 4 月 8 日以前に Cloud Pub/Sub サービス エージェントを有効にしていて、承認済みの Pub/Sub push リクエストをサポートするには、Pub/Sub サービス エージェントのプロジェクトにサービス アカウント トークン作成者のロールroles/iam.serviceAccountTokenCreator)を付与します。それ以外の場合、このロールはデフォルトで付与されます。

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator

次のステップ