スキップしてコンテンツを表示

Amazon Cognito ユーザープールで MFA エラーメッセージが表示される場合のトラブルシューティング方法を教えてください。

所要時間3分
0

Amazon Cognito ユーザープールで多要素認証 (MFA) を構成する際、エラーメッセージが表示されます。

解決策

SMS の MFA に関連するエラーのトラブルシューティング

"InvalidSmsRoleAccessPolicyException" エラー

このエラーは、AWS Identity and Access Management (IAM) に Amazon SNS を使用して SMS テキストメッセージを発行するための権限が欠落している場合に発生します。

この問題を解決するには、次の手順を実行して IAM ロールに sns:Publish 権限を追加します。

  1. Amazon Cognito コンソール を開きます。
  2. ナビゲーションペインで [ユーザープール] を選択します。
  3. 目的のユーザープールを選択します。
  4. ナビゲーションペインの [認証][認証方法] を選択します。
  5. [SMS] セクションに表示される IAM ロールの ARN 名を書き留めます。
  6. IAM コンソールを開きます。
  7. ナビゲーションペインで [ロール] を選択します。
  8. 検索バーに目的の IAM ロール名を入力し、その IAM ロールを選択します。
  9. [権限ポリシー] セクションでは、IAM ロールにアタッチされたポリシーを選択します。
  10. [ポリシーの詳細] ページで [編集] を選択し、sns:publish 権限を追加します。
  11. [次へ] を選択します。
  12. [変更を保存] を選択します。
  13. sns:Publishサービスコントロールポリシー (SCP) によりブロックされないことを確認します。

"InvalidSmsRoleTrustRelationshipException" エラー

このエラーは、IAM ロールには Amazon Cognito がロールの引き受けを許可するための信頼関係が設定されていない場合に発生します。cognito-idp.amazonaws.com が信頼されていないか、ロールの信頼ポリシーに含まれる外部 ID がユーザープールの SMS 構成内容と一致しないことが原因です。

この問題を解決するには、IAM ロールの信頼ポリシーを正しく構成します。手順については、「Amazon Cognito が AWS End User Messaging SMS で SMS メッセージを送信するための IAM ロールを用意する」を参照してください。

"InvalidParameterException" エラー

このエラーは、API リクエストが無効なパラメータを Amazon Cognito に送信した場合に発生します。この問題を解決するには、SetUserPoolMfaConfig API の SmsMfaConfiguration パラメータに必要な値をすべて指定します。

TOTP の MFA に関連するエラーのトラブルシューティング

要件:

注: フェデレーションユーザーの MFA は、外部 ID プロバイダー (IdP) に管理されます。Amazon Cognito は、ユーザーのフェデレーション時に MFA を要求しません。

"NotAuthorizedException: Access token does not have required scopes" エラー

このエラーは AssociateSoftwareToken API の呼び出しに必要なスコープ (aws.cognito.signin.user.admin) がアクセストークンに含まれていない場合に発生します。ユーザーが InitiateAuth API を使用してサインインすると、InitiateAuth API は、アクセストークンに自動でこのスコープを追加します。

ただし、ユーザーがマネージドログインページ経由でサインインする場合は、アクセストークンにスコープ aws.cognito.signin.user.admin が含まれていることを確認する必要があります。トークンにスコープ aws.cognito.signin.user.admin が含まれているかどうかを確認するには、アクセストークンのペイロードを Base64 でデコードします。詳細については、「JWT の構造を確認する」を参照してください。

トークンにスコープ aws.cognito.signin.user.admin が含まれていない場合は、次の手順を実行して追加します。

  1. Amazon Cognito コンソール を開きます。
  2. ナビゲーションペインで [ユーザープール] を選択します。
  3. 変更するユーザープールを選択します。
  4. ナビゲーションペインの [アプリケーション][アプリクライアント] を選択します。
  5. 変更するアプリクライアントを選択します。
  6. [ログインページ] タブを選択し、[編集] を選択します。
  7. [OpenID Connect のスコープ] ドロップダウンリストで aws.cognito.signin.user.admin を選択します。
  8. [変更を保存] を選択します。

"NotAuthorizedException: Invalid session for the user, session can only be used once" エラー

このエラーは、ユーザーがセッションの再利用を試行した場合に発生します。TOTP の MFA による認証フローの途中に、このエラーがユーザーに返された場合は、認証フローを最初からやり直す必要があります。認証を再度開始するには、InitiateAuth API または AdminInitiateAuth API を使用します。

"NotAuthorizedException: Invalid session for the user, session is expired" エラー

このエラーは、セッションの失効時に発生します。デフォルトでは、セッションは 3 分後に失効します。

この問題を解決するには、アプリクライアントの認証セッションフロー期間を延長します。この期間は、最大 15 分まで延長できます。

"CodeMismatchException: Invalid code or auth state for the user" エラー

このエラーは、ユーザーの TOTP コードが有効ではないか、ユーザーのステータスでは API コールがサポートされないか、TOTP コードが期限切れである場合に発生します。たとえば、MFA_SETUP チャレンジでユーザーが RespondToAuthChallenge API を呼び出したものの、TOTP の MFA が構成されていない場合が当てはまります。

この問題を解決するには、次の手順を実行します。

  1. ユーザーに TOTP MFA を構成します
  2. MFA_SETUP チャレンジで RespondToAuthChallenge API を呼び出します。
  3. ユーザーデバイスの時間設定が現在の時刻と一致しており、有効な TOTP コードが生成されることを確認します。

"InvalidParameterException: User does not have delivery config set to turn on SOFTWARE_TOKEN_MFA" エラー

このエラーは、ユーザーに TOTP MFA が構成されていない場合に発生します。この問題を解決するには、SetUserMFAPreference API または AdminSetUserMFAPreference API を呼び出す前に、TOTP MFA を構成します。

"SoftwareTokenMFANotFoundException: Software Token MFA has not been enabled by the userPool" エラー

このエラーは、ユーザープールで TOTP MFA が構成されていないことが原因で発生します。このエラーを解決するには、TOTP MFA を構成します。

"NotAuthorizedException: Invalid session for the use" エラー

このエラーは、次の原因で発生します。

  • API コールに不適切なセッション文字列が含まれている。
  • API コールが正しい順序で行われていない。

この問題を解決するには、API コールの順番を正しく構成します。たとえば、応答のセッション文字列を取得するには、まず InitiateAuth API を呼び出します。エラーを防ぐには、次回の API コールでは、取得したセッション文字列をリクエストパラメータに使用します。

"EnableSoftwareTokenMFAException: Code mismatch" エラー

このエラーは、ユーザーが送信した TOTP コードが、TOTP MFA の構成時に Amazon Cognito が想定する値と一致しない場合に発生します。

この問題を解決するには、次の手順を実行します。

  • AssociateSoftwareToken API からシークレットコードを取得します。
  • シークレットコードを認証アプリケーションに保存します。
  • 最新の TOTP コードを送信します。
  • AssociateSoftwareToken API から取得したシークレットコードを使用して QR コードを作成します。次に、以下のコード例を使用して認証アプリケーションを構成します。

シークレットコードから QR コードを生成する Python コードの例:

import pyotp
from qrcode.main import QRCode

secret_key = "secret-key-retrieved-from-associate-software-token-api"

totp = pyotp.TOTP(secret_key)
provisioning_uri = totp.provisioning_uri()

qr = QRCode()
qr.add_data(provisioning_uri)
qr.make()
qr.print_ascii()

メールの MFA エラーのトラブルシューティング

メールを MFA の要素として設定する前に、ユーザープールで Amazon Simple Email Service (Amazon SES) を構成し、ユーザーにメールメッセージを送信できるようにする必要があります。

MFA を有効化し、メールを 2 番目の要素として選択すると、Amazon Cognito は未検証のメールアドレスにメールメッセージを送信します。ユーザーがメールメッセージの MFA 確認を完了すると、Amazon Cognito は email_verified 属性を true に設定します。

"InvalidParameterException: Cannot set EmailMfaConfiguration when user pool EmailConfiguration contains an EmailSendingAccount of COGNITO_DEFAULT" エラー

このエラーは、デフォルトのメール構成を使用した場合に発生します。この問題を解決するには、ユーザープールで Amazon SES メールの設定を行います。

"InvalidParameterException: Cannot set EmailMfaConfiguration when user pool AccountRecoverySetting is not set or contains only verified_email in RecoveryMechanisms" エラー

このエラーは、ユーザーのアカウント復旧方法にメールのみを指定した場合に発生します。MFA およびアカウント復旧の両方に、同一要素を指定することはできません。この問題を解決するには、メール以外のアカウント復旧方法を選択します。手順については、「パスワードのリセットと復旧の構成」を参照してください。

"FeatureUnavailableInTierException" エラー

このエラーは、ユーザープールの機能プランが Lite である場合に発生します。メール MFA 機能は、Essentials プランと Plus プランのみに含まれます。この問題を解決するには、ユーザープールのプランを Essentials または Plus に変更します。

関連情報

ユーザープールに MFA を追加する

SMS とメールメッセージによる MFA

AWS公式更新しました 4ヶ月前