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 です。ここに、不足している権限の名前がそのまま入ります。上の例なら、ファイル置き場の一覧を取得する権限です。 ...