IAM を使用したアクセス制御

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

これらの操作を他のプリンシパルまたはグループに許可するには、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 を使用して、サービス単位またはジョブ単位でアクセスを制御できます。

サービスを公開する

このオプションは、公開 API またはウェブサイトの Cloud Run サービス向けです。

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

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

コンソール UI

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

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

    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

Cloud Run サービスを作成するには、既存の main.tf ファイルに次の行を追加します。

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 バインディングは保持されます。

ドメインで制限された共有

プロジェクトが組織のポリシーにおけるドメインで制限された共有制約の適用対象となっている場合は、公開サービスを作成できません。タグと条件付きポリシーを使用して、特定のサービスをこの制約から除外できます。詳細については、ドメインで制限された共有が適用される場合の公開 Cloud Run サービスの作成に関するブログ記事をご覧ください。

プリンシパルを追加する

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

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

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

コンソール 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=MEMBER_TYPE \
  --role=ROLE

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

MEMBER_TYPE に使用可能な値については、IAM のコンセプト ページをご覧ください。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=MEMBER_TYPE \
  --role=ROLE

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

MEMBER_TYPE に使用可能な値については、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=MEMBER_TYPE \
    --role=ROLE

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

MEMBER_TYPE に使用可能な値については、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=MEMBER_TYPE \
    --role=ROLE

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

MEMBER_TYPE に使用可能な値については、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": [
        MEMBER_TYPE
      ]
    }
  ]
}
EOF

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

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

MEMBER_TYPE に使用可能な値については、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": [
        MEMBER_TYPE
      ]
    }
  ]
}
EOF

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

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

MEMBER_TYPE に使用可能な値については、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=MEMBER_TYPE \
  --role=ROLE

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

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

サービスの Cloud Run Invoker を無効にする

Cloud Run サービスの Cloud Run 起動元の IAM チェックを無効にしたり、再度有効にしたりできます。このチェックはデフォルトで適用されます。

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

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

これらの権限は、オーナーロールと Cloud Run 管理者ロールの両方に含まれています。ロールの一覧とそれに関連する権限については、Cloud Run IAM のロールをご覧ください。

Cloud Run 呼び出し元の IAM チェックを無効にする

  1. 必要に応じて、組織レベルまたはプロジェクト レベルで組織のポリシー制約 constraints/run.requireInvokerIam をオーバーライドします。タグを使用すると、特定の Cloud Run サービスに対してより詳細なルールを設定できます。

    Google Cloud コンソールからポリシー制約を削除するには:

    1. IAM に移動

    2. [組織のポリシー] タブをクリックします。

    3. [Allow Invoker IAM Disabled (Cloud Run)] ポリシーを見つけて、[アクション] メニューから [ポリシーを編集] を選択します。

    4. ポリシーが [適用しない] に設定されていることを確認します。

    5. [ポリシーを設定] をクリックします。

  2. チェックを無効にします。

    Console

    1. Cloud Run に移動します

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

    3. [Cloud IAM を使用して受信リクエストを認証する] チェックボックスをオフにします。

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

    gcloud

    • --no-invoker-iam-check フラグを使用します。

      gcloud run deploy 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 チェックを再度有効にする

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

Console

  1. Cloud Run に移動します

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

  3. [Cloud IAM を使用して受信リクエストを認証する] を選択します。

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

gcloud

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

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

    ここで、SERVICE_NAME はサービス名です。

YAML

  1. 次のコマンドで、構成を表示してダウンロードします。

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

    apiVersion: serving.knative.dev/v1
     kind: Service
     metadata:
        annotations:
           run.googleapis.com/invokerIamCheckDisabled: false
        name: SERVICE_NAME

    ここで、SERVICE_NAME は Cloud Run サービスの名前です。

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

次のステップ

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