Google Cloud4 択難易度 応用

状況

社外に公開する API を Cloud Run にデプロイした。run.app の URL を開くと 403 と「Your client does not have permission to get URL / from this server.」が返る。アプリが標準出力に書くログは 1 行も出ていない。デプロイ時のオプションは何も変えていない。

最も疑わしい候補は?

  1. Aアプリのルーティング(パスの書き間違い)
  2. Bサービスの IAM で未認証の呼び出しを許可しているか
  3. Cコンテナが PORT 環境変数のポートで待ち受けているか
  4. DCloud DNS のレコード

正答

  1. A
  2. C
  3. B
  4. D

解説

アプリのログが 1 行も無いので、リクエストはコンテナに届く前に Cloud Run の手前で拒否されている。だからアプリのルーティング(A)は原因になりえない。run.app の URL は Google が管理するドメインで、DNS(D)を自分で設定する余地は無い。ポートの不一致(C)ならデプロイ自体が失敗し、403 ではなく起動エラーになる。残るのは IAM。Cloud Run のサービスは既定で認証が必要で、ID トークンなしでアクセスすると、この文言の 403 になる。社外公開が目的なら allUsers に Cloud Run 起動元(roles/run.invoker)を付ける。ただし社内向けのサービスで同じ症状が出たときに allUsers を付けると、誰でも呼べる API になってしまう。付ける前に「公開してよいサービスか」を確かめる。

参考: docs.cloud.google.com

cloud-runtroubleshootingiam403

この問題を含む Google Cloud のテストを制限時間つきで解く

Google Cloudクイズへ