😸

AWSコンソール画面ログイン時に「Unauthorized」エラーが表示される原因と対処法~PKCEフローの仕組みと実践的な回避策~

に公開

はじめに

AWSコンソール画面にログインした際、ログインは成功するけれども、下記のようなエラーメッセージが表示されることがあります。

Unauthorized
An error occurred when we tried to process your request. Try again in a few minutes or sign in below.

Sign in を押せばコンソール画面が表示されます

本記事では、解決策を先に述べ、興味がある方向けに本現象の根本原因であるPKCE (Proof Key for Code Exchange) フローのセキュリティ検証失敗について解説します。

解決策

いきなりですが解決策です。

即座の解決策

ブラウザを完全にリフレッシュし、AWSコンソールのトップページ(https://console.aws.amazon.com)から再度アクセスしてください。
https://console.aws.amazon.com

根本的な対策

ブラウザで登録しているお気に入りのリンクを(https://console.aws.amazon.com)に変更してください。チャレンジコード付きURLではなく、公式のログインURLです。複数アカウントIDで運用している場合はこちらが正解です。

一つのアカウントIDで運用している場合は、お気に入りのリンクをアカウントID付きURL(例:https://999999999999.signin.aws.amazon.com/console に変更してください。

その他、

  • ログインページを開いたら速やかに認証を完了する。
  • 複数タブで同時にログイン操作をしない。
  • ブラウザの戻る/進むボタンを使わず、新しいタブでアクセスする。

原因

AWSコンソールのログイン画面(https://console.aws.amazon.com)にアクセスすると、一時的な「チャレンジコード」が付与されたURL(例:https://us-east-1.console.aws.amazon.com/console/home?region=us-east-1&isauthcode=xxxx...) にリダイレクトされます。

このチャレンジコード付きURLをお気に入り登録し、後日そのURLからアクセスすると、チャレンジコードの有効期限が切れている、またはリプレイ無効となっているため、AWS側で認証エラーとなり「Unauthorized」エラーが表示されます。

原因詳細

1. PKCEフローの仕組み

AWSコンソールの認証は、OAuth 2.0のPKCE拡張を利用しています。
code_challengeは、クライアント側で生成したcode_verifierをSHA-256でハッシュ化した値です。
認証フロー中、サーバー側はcode_challengeと、後で送信されるcode_verifierが一致するかを検証します。
この仕組みにより、認証コードのリプレイ攻撃やセッションハイジャックを防止しています。

2. エラーが発生する具体的なケース

a) タイムアウト

チャレンジコードには有効期限(通常10~15分程度)が設定されています。
ブラウザでタブを開いたまま放置し、後から操作すると期限切れでエラーになります。

b) セッション不整合

複数タブで異なるチャレンジコードが生成された場合や、ブラウザの戻る/進むボタンで古いURLに戻った場合。
ページリロード時に新しいチャレンジが生成されても、古いセッション情報が残っていると不整合が発生します。

c) ブラウザ状態の問題

Cookieやセッションストレージの不整合、キャッシュの問題、プライベートモードと通常モードの混在などでも発生します。

3. なぜ毎回異なるコードが生成されるのか

セキュリティ強化のため、各認証試行ごとに一意のチャレンジコードが生成されます。
これによりリプレイ攻撃やセッションハイジャックを防止しています。

補足

このPKCEフローによるセキュリティ検証は、AWSに限らず、現代のOAuth 2.0実装で広く採用されている標準的な対策です。
ユーザー体験としては煩雑に感じることもありますが、セキュリティを担保するための重要な仕組みです。

Discussion