状況
Cloud Run のサービスが同じプロジェクトのバケットを読むと 403。本文は「123456-compute@developer.gserviceaccount.com does not have storage.objects.get access to …」。専用のサービスアカウント app-sa を作り、バケットに閲覧ロールを付けたつもりでいる。
調べる順番として最も適切なものは?
- A実行アカウントにプロジェクトの編集者(Editor)を付ける
- Bその主体に効く IAM の拒否ポリシーがないか
- Cエラー本文の主体が、想定のサービスアカウントか
- Dその主体にバケットの閲覧ロールが付いているか
正答
- A → C → D → B
- C → D → B → A
- D → B → A → C
- B → D → C → A
解説
Permission denied の切り分けは「誰が」「どの権限を」「どのリソースに」の順に見る。本文の主体は 123456-compute@developer…、つまり Compute Engine の既定のサービスアカウントで、作ったはずの app-sa ではない。デプロイ時にサービスアカウントを指定し忘れると既定のものが使われるので、まずここを確かめる(C)。主体が正しければ、その主体にバケットの閲覧ロールが付いているか(D)。許可があるのに拒否されるなら、拒否ポリシー(B)を疑う。プロジェクトの編集者(A)を付ければ動くが、既定のサービスアカウントにほぼ全権限を渡すことになり、それを使う他のサービスまで強い権限を持つ。原因が分かれば不要な変更なので最後。
この問題を含む Google Cloud のテストを制限時間つきで解く
Google Cloudクイズへ