インスタンスのサービス ID を構成する

このページでは、Cloud Run インスタンスから API へのアクセスを制御するサービス ID を構成して表示する方法について説明します。 Cloud de Confiance by S3NS

Cloud Run インスタンスには、 Cloud Run インスタンス コンテナから Cloud de Confiance by S3NS API にアクセスするための認証済みアカウントとして使用される サービス ID があります。サービス ID の詳細については、 サービス ID の概要 をご覧ください。

サービス ID の使用方法

Cloud Run では、サービス ID はリソースとプリンシパルの両方の機能を持つサービス アカウントです。

  • リソースとしてのサービス ID: サービス ID として サービス アカウントを関連付けるには、デプロイ担当者アカウント にサービス ID リソースへのアクセス権が必要です。インスタンスの作成や更新などの一部のオペレーションでは、デプロイ担当者アカウントにサービス ID リソースに対する権限が必要です。
  • プリンシパルとしてのサービス ID: Cloud Run インスタンスから Cloud de Confiance API にアクセスするには、サービス ID に対し、インスタンスで実行するオペレーションに必要なロールまたは権限を付与する必要があります。

次のセクションでは、デプロイ担当者アカウントにサービス ID リソースへのアクセス権を付与するために必要なロールと、サービス アカウント プリンシパルに必要なロールまたは権限について説明します。

必要なロール

ユーザーまたは管理者が、デプロイ担当者アカウントとサービス ID に IAM ロールと権限を付与する必要があります。

ここをクリックしてデプロイ担当者のアカウントに必要なロールを表示

インスタンスのサービス ID としてサービス アカウントを関連付けるために必要な権限を取得するには、ユーザーまたは管理者が、サービス ID として使用されるサービス アカウントに対するサービス アカウント ユーザーのロール(roles/iam.serviceAccountUser)をデプロイ担当者アカウントに付与する必要があります。

この事前定義ロールには、インスタンスにサービス アカウントを関連付けるために必要な iam.serviceAccounts.actAs 権限が含まれています。この権限を取得するには、カスタムロールを構成するか、他の事前定義ロールを使用することもできます。

デプロイ担当者アカウントにサービス ID のこのロールを付与する方法については、デプロイ権限をご覧ください。サービス アカウントが Cloud Run インスタンスとは異なるプロジェクトにある場合は、ユーザーまたは管理者 が Cloud Run サービス エージェントの IAM ロールを構成し、組織のポリシーを設定する 必要があります。詳細については、他のプロジェクトでサービス アカウントを使用するをご覧ください。

ここをクリックしてサービス ID に必要なロールを表示

サービス ID が Cloud Run から Cloud de Confiance APIs にアクセスできるようにするには、実行するオペレーションで必要な権限またはロールをサービス ID に付与する必要があります。特定の Cloud クライアント ライブラリにアクセスするには、 Cloud de Confiance サービスの Cloud de Confiance ドキュメントをご覧ください。

Cloud Run インスタンスが他の Cloud de Confiance サービスにアクセスしない場合、サービス ID にロールや権限を付与する必要はありません。プロジェクトに割り当てられたデフォルトのサービス アカウントを使用できます。

専用のサービス アカウントを作成するための推奨事項を受け取る

Cloud de Confiance コンソールから新しいサービス アカウントを作成する際、オプションの「このサービス アカウントにプロジェクトへのアクセス権を付与する」という手順は、追加のアクセスが必要な場合に使用します。たとえば、ある Cloud Run サービスから別のプライベート Cloud Run サービスを呼び出す場合や、Cloud SQL データベースにアクセスする場合は、どちらにも特定の IAM ロールが必要です。詳細については、 アクセスの管理 に関するドキュメントをご覧ください。

Recommender サービスでも、必要最小限の権限セットで専用のサービス アカウントを作成するための推奨事項を自動的に提供しています。

サービス ID を構成する

サービス アカウントをまだ作成していない場合は、 ユーザー管理のサービス アカウントを IAM または Cloud Run で作成します。

サービス ID を構成するには、gcloud CLI または YAML を使用します。

gcloud

サービス アカウントをまだ作成していない場合は、IAM でユーザー管理の サービス アカウントを作成します。

次のコマンドを使用して、サービス アカウントを構成するように既存のインスタンスを更新 できます。

gcloud beta run instances update INSTANCE --service-account SERVICE_ACCOUNT

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

  • INSTANCE: インスタンスの名前。
  • SERVICE_ACCOUNT: 新しい ID に関連付けられたサービス アカウント。この値は、サービス アカウントのメール アドレス(SERVICE_ACCOUNT_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com 形式)です。この形式の SERVICE_ACCOUNT_NAME はサービス アカウントの名前、PROJECT_ID はプロジェクト ID です。 また、デプロイ中に次のコマンドを使用してサービス アカウントを設定することもできます。
gcloud beta run instances deploy INSTANCE --image IMAGE_URL --service-account SERVICE_ACCOUNT

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

  • INSTANCE: インスタンスの名前。
  • IMAGE_URL: コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/hello:latest など)。
  • SERVICE_ACCOUNT:新しい ID に関連付けられたサービス アカウント。この値は、サービス アカウントのメールアドレス(SERVICE_ACCOUNT_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com 形式)です。

YAML

  1. 新しいインスタンスを作成する場合は、この手順をスキップします。 既存のインスタンスを更新する場合は、その YAML 構成をダウンロードします。

    gcloud beta run instances describe INSTANCE --format export > instance.yaml
  2. 次の例には、YAML 構成が含まれています。

    apiVersion: run.googleapis.com/v1
    kind: Instance
    metadata:
      name: INSTANCE
      annotations:
        run.googleapis.com/launch-stage: BETA
    spec:
      serviceAccountName: SERVICE_ACCOUNT

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

    • INSTANCE: Cloud Run インスタンスの名前。
    • SERVICE_ACCOUNT:新しい ID に関連付けられたサービス アカウント。この値は、サービス アカウントのメールアドレス( SERVICE_ACCOUNT_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.comなど)です。
  3. 次のコマンドを使用して、インスタンスを作成または更新します。

    gcloud beta run instances replace instance.yaml

他のプロジェクトでサービス アカウントを使用する

Cloud Run リソースとは異なる Cloud de Confiance プロジェクトからサービス アカウントを構成する場合は、次の操作を行います。

  1. ユーザーまたは管理者が、サービス ID として使用するサービス アカウントに、サービス アカウント ユーザーのロール(roles/iam.serviceAccountUser)を付与します。

    コンソール

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

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

    2. サービス ID として使用しているサービス アカウントのメールアドレスを選択します。

    3. [アクセス権を持つプリンシパル] タブをクリックします。

    4. [アクセス権を付与] ボタンをクリックします。

    5. 管理者またはデベロッパーのロールを付与するプリンシパルに対応するデプロイ担当者のアカウントのメールアドレスを入力します。

    6. [ロールを選択] プルダウンで、[サービス アカウント] > [サービス アカウント ユーザー] ロールを選択します。

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

    gcloud

    gcloud iam service-accounts add-iam-policy-binding コマンドを使用し、ハイライト表示された変数を適切な値に置き換えます。

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

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

    • SERVICE_ACCOUNT_NAME: Cloud Run リソースを接続するサービス アカウントの名前。
    • SERVICE_ACCOUNT_PROJECT_ID: サービス アカウントが配置されているプロジェクト 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
  2. ユーザーまたは管理者が、サービス ID として使用するサービス アカウントに対するサービス アカウント トークン作成者ロール(roles/iam.serviceAccountTokenCreator)を Cloud Run リソースのサービス エージェントに付与します。サービス エージェントは service-PROJECT_NUMBER@serverless-robot-prod.s3ns-system.iam.gserviceaccount.com の形式です。

    コンソール

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

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

    2. サービス ID として使用しているサービス アカウントのメールアドレスを選択します。

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

    4. アクセス権を付与 ボタンをクリックします。

    5. サービス エージェントのメールアドレスを入力します。例: service-PROJECT_NUMBER@serverless-robot-prod.s3ns-system.iam.gserviceaccount.com

    6. [ロールを選択] プルダウンで、[サービス アカウント] > [サービス アカウント トークン作成者] ロールを選択します。

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

    gcloud

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

    gcloud iam service-accounts add-iam-policy-binding \
        SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.s3ns.iam.gserviceaccount.com \
        --member="serviceAccount:service-CLOUD_RUN_RESOURCE_PROJECT_NUMBER@serverless-robot-prod.s3ns-system.iam.gserviceaccount.com" \
        --role="roles/iam.serviceAccountTokenCreator"

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

    • SERVICE_ACCOUNT_NAME: Cloud Run リソースを接続するサービス アカウントの名前。
    • SERVICE_ACCOUNT_PROJECT_ID: サービス アカウントが配置されているプロジェクト ID。
    • CLOUD_RUN_RESOURCE_PROJECT_NUMBER: Cloud Run が配置されているプロジェクト番号。

    このコマンドでは、ユーザー管理のサービス アカウントの更新済みの許可ポリシーが出力されます。

  3. このサービス アカウントを含むプロジェクトで、組織ポリシー iam.disableCrossProjectServiceAccountUsage をフォルダレベルで false または unenforced に設定するか、プロジェクト レベルの設定から継承します。デフォルトは true です。

    コンソール

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

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

    2. プロジェクト選択ツールで、プロジェクト間のサービス アカウントの使用を無効にする組織とプロジェクトを選択します。

    3. プロジェクト間サービス アカウントの使用の無効化ポリシーを選択します。

    4. [ポリシーを管理] をクリックします。

    5. [ポリシーのソース] で、[親のポリシーをオーバーライドする] を選択します。

    6. [ルールを追加] をクリックします。

    7. [適用] で [オフ] を選択します。

    8. ポリシーを適用するには、[ポリシーを設定] をクリックします。

    gcloud

    サービス アカウントがあるプロジェクトで、iam.disableCrossProjectServiceAccountUsage 組織のポリシー制約が適用されていないことを確認します。この制約はデフォルトで適用されます。

    この組織のポリシーの制約を無効にするには、次のコマンドを実行します。

    gcloud resource-manager org-policies disable-enforce iam.disableCrossProjectServiceAccountUsage
        --project=SERVICE_ACCOUNT_PROJECT_ID

    SERVICE_ACCOUNT_PROJECT_ID は、サービス アカウントを含むプロジェクト ID に置き換えます。

ロールのメンバーシップは、サービス アカウント リソースに直接適用することも、上位のリソース階層から継承することもできます。

次のステップ