Google Kubernetes Engine(GKE)ターゲットのロールと権限

このドキュメントでは、Eventarc を使用して Google Cloud やその他のソースから GKE の宛先(GKE クラスタで実行されている限定公開および公開サービスのパブリック エンドポイントを含む)へのイベント転送をサポートするために、Identity and Access Management(IAM)のロールと権限を付与する方法について説明します。

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

    1. Eventarc 管理者ロールを使用すると、トリガーの作成時にサービス アカウントを指定するなど、すべての Eventarc リソースを完全に制御できます。
    2. サービス アカウント ユーザーのロールを使用すると、プリンシパルがサービス アカウントの権限を借用してサービス アカウントを使用できます。サービス アカウントは Eventarc トリガーに関連付けられ、トリガーの ID を表します。
  2. トリガー サービス アカウントに Eventarc トリガー権限を付与する:

    1. Eventarc イベント受信者のロールを使用すると、Eventarc トリガーがイベント プロバイダからイベントを受信できます。Cloud Pub/Sub から直接イベントを転送する場合は、このロールを付与する必要はありません。
    2. Pub/Sub サブスクライバー ロールにより、Eventarc トリガーは Pub/Sub からのメッセージを使用し、サブスクリプションとトピックを関連付けることができます。
    3. モニタリング指標の書き込みロールにより、Eventarc のイベント フォワーダーは、Cloud Monitoring と指標を提供するその他のシステムを使用して指標を書き込むことができます。
  3. Google サービス エージェントに権限を付与する:

    1. Cloud Storage からの直接イベントのトリガーを作成する場合は、Pub/Sub パブリッシャーのロールを付与します。
    2. 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 トリガーを作成するときに必要になります。これにより、ユーザー管理のサービス アカウントをトリガーと ID に関連付けることができます。詳細については、サービス アカウントの認証に必要なロールをご覧ください。

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

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

    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 トリガーに関連付けられたサービス アカウントにプロジェクトの 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 は、前の手順でメモしたサービス アカウントの名前に置き換えます。

  3. プロジェクトの Pub/Sub サブスクライバーのロールroles/pubsub.subscriber)を Eventarc トリガーに関連付けられたサービス アカウントに付与します。これにより、Pub/Sub からのメッセージが使用され、トピックとサブスクリプションが関連付けられます。

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

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

  4. プロジェクトのモニタリング指標の書き込みのロールroles/monitoring.metricWriter)を Eventarc トリガーに関連付けられたサービス アカウントに付与します。これにより、Eventarc のイベント フォワーダーは、Cloud Monitoring と指標を提供するその他のシステムを使用して、指標を書き込むことができます。

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

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

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

  1. 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)'
  2. 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

次のステップ