IAM によるアクセス制御

デフォルトでは、プロジェクトのオーナーと編集者のみがサービスとジョブの作成、更新、削除、呼び出しを行うことができます。また、プロジェクトのオーナーと Cloud Run 管理者のみが Identity and Access Management(IAM)ポリシーを変更できます(サービスを一般公開するなど)。詳細については、Cloud Run IAM ロールをご覧ください。

これらの操作を他のプリンシパルまたはグループに許可するには、IAM を使用してさまざまなプリンシパルロールを付与します。

gcloud functions コマンドまたは Cloud Functions v2 API を使用して関数を作成またはデプロイし、下位互換性のためにこれらのオプションを使用する必要がある場合は、IAM によるアクセス制御をご覧ください。

Cloud Run の事前定義ロール

次の事前定義ロールは、基本ロール(オーナー、編集者、閲覧者)と比べて、Cloud Run リソースにアクセスするためのより細かなアクセス制御が可能です。

ロール 説明
Cloud Run 管理者(roles/run.admin サービスとジョブの作成、更新、削除、ジョブ実行の取得、一覧表示、削除を実行できます。
サービスとジョブの呼び出し、ジョブ実行のキャンセルを実行できます。
IAM ポリシーの取得および設定を実行できます。
推奨事項の表示、適用、拒否を実行できます。
サービスをデプロイするには、追加構成が必要です。
Cloud Run デベロッパー(roles/run.developer サービスとジョブの作成、更新、削除、ジョブ実行の取得、一覧表示、削除を実行できます。
IAM ポリシーを取得できますが、設定することはできません
推奨事項を表示、適用、拒否できます。
Cloud Run 閲覧者(roles/run.viewer サービス、ジョブ、ジョブ実行を表示できます。
IAM ポリシーを取得できます。
推奨事項を表示できます。
Cloud Run 起動元(roles/run.invoker サービスとジョブの呼び出し、およびジョブ実行のキャンセルを行うことができます。

個々のサービスやジョブに対するアクセスを制御する

IAM を使用して、サービス単位またはジョブ単位でアクセスを制御できます。

プリンシパルを追加する

プリンシパルは、ジョブまたはサービスに追加できます。

プリンシパルをサービスに追加する

プリンシパルをサービスに追加するには:

コンソール UI

  1. Google Cloud コンソールに移動します。

    Google Cloud コンソールに移動

  2. プリンシパルを追加するサービスの横にあるチェックボックスをオンにします(サービス自体はクリックしないでください)。

  3. 右上の情報ペインで、[権限] タブをクリックします。情報ペインが表示されていない場合は、[情報パネルを表示] をクリックしてから [権限] をクリックします。

  4. [プリンシパルを追加] をクリックします。

  5. [新しいプリンシパル] フィールドに、サービスへのアクセスが必要な ID を 1 つ以上入力します。

  6. [ロール] プルダウン メニューからロールを選択します。選択したロールがペインに表示され、付与される権限の簡単な説明が表示されます。

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

gcloud

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

gcloud run services add-iam-policy-binding SERVICE_NAME \
  --member=PRINCIPAL \
  --role=ROLE

ここで、SERVICE_NAME はサービス名、PRINCIPAL はプリンシパル(user:email@domain.com など)、ROLE はロールです。

PRINCIPAL で使用できる値の一覧については、プリンシパル ID をご覧ください。 ROLE に使用可能な値については、Cloud Run IAM ロールをご覧ください。

ジョブにプリンシパルを追加する

プリンシパルをジョブに追加するには:

コンソール UI

  1. Google Cloud コンソールに移動します。

    Google Cloud コンソールに移動

  2. プリンシパルを追加するジョブの左側にあるチェックボックスをオンにします(ジョブ自体はクリックしないでください)。

  3. 右上の情報ペインで、[権限] タブをクリックします。情報ペインが表示されていない場合は、[情報パネルを表示] をクリックしてから [権限] をクリックします。

  4. [プリンシパルを追加] をクリックします。

  5. [新しいプリンシパル] フィールドに、ジョブへのアクセスが必要な ID を 1 つ以上入力します。

  6. [ロール] メニューからロールを選択します。選択したロールがパネルに表示され、付与される権限の簡単な説明が表示されます。

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

gcloud

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

gcloud run jobs add-iam-policy-binding JOB_NAME \
  --member=PRINCIPAL \
  --role=ROLE

ここで、JOB_NAME はジョブ名、PRINCIPAL はプリンシパル タイプ(user:email@domain.com など)、ROLE はロールです。

PRINCIPAL に使用可能な値については、IAM のコンセプト ページをご覧ください。ROLE に使用可能な値については、Cloud Run IAM ロールをご覧ください。

ロールからプリンシパルを削除する

サービスまたはジョブからプリンシパルを削除できます。

サービスのロールからプリンシパルを削除する

サービスのロールからプリンシパルを削除するには:

コンソール UI

  1. Google Cloud コンソールに移動します。

    Google Cloud コンソールに移動

  2. プリンシパルを削除するサービスの左側にあるチェックボックスをオンにします(サービス自体はクリックしないでください)。

  3. 右上の情報ペインで、[権限] タブをクリックします。情報ペインが表示されていない場合は、[情報パネルを表示] をクリックしてから [権限] をクリックします。

  4. 削除するプリンシパルをロールリストのフィルタに入力します。これにより、そのプリンシパルに付与されているすべてのロールが表示されます。

  5. 目的のロールのプリンシパルの横にある [削除](ゴミ箱)をクリックして、プリンシパルからロールを削除します。

  6. 確認ダイアログで、サービス内のすべてのロールからそのプリンシパルを削除できます。[削除] をクリックして、ロールからプリンシパルを削除します。

gcloud

gcloud run services remove-iam-policy-binding コマンドを使用します。

  gcloud run services remove-iam-policy-binding SERVICE_NAME \
    --member=PRINCIPAL \
    --role=ROLE

ここで、SERVICE_NAME はサービス名、PRINCIPAL はプリンシパル タイプ(user:email@domain.com など)、ROLE はロールです。

PRINCIPAL に使用可能な値については、IAM のコンセプト ページをご覧ください。ROLE に使用可能な値については、Cloud Run IAM ロールをご覧ください。

ジョブのロールからプリンシパルを削除する

ジョブのロールからプリンシパルを削除するには:

コンソール UI

  1. Google Cloud コンソールに移動します。

    Google Cloud コンソールに移動

  2. プリンシパルを追加するジョブの左側にあるチェックボックスをオンにします(ジョブ自体はクリックしないでください)。

  3. 右上の情報ペインで、[権限] タブをクリックします。情報ペインが表示されていない場合は、[情報パネルを表示] をクリックしてから [権限] をクリックします。

  4. 削除するプリンシパルをロールリストのフィルタに入力します。これにより、そのプリンシパルに付与されているすべてのロールが表示されます。

  5. 目的のロールのプリンシパルの横にある [削除](ゴミ箱)をクリックして、プリンシパルからロールを削除します。

  6. 確認ダイアログで、ジョブ内のすべてのロールからそのプリンシパルを削除できます。[削除] をクリックして、ロールからプリンシパルを削除します。

gcloud

gcloud run jobs remove-iam-policy-binding コマンドを使用します。

  gcloud run jobs remove-iam-policy-binding JOB_NAME \
    --member=PRINCIPAL \
    --role=ROLE

ここで、JOB_NAME はジョブ名、PRINCIPAL はプリンシパル タイプ(user:email@domain.com など)、ROLE はロールです。

PRINCIPAL に使用可能な値については、IAM のコンセプト ページをご覧ください。ROLE に使用可能な値については、Cloud Run IAM ロールをご覧ください。

プリンシパルの一括追加または削除

サービスとジョブの追加または削除は一括で行うことができます。

サービスのプリンシパルの一括追加と削除

サービスの追加または削除を一括で行うには:

コンソール UI

  1. Google Cloud コンソールに移動します。

    Google Cloud コンソールに移動

  2. プリンシパルの追加または削除を行うサービスの左側にあるチェックボックスをオンにします(サービス自体はクリックしないでください)。

  3. プリンシパルの追加または削除を行うサービスを選択します。

  4. 右上の情報ペインで、[権限] タブをクリックします。情報ペインが表示されていない場合は、[情報パネルを表示] をクリックしてから [権限] をクリックします。

プリンシパルを追加する場合:

  1. [プリンシパルを追加] をクリックします。

  2. [新しいプリンシパル] フィールドに、サービスへのアクセスが必要な ID を 1 つ以上入力します。

  3. [ロール] メニューからロールを選択します。選択したロールがペインに表示され、付与される権限の簡単な説明が表示されます。

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

プリンシパルを削除する場合:

  1. 削除するプリンシパルをロールリストのフィルタに入力します。これにより、そのプリンシパルに付与されているすべてのロールが表示されます。

  2. 目的のロールのプリンシパルの横にある [削除](ゴミ箱)をクリックして、プリンシパルからロールを削除します。

  3. 確認ダイアログで、サービス内のすべてのロールからそのプリンシパルを削除できます。[削除] をクリックして、ロールからプリンシパルを削除します。

gcloud

IAM ポリシーを作成する:

cat <<EOF > policy.json
{
  "bindings": [
    {
      "role": ROLE,
      "members": [
        PRINCIPAL
      ]
    }
  ]
}
EOF

gcloud run services set-iam-policy コマンドを使用します。

gcloud run services set-iam-policy SERVICE_NAME policy.json

PRINCIPAL に使用可能な値については、IAM のコンセプト ページをご覧ください。ROLE に使用可能な値については、Cloud Run IAM ロールをご覧ください。

ジョブのプリンシパルの追加と削除を一括で行う

ジョブの追加または削除を一括で行うには:

コンソール UI

  1. Google Cloud コンソールに移動します。

    Google Cloud コンソールに移動

  2. プリンシパルを追加するジョブの左側にあるチェックボックスをオンにします(ジョブ自体はクリックしないでください)。

  3. プリンシパルの追加または削除を行うジョブを選択します。

  4. 右上の情報ペインで、[権限] タブをクリックします。情報ペインが表示されていない場合は、[情報パネルを表示] をクリックしてから [権限] をクリックします。

プリンシパルを追加する場合:

  1. [プリンシパルを追加] をクリックします。

  2. [新しいプリンシパル] フィールドに、サービスへのアクセスが必要な ID を 1 つ以上入力します。

  3. [ロール] メニューからロールを選択します。選択したロールがペインに表示され、付与される権限の簡単な説明が表示されます。

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

プリンシパルを削除する場合:

  1. 削除するプリンシパルをロールリストのフィルタに入力します。これにより、そのプリンシパルに付与されているすべてのロールが表示されます。

  2. 目的のロールのプリンシパルの横にある [削除](ゴミ箱)をクリックして、プリンシパルからロールを削除します。

  3. 確認ダイアログで、ジョブ内のすべてのロールからそのプリンシパルを削除できます。[削除] をクリックして、ロールからプリンシパルを削除します。

gcloud

IAM ポリシーを作成する:

cat <<EOF > policy.json
{
  "bindings": [
    {
      "role": ROLE,
      "members": [
        PRINCIPAL
      ]
    }
  ]
}
EOF

gcloud run jobs set-iam-policy コマンドを使用します。

gcloud run jobs set-iam-policy JOB_NAME policy.json

PRINCIPAL に使用可能な値については、IAM のコンセプト ページをご覧ください。ROLE に使用可能な値については、Cloud Run IAM ロールをご覧ください。

プリンシパルを表示する

サービスとジョブのプリンシパルを表示できます。

サービスのプリンシパルを表示する

サービスのプリンシパルを表示するには:

コンソール UI

  1. Google Cloud コンソールに移動します。

    Google Cloud コンソールに移動

  2. プリンシパルとロールを表示するサービスの左側にあるチェックボックスをオンにします(サービス自体はクリックしないでください)。

  3. プリンシパルとロールを表示するサービスを選択します。

  4. 右上の情報ペインで、[権限] タブをクリックします。情報ペインが表示されていない場合は、[情報パネルを表示] をクリックしてから [権限] をクリックします。

  5. ロールとプリンシパルのリストが、付与されたロールごとに表示されます。

gcloud

gcloud run services get-iam-policy コマンドを使用します。

gcloud run services get-iam-policy SERVICE_NAME

ジョブのプリンシパルを表示する

ジョブのプリンシパルを表示するには:

コンソール UI

  1. Google Cloud コンソールに移動します。

    Google Cloud コンソールに移動

  2. プリンシパルを追加するジョブの左側にあるチェックボックスをオンにします(ジョブ自体はクリックしないでください)。

  3. プリンシパルとロールを表示するジョブを選択します。

  4. 右上の情報ペインで、[権限] タブをクリックします。情報ペインが表示されていない場合は、[情報パネルを表示] をクリックしてから [権限] をクリックします。

  5. ロールとプリンシパルのリストが、付与されたロールごとに表示されます。

gcloud

gcloud run jobs get-iam-policy コマンドを使用します。

gcloud run jobs get-iam-policy JOB_NAME

プロジェクト内のすべてのサービスとジョブに対するアクセスを制御する

プロジェクト内のすべてのサービスとジョブのプリンシパルにロールを付与する場合は、プロジェクト レベルの IAM を使用します。

コンソール UI

  1. Google Cloud コンソールに移動します。

    Google Cloud コンソールに移動

  2. プロジェクト全体でのロールを割り当てるプリンシパルを探します。

  3. プリンシパルの行の右側にある鉛筆アイコンをクリックします。

  4. [別のロールを追加] をクリックして、目的のロールを選択します。

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

gcloud

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

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member=PRINCIPAL \
  --role=ROLE

ここで、PRINCIPAL はプリンシパル(user:email@domain.com など)、ROLE はロール(roles/run.admin など)です。

allUsersallAuthenticatedUsers のプリンシパル タイプはプロジェクト レベルでは適用できません。各サービスに個別に追加する必要があります。

サービスを公開する

Cloud Run の公開サービスを作成する方法は 2 つあります。

  • Cloud Run 起動元の IAM チェックを無効にします(推奨)。
  • Cloud Run 起動元の IAM ロールを allUsers メンバータイプに割り当てます

必要なロール

サービスの起動元の IAM チェックを無効または再度有効にするには、次の権限が必要です。

  • run.services.create
  • run.services.update
  • run.services.setIamPolicy

これらの権限は、Cloud Run 管理者roles/run.admin)のロールに含まれています。ロールの一覧とそれに関連する権限については、Cloud Run IAM のロールをご覧ください。

Cloud Run 起動元の IAM チェックを無効にする

公開サービスを作成するおすすめの方法は、Cloud Run IAM 起動元のチェックを無効にすることです。Cloud Run はデフォルトでこのチェックを実施します。この解決策は、プロジェクトが組織のポリシーにおけるドメインで制限された共有制約の対象となっている場合に使用します。

チェックを無効にするには:

コンソール

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

    Cloud Run に移動

  2. 新しいサービスを構成する場合は、[サービスを作成] をクリックし、必要に応じて最初のサービス設定ページに記入します。

    既存のサービスを構成する場合は、サービスをクリックし、[セキュリティ] タブをクリックします。

  3. [公開アクセスを許可する] を選択します。

  4. [作成] または [保存] をクリックします。

gcloud

  • 新しいサービスの場合は、--no-invoker-iam-check フラグを指定して gcloud run deploy コマンドを使用します。

    gcloud run deploy SERVICE_NAME --no-invoker-iam-check

    SERVICE_NAME は、サービス名に置き換えます。

  • 既存のサービスの場合は、--no-invoker-iam-check フラグを指定して gcloud run services update コマンドを使用します。

    gcloud run services update SERVICE_NAME --no-invoker-iam-check

SERVICE_NAME は、サービス名に置き換えます。

YAML

  1. 構成を表示してダウンロードするには:

    gcloud run services describe SERVICE --format export > service.yaml
  2. run.googleapis.com/invoker-iam-disabled: アノテーションを更新します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
        annotations:
          run.googleapis.com/invoker-iam-disabled: true
        name: SERVICE_NAME

    SERVICE_NAME は、実際の Cloud Run サービスの名前に置き換えます。

  3. 次のコマンドを使用して、サービスを新しい構成に置き換えます。

    gcloud run services replace service.yaml

サービスの HTTPS エンドポイントに移動して、デプロイ後にチェックが無効になっていることを確認します。

Cloud Run 起動元の IAM チェックを再度有効にする

チェックを再度有効にするには:

コンソール

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

    Cloud Run に移動

  2. サービスをクリックし、[セキュリティ] をクリックします。

  3. [認証が必要] を選択し、[Identity and Access Management(IAM)] を選択します。

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

gcloud

  • --invoker-iam-check フラグを渡してサービスを更新します。

    gcloud run services update SERVICE_NAME --invoker-iam-check

    SERVICE_NAME は、サービス名に置き換えます。

YAML

  1. 構成を表示してダウンロードするには:

    gcloud run services describe SERVICE --format export > service.yaml
  2. run.googleapis.com/invoker-iam-disabled: アノテーションを更新します。

    apiVersion: serving.knative.dev/v1
     kind: Service
     metadata:
        annotations:
           run.googleapis.com/invoker-iam-disabled: false
        name: SERVICE_NAME

    SERVICE_NAME は、実際の Cloud Run サービスの名前に置き換えます。

サービスの HTTPS エンドポイントに移動して、デプロイ後にチェックが再度有効になっていることを確認します。

Cloud Run 起動元の IAM チェックに対して組織のポリシーを構成する

管理者である場合は、constraints/run.managed.requireInvokerIam マネージド制約を使用して、呼び出し元の IAM チェックを無効にする機能を制限できます。この制約はデフォルトで適用されません。

Cloud Run IAM 起動元のロールを allUsers メンバータイプに割り当てる

Cloud Run 起動元の IAM ロールを allUsers メンバータイプに割り当てると、認証を行わずにサービスを呼び出すことができます。

Cloud Run サービスで認証を構成するには、run.services.setIamPolicy 権限が必要です。この権限は、Cloud Run 管理者のロールに含まれています。ロールの一覧とそれに関連する権限については、Cloud Run IAM のロールをご覧ください。

コンソール

既存の Cloud Run サービスの場合:

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

    Google Cloud コンソールに移動

  2. 公開するサービスの左側にあるチェックボックスをオンにします。サービス自体はクリックしないでください。

  3. 右上の情報ペインで、[権限] タブをクリックします。情報ペインが表示されていない場合は、[情報パネルを表示] をクリックしてから [権限] をクリックします。

  4. [プリンシパルを追加] をクリックします。

[新しいプリンシパル] フィールドに値 allUsers を入力します。

  1. [ロールを選択] メニューから [Cloud Run 起動元] ロールを選択します。

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

  3. このリソースを公開することの確認を求めるメッセージが表示されます。[公開アクセスを許可する] をクリックして、サービスの IAM 設定に変更を適用します。

作成する新しいサービスの場合は、サービスを作成し、[認証] セクションで [公開アクセスを許可する] を選択します。これにより、サービスが一般公開されます。サービスを非公開にするには、[認証が必要] を選択します。

gcloud

サービスを一般公開するには、gcloud run services コマンドを使用して、特別な allUsers メンバータイプをサービスに追加し、roles/run.invoker ロールを付与します。

  gcloud run services add-iam-policy-binding [SERVICE_NAME] \
    --member="allUsers" \
    --role="roles/run.invoker"

サービスのデプロイ時に gcloud run deploy コマンドを実行すると、サービスは一般公開されます。

gcloud run deploy [SERVICE_NAME] ... --allow-unauthenticated

YAML

次の内容で policy.yaml という名前のファイルを作成します。

bindings:
- members:
  - allUsers
  role: roles/run.invoker

以下を使用して、既存の SERVICE に対する未認証の呼び出しを許可します。

gcloud run services set-iam-policy SERVICE policy.yaml

Terraform

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

Terraform 構成の google_cloud_run_v2_service リソースに次の内容を追加します。
resource "google_cloud_run_v2_service" "default" {
  name     = "public-service"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
  }
}

roles/run.invoker のサービス IAM バインディングを更新するには、Cloud Run サービスを参照する次のリソースを追加します。

resource "google_cloud_run_service_iam_binding" "default" {
  location = google_cloud_run_v2_service.default.location
  service  = google_cloud_run_v2_service.default.name
  role     = "roles/run.invoker"
  members = [
    "allUsers"
  ]
}

このバインディングは、特定のロールに対してのみ有効です。サービス IAM ポリシー内のその他の IAM バインディングは保持されます。

サービスで IAM Conditions を使用する

IAM Conditions を使用すると、Cloud Run リソースに条件付きの属性ベースのアクセス制御を定義して適用できます。Cloud Run は、Cloud Run サービスを呼び出すときに条件付きのアクセス権を付与する(request.host)および(request.path)条件の属性をサポートしています。

  • Cloud Run サービスの呼び出し時に request.host 属性と request.path 属性を使用して条件付きのアクセス権を付与するには、次のコマンドの実行時に condition フィールドを追加します。

    gcloud run services add-iam-policy-binding SERVICE_NAME \
     --member=PRINCIPAL \
     --role=ROLE \
     --region=REGION \
     --condition=[KEY=VALUE,...]
    

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

    • SERVICE_NAME は、サービス名(my-service など)に置き換えます。
    • PRINCIPAL は、プリンシパル(user:email@domain.com など)に置き換えます。
    • ROLE は、ロール(roles/run.invoker など)に置き換えます。
    • REGION は、リージョン(europe-west1 など)に置き換えます。
    • KEY=VALUE は、バインディングに含める条件に置き換えます。--condition フラグには、Key-Value ペア expressiontitle が含まれている必要があります。

次のステップ

保護したサービスに対するデベロッパー、サービス、ユーザーの認証を安全に行う方法を学習する。