GCP の 403 エラー:原因と解決策

冒頭まとめ GCP の 403 Forbidden は、身元は届いているが、その操作が許されていない状態を示します。認証が通っていない 401 とは段階が違います(GCP の 401 の記事)。 このエラーの扱いやすさは、応答に含まれる情報の多さにあります。公式文書によれば、コマンド行の道具や窓口が返す文言には、必要な権限の名前、操作しようとした対象、認証に使われた身元、エラーごとの識別子、そして原因を調べるための専用の URL が含まれます。つまり、どの権限が足りないかは推測する必要がありません。応答に書かれています。 原因についても、公式文書が4つに整理しています。必要な権限を持っていない場合、拒否の方針が権限の使用を妨げている場合、主体に対する境界の方針が対象を含んでいない場合、そして対象が存在しない場合です。 4つ目が重要です。対象が存在しない場合も、このエラーになります。実際、文言も「対象に対して権限が拒否されました(あるいは対象が存在しない可能性があります)」という形になっており、両方の可能性を含んだ書き方です。したがって、403 を受け取ったからといって、権限の問題とは限りません。名前の綴りを間違えているだけ、ということがあります。 区分の定義にも、このエラーが要求の妥当性や対象の存在を意味しない、と明記されています。 エラーの概要 窓口からの応答は、次の形になります。 { "error": { "code": 403, "message": "Permission 'storage.buckets.list' denied on resource (or it may not exist). Remediate access with this Troubleshooter URL or share it with your administrator - https://console.cloud.google.com/iam-admin/troubleshooter;errorId=<識別子> .", "details": [ { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "reason": "forbidden", "domain": "global", "metadata": { "error_info_id": "<識別子>", "permission": "storage.buckets.list" } } ] } } 読むべきは metadata の中の permission です。ここに、不足している権限の名前がそのまま入ります。上の例なら、ファイル置き場の一覧を取得する権限です。 ...

2026年5月27日 · ErrorLog

GCP の 503 エラー:原因と解決策

冒頭まとめ GCP の 503 Service Unavailable は、まず「どの URL が返したか」で2系統に分けると迷いません。第一に、Google Cloud の各 API(googleapis.com への呼び出し)が返す503です。これは Google 公式のエラーコード定義(google/rpc/code.proto)で UNAVAILABLE に割り当てられたもので、定義の原文に「多くの場合は一時的な状態であり、バックオフつきの再試行で回復しうる。ただし非冪等な操作の再試行が常に安全とは限らない」と、性質と対処と注意点まで書かれています。第二に、自分がデプロイしたサービス(Cloud Run など)の URL が返す503です。こちらは Google 側の障害ではなく、コンテナの待ち受け設定やメモリなど、自分のワークロード側の調査になります。 境界も公式定義で引けます。クォータや利用枠の超過は RESOURCE_EXHAUSTED で429、処理の時間切れは DEADLINE_EXCEEDED で504、Google 内部の深刻なエラーは INTERNAL で500に割り当てられており、これらが503として返ることはありません。「クォータ超過で503」という説明は Google のエラーモデルに合いません。 エラーの概要 Google Cloud の API のエラーは、公式のエラーモデルに沿った JSON で返ります。503の場合、切り分けの決め手になるのは status フィールドです。 { "error": { "code": 503, "message": "The service is currently unavailable.", "status": "UNAVAILABLE" } } status が UNAVAILABLE なら、この記事の原因1(API 側の一時的な利用不能)です。message の文言はサービスにより異なりますが、status の値はエラーモデルで定義された名前がそのまま入ります。一方、Cloud Run にデプロイした自分のサービスの URL への503は、Google の公式トラブルシューティング文書で「HTTP 応答が不正だったか、インスタンスへの接続でエラーが起きた」場合と説明されており、応答本文は自分のアプリや基盤の状態次第です(原因2)。 まず最初に:どの URL の503かで2つに分岐する 失敗したリクエストの宛先を確認します。googleapis.com 系の API 呼び出し(Cloud Storage、BigQuery、各サービスの管理 API など)で、応答の status が UNAVAILABLE なら原因1です。自分のサービスの URL(run.app のドメインや独自ドメイン)への503なら原因2です。あわせて、応答に error.status がある場合は値を必ず読みます。RESOURCE_EXHAUSTED(429)や DEADLINE_EXCEEDED(504)が本来のコードとともに返っているなら、調査は503ではなくそれぞれの系統に切り替えます。 ...

2026年1月1日 · ErrorLog