ALBでHTTP500エラーコードが発生する原因と対処方法を教えてください

テクニカルサポートノート。 サービス名:ALB
2021.03.02

困っていた内容

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 での認証の設定に関する問題のトラブルシューティング方法を教えてください。