ALBでHTTP500エラーコードが発生する原因と対処方法を教えてください
困っていた内容
ALBのCloudWatchメトリクスを確認したところ、HTTPCode_ELB_500_Countの合計数が増えていました。
バックエンドではなく、ALBがHTTP500エラーコードを返しているようです。
ALBでHTTP500エラーコードが発生する原因と対処方法を教えてください。
どう対応すればいいの?
ALBでHTTP500エラーコードが発生する原因は2つ考えられます。
- AWS WAFのウェブACLルール実行エラー
- ALBのユーザー認証エラー
HTTP 500: Internal server error - Application Load Balancer のトラブルシューティング
考えられる原因:
- AWS WAF のウェブアクセスコントロールリスト (ウェブ ACL) を設定し、ウェブ ACL ルールの実行でエラーが発生しました。
- ロードバランサーは、IdP トークンのエンドポイントまたは IdP ユーザー情報エンドポイントと通信できません。ロードバランサーのセキュリティグループおよび VPC のネットワーク ACL がこれらのエンドポイントに対するアウトバウンドアクセスを許可していることを検証します。VPC がインターネット接続されていることを確認します。内部向けロードバランサーがある場合は、NAT ゲートウェイを使用してインターネットアクセスを有効にします。
エラー詳細の確認
ALBアクセスログのerror_reasonフィールドに出力された理由コードを確認することで、より詳細なエラー内容を確認することができます。
エラー内容から原因を特定して適宜対処してください。
AWS WAFのウェブACLルール実行エラーが疑われる場合のアクセスログの確認
エラー理由コード - Application Load Balancer のアクセスログ
ロードバランサーがリクエストを AWS WAF に転送するときにエラーが発生すると、ロードバランサーはアクセスログの error_reason フィールドに次のいずれかのエラーコードを保存します。
コード 説明 WAFConnectionError ロードバランサーが AWS WAF に接続できません。 WAFConnectionTimeout AWS WAF への接続がタイムアウトしました。 WAFResponseReadTimeout AWS WAF へのリクエストがタイムアウトしました。 WAFServiceError AWS WAF が 5XX エラーを返しました。 WAFUnhandledException ロードバランサーで処理されない例外が発生しました。
ALBのユーザー認証エラーが疑われる場合のアクセスログの確認
エラー理由コード - Application Load Balancer のアクセスログ
ロードバランサーが認証アクションを完了できない場合、ロードバランサーはアクセスログの error_reason フィールドに次のいずれかの理由コードを保存します。また、ロードバランサーは対応する CloudWatch メトリクスを増分します。詳細については、「Application Load Balancer を使用してユーザーを認証する」を参照してください。
コード 説明 メトリクス AuthInvalidCookie 認証 Cookie が無効です。 ELBAuthFailure AuthInvalidGrantError トークンエンドポイントからの認証付与コードが無効です。 ELBAuthFailure AuthInvalidIdToken ID トークンが無効です。 ELBAuthFailure AuthInvalidStateParam 状態パラメータが無効です。 ELBAuthFailure AuthInvalidTokenResponse トークンエンドポイントからのレスポンスが無効です。 ELBAuthFailure AuthInvalidUserinfoResponse ユーザー情報エンドポイントからのレスポンスが無効です。 ELBAuthFailure AuthMissingCodeParam 認証エンドポイントからの認証レスポンスに、「code」という名前のクエリパラメータがありません。 ELBAuthFailure AuthMissingHostHeader 認証エンドポイントからの認証レスポンスに、ホストヘッダーフィールドがありません。 ELBAuthError AuthMissingStateParam 認証エンドポイントからの認証レスポンスに、「state」という名前のクエリパラメータがありません。 ELBAuthFailure AuthTokenEpRequestFailed トークンエンドポイントからエラーレスポンス (2XX 以外) があります。 ELBAuthError AuthTokenEpRequestTimeout ロードバランサーは、トークンエンドポイントと通信できません。 ELBAuthError AuthUnhandledException ロードバランサーで処理されない例外が発生しました。 ELBAuthError AuthUserinfoEpRequestFailed IdP ユーザー情報エンドポイントからエラーレスポンス (2XX 以外) があります。 ELBAuthError AuthUserinfoEpRequestTimeout ロードバランサーは、IdP ユーザー情報エンドポイントと通信できません。 ELBAuthError AuthUserinfoResponseSizeExceeded IdP から返されたクレームのサイズが 11K バイトを超えました。 ELBAuthUserClaimsSizeExceeded
上記が当てはまらない場合
ALBアクセスログからHTTP500エラーコードが発生した原因を特定できなかった場合、AWS基盤側で障害が発生していなかったか確認しましょう。
参考情報
HTTP 500: Internal server error - Application Load Balancer のトラブルシューティング
エラー理由コード - Application Load Balancer のアクセスログ
Application Load Balancer での認証の設定に関する問題のトラブルシューティング方法を教えてください。