このドキュメントでは、Eventarc を使用して Google Cloud やその他のソースからターゲット ワークフローにイベントを転送する際に必要な Identity and Access Management(IAM)のロールと権限を付与する方法について説明します。
Eventarc API を呼び出すプリンシパルにプロジェクト全体の権限を付与します(Eventarc トリガー作成者など)。
- Eventarc 管理者ロールを使用すると、トリガーの作成時にサービス アカウントを指定するなど、すべての Eventarc リソースを完全に制御できます。
- サービス アカウント ユーザーのロールを使用すると、プリンシパルがサービス アカウントの権限を借用してサービス アカウントを使用できます。サービス アカウントは Eventarc トリガーに関連付けられ、トリガーの ID を表します。
トリガー サービス アカウントに Eventarc トリガー権限を付与する:
- Eventarc イベント受信者のロールを使用すると、Eventarc トリガーがイベント プロバイダからイベントを受信できます。Cloud Pub/Sub から直接イベントを転送する場合は、このロールを付与する必要はありません。
- ワークフロー起動元ロールを使用すると、Eventarc トリガーでワークフローの実行を開始できます。
-
- Cloud Storage からの直接イベントのトリガーを作成する場合は、Pub/Sub パブリッシャーのロールを付与します。
- 2021 年 4 月 8 日以前に Cloud Pub/Sub サービス エージェントを有効にした場合は、サービス アカウント トークン作成者のロールを付与します。
IAM ロールの付与の詳細については、アクセスの管理をご覧ください。必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
プロジェクト全体の権限を付与する
プロジェクト作成者にはオーナーロール(roles/owner
)が付与されます。デフォルトでは、このロールには、ほとんどの Google Cloud リソースに対する完全アクセスに必要な権限が含まれています。それ以外の場合は、適切なリソースの管理者が適切なプリンシパル(メンバー)に必要なロールを付与する必要があります。
プリンシパルは Google アカウント(エンドユーザーの場合)やサービス アカウント(アプリケーションとコンピューティング ワークロードの場合)になることもあります。各プリンシパルには、一意の識別子(通常はメールアドレス)があります。
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
値の一覧については、ポリシー バインディングのリファレンスをご覧ください。
サービス アカウントのユーザーロール(
roles/iam.serviceAccountUser
)を使用すると、プリンシパルはサービス アカウントとして操作を実行できます。Eventarc トリガーを作成するとき、またはワークフローをデプロイするときに、ユーザー管理のサービス アカウントをトリガーまたはワークフローに関連付けるために、このロールが必要です。詳細については、サービス アカウントの認証に必要なロールをご覧ください。
プロジェクトに対するロールを付与して、プリンシパルに複数のサービス アカウントの権限借用を許可します。あるいは、サービス アカウントにロールを付与して、プリンシパルに特定のサービス アカウントの権限借用を許可します。
プロジェクトに対するロールを付与します。
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 のデフォルトのサービス アカウントが使用されます。
トリガーを柔軟に管理できるように、独自のユーザー管理サービス アカウントを作成することをおすすめします。
サービス アカウントを作成し、その名前をメモします。
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \ --description="DESCRIPTION" \ --display-name="DISPLAY_NAME"
次のように置き換えます。
SERVICE_ACCOUNT_NAME
: サービス アカウントの名前。この名前は、サービス アカウントを識別するメールアドレスに表示されます。DESCRIPTION
: サービス アカウントの説明(省略可)DISPLAY_NAME
: Google Cloud コンソールに表示するサービス アカウント名
イベントを受信できるように、Eventarc トリガーに関連付けられたサービス アカウントにプロジェクトの Eventarc イベント受信者のロール(
roles/eventarc.eventReceiver
)を付与します。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
は、前の手順でメモしたサービス アカウントの名前に置き換えます。ワークフローの実行を開始できるように、Eventarc トリガーに関連付けられたサービス アカウントにプロジェクトのワークフロー起動元ロール(
roles/workflows.invoker
)を付与します。gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/workflows.invoker
SERVICE_ACCOUNT_NAME
は、以前にメモしたサービス アカウントの名前に置き換えます。
Google サービス エージェントに権限を付与する
一部の Google Cloud サービスでは、ユーザーのリソースにアクセスするために、サービス エージェントを使用します。API にサービス エージェントが必要な場合は、API を有効にして使用した後、サービス エージェントが作成されます。
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)'
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
次のステップ
Eventarc のアクセス制御オプションについて学習する。