公開(未認証)アクセスを許可する

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