

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon Cognito のトラブルシューティング
<a name="troubleshooting"></a>

この章では、Amazon Cognito の使用中に発生する可能性がある一般的な問題の解決策を示します。Amazon Cognito の実装は、認証フロー、ユーザープール設定、ID フェデレーション設定のすべてにわたって、さまざまな課題に直面する可能性があります。新しいアプリケーションを開発する場合でも、既存のアプリケーションを維持する場合でも、このトラブルシューティングガイドは一般的な問題をすばやく特定して解決するのに役立ちます。

## カスタムドメインの設定エラー
<a name="troubleshoot_custom_domain_errors"></a>

Amazon Cognito でカスタムドメイン名を設定する場合、エラーメッセージが表示されることがあります。一般的なエラーには、検証の問題、証明書の問題、ドメインの競合などがあります。

### `Custom domain is not a valid subdomain`
<a name="troubleshoot_custom_domain_subdomain"></a>

このエラーは、親ドメインの DNS 解決の問題を示しています。Amazon Cognito は最上位ドメインをサポートしていないため、親ドメインには検証のための DNS A レコードが必要です。

**問題**  
このエラーは、親ドメインの DNS 解決の問題を示しています。Amazon Cognito は最上位ドメインをサポートしていないため、親ドメインには検証のための DNS A レコードが必要です。

**ソリューション**  
+ **親ドメインの A レコードを作成する:** カスタムドメインの親ドメインで DNS 設定に A レコードを作成する必要があります。
  + **例:** カスタムドメインが `auth.xyz.yourdomain.com` である場合、親ドメインは `xyz.yourdomain.com` です。`xyz.yourdomain.com` をカスタムドメインとして設定する場合、親ドメインは `yourdomain.com` です。
  + 親ドメインは、有効な IP アドレスに解決する必要があります。実際の IP アドレスを指さない場合は、ダミーの IP アドレス (`8.8.8.8` など) を使用できます。
+ **DNS 伝達の検証 (オプション、ただし推奨):** DNS プロバイダーが変更を伝達したことを確認するには、`dig` コマンドを実行できます。
  + `auth.xyz.yourdomain.com` をカスタムドメインとして使用する場合: `dig A xyz.yourdomain.com +short`
  + `xyz.yourdomain.com` をカスタムドメインとして使用する場合: `dig A yourdomain.com +short`
  + コマンドは、設定した IP アドレスを返す必要があります。そうでない場合は、変更が完全に反映されるまで待ちます。
+ **親ドメインの A レコードを削除する:** Amazon Cognito でカスタムドメインを正常に作成したら、親ドメイン用に作成した A レコード (ダミーである場合)を削除できます。

詳細については、「[ホストされた UI で独自のドメインを使用する](cognito-user-pools-add-custom-domain.md)」を参照してください。

### `Domain already associated with another user pool`
<a name="troubleshoot_domain_already_associated"></a>

カスタムドメイン名は、すべての AWS アカウント およびリージョンで一意である必要があります。

**問題**  
カスタムドメイン名は、すべての AWS アカウント およびリージョンで一意である必要があります。

**ソリューション**  
+ 新しいユーザープールにドメイン名を使用するには、現在関連付けられているユーザープールからカスタムドメインを削除する必要があります。
+ **削除後に待機する:** カスタムドメインが最初のユーザープールから完全に削除されるまで時間がかかります。削除直後に同じ名前で新しいカスタムドメインを作成すると、このエラーが発生する可能性があります。数分待ってから、もう一度試してください。

### `One or more of the CNAMEs that you provided are already associated with a different resource`
<a name="troubleshoot_cname_already_associated"></a>

カスタムドメインを作成すると、Amazon Cognito は AWSマネージド Amazon CloudFront ディストリビューションを作成します。ドメイン名は、1 つの Amazon CloudFront ディストリビューションでのみ使用できます。このエラーは、ドメイン名が別の Amazon CloudFront ディストリビューションの代替ドメインとして既に使用されている場合に発生します。

**問題**  
カスタムドメインを作成すると、Amazon Cognito は AWSマネージド Amazon CloudFront ディストリビューションを作成します。ドメイン名は、1 つの Amazon CloudFront ディストリビューションでのみ使用できます。このエラーは、ドメイン名が別の Amazon CloudFront ディストリビューションの代替ドメインとして既に使用されている場合に発生します。

**ソリューション**  
+ **オプション 1:** Amazon Cognito カスタムドメインに別のドメイン名を使用します。
+ **オプション 2:** Amazon Cognito でドメイン名を使用している場合は、別の Amazon CloudFront ディストリビューションで同じ名前を使用しません。

### `The specified SSL certificate doesn't exist`
<a name="troubleshoot_ssl_certificate_not_exist"></a>

Amazon Cognito は Amazon CloudFront を使用します。Amazon CloudFront では、ユーザープールのリージョンに関係なく AWS リージョン、 AWS Certificate Manager (ACM) 証明書が `us-east-1` (バージニア北部) に存在する必要があります。

**問題**  
Amazon Cognito は Amazon CloudFront を使用します。Amazon CloudFront では、ユーザープールのリージョンに関係なく AWS リージョン、 AWS Certificate Manager (ACM) 証明書が `us-east-1` (バージニア北部) に存在する必要があります。

**ソリューション**  
+ **証明書リージョンを確認する:** ACM 証明書が `us-east-1` リージョンにあることを確認します。
+ **証明書の有効性を確認する:** 選択した証明書の有効期限が切れていないことを確認します。
+ **インポートした証明書:** 証明書を ACM にインポートした場合は、以下を確認します。
  + パブリック認証局によって発行されたものである。
  + 正しい証明書チェーンが含まれている。
+ **AWS KMS ポリシーチェック:** ドメインを作成する IAM ユーザーまたはロールの AWS Key Management Service (AWS KMS) ポリシーの明示的な`deny`ステートメントにより、このエラーが発生する可能性があります。特に、`kms:DescribeKey`、`kms:CreateGrant`、または `kms:*` アクションの明示的な拒否を確認します。

## `Invalid refresh token` エラー
<a name="troubleshoot_invalid_refresh_token"></a>

**問題**  
更新トークンを使用して、`AdminInitiateAuth` または `InitiateAuth` API オペレーションで Amazon Cognito ユーザープールから新しいアクセストークンや ID トークンを取得しようとすると、`Invalid refresh token` エラーが発生します。

**ソリューション**  
ユーザープールの設定と API の使用状況に応じて、次のトラブルシューティング手順を実装します。  
+ **一貫したアプリケーションクライアント ID を確認する:** トークン更新のために `AdminInitiateAuth`または `InitiateAuth` API を呼び出すときは、最初の認証時に更新トークンの生成に使用したのとまったく同じアプリケーションクライアント ID を使用する必要があります。
+ **デバイスを確認する:** ユーザープールで[デバイス追跡](amazon-cognito-user-pools-device-tracking.md)を有効にしていても、ユーザーのデバイスが未確認である場合は、まず [ConfirmDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmDevice.html) API を呼び出す必要があります。ユーザーがデバイスを確認したら、更新トークンを交換できます。
+ **更新リクエストにデバイスキーを含める:** デバイス追跡が有効になっている場合は、`REFRESH_TOKEN_AUTH` フローの使用時に一意のデバイスキーを `AuthParameter` として含めます。

  ```
  {
    "AuthFlow": "REFRESH_TOKEN_AUTH",
    "AuthParameters": {
      "REFRESH_TOKEN": "example_refresh_token",
      "SECRET_HASH": "example_secret_hash", // Required if your app client uses a client secret
      "DEVICE_KEY": "example_device_key" 
    }
  }
  ```
+ **デバイス追跡に `USER_SRP_AUTH` を使用する:** デバイス追跡を使用している場合、初期認証フローは `USER_SRP_AUTH` である必要があります。

詳細については、「[ユーザープール内のユーザーデバイスの使用](amazon-cognito-user-pools-device-tracking.md)」を参照してください。

## フェデレーションでの無効な SAML レスポンスエラー
<a name="troubleshoot_invalid_saml_response"></a>

ユーザーが SAML 2.0 を使用して Amazon Cognito にフェデレーションしようとすると、さまざまな `Invalid SAML response` エラーや同様のエラーが発生します。これらのエラーは、属性マッピングの問題、証明書の問題、または設定の不一致が原因で発生する可能性があります。

### `Invalid user attributes: Required attribute`
<a name="troubleshoot_saml_required_attribute"></a>

**問題**  
ユーザープールで必須属性の値が欠落しているか、IdP がイミュータブルな属性を削除または更新しようとしています。

**ソリューション**  
+ ユーザープール設定に定義されている[必須属性](user-pool-settings-attributes.md#how-to-edit-standard-attributes)を確認します。
+ ブラウザでネットワークキャプチャツールを使用して、SAML レスポンスを取得します。URL と base64 のデコードが必要になる場合があります。属性が SAML アサーションに存在することを確認します。
+ ID プロバイダーにサインインし、プロバイダーから Amazon Cognito に送信している属性を確認します。IdP が正しい名前を使用して必須属性を送信するように設定されていることを確認します。
+ 変更不可能な属性の場合は、次の AWS CLI コマンドを実行して識別します: `aws cognito-idp describe-user-pool --user-pool-id USER-POOL-ID --query 'UserPool.SchemaAttributes[?Mutable==`false`].Name'`。
+ IdP の SAML 属性マッピングで、イミュータブルな Amazon Cognito 属性をターゲットとしているマッピングをすべて削除します。または、送信先属性を別の変更可能な属性に更新します。

### `Invalid SAML response received: SAML Response signature is invalid`
<a name="troubleshoot_saml_signature_invalid"></a>

**問題**  
IdP が SAML 署名証明書を更新したため、SAML レスポンスの証明書と Amazon Cognito に保存されているメタデータファイルが一致しません。

**ソリューション**  

1. IdP から最新のメタデータファイルをダウンロードします。

1. Amazon Cognito コンソールで、ユーザープールの **[ソーシャルプロバイダーと外部プロバイダー]** に移動して SAML プロバイダーを編集し、既存のメタデータファイルを新しくダウンロードしたファイルに置き換えます。

### `Audience restriction`、または `Application with identifier not found`
<a name="troubleshoot_saml_audience_restriction"></a>

**問題**  
IdP で正しくないエンティティ ID が設定されているか、アサーションが別のユーザープールの Uniform Resource Name (URN) を使用しています。

**ソリューション**  

1. コンソールの **[概要]** セクションから Amazon Cognito ユーザープール ID を取得します。

1. IdP のマネジメントコンソールで、ユーザープールの SAML アプリケーションのエンティティ ID を更新します。形式が `urn:amazon:cognito:sp:USER_POOL_ID` と一致するようにエンティティ ID を設定します。`USER_POOL_ID` を、前のステップのユーザープール ID に置き換えます。

### `An error was encountered with the requested page`
<a name="troubleshoot_saml_acs_url"></a>

**問題**  
IdP に登録されているアサーションコンシューマーサービス (ACS) の URL が正しく設定されていないか、IdP が必要な POST バインディングを使用して SAML レスポンスを送信していません。

**ソリューション**  
+ IdP のマネジメントコンソールで、アプリケーションを更新して正しい ACS URL 形式を反映し、アプリケーションが `HTTP POST` バインディングを使用していることを確認します。
+ **デフォルトドメイン形式:** `https://cognito-idp.Region.amazonaws.com/your user pool ID/saml2/idpresponse`
+ **カスタムドメイン形式:** `https://auth.example.com/saml2/idpresponse`

### `Invalid relayState from identity provider`
<a name="troubleshoot_saml_relay_state"></a>

**問題**  
`RelayState` パラメータが欠落しているか、無効であるか、IdP と Amazon Cognito の間で URL が一致していません。

**ソリューション**  
+ **[サービスプロバイダーによって開始された (SP によって開始された)](cognito-user-pools-SAML-session-initiation.md#cognito-user-pools-saml-idp-authentication) フローの場合:** 常にユーザープールの `/oauth2/authorize` エンドポイントで認証を開始します。ユーザーが初めて Amazon Cognito にアクセスしたときに `RelayState` パラメータを返さない SAML アサーションは、SP によって開始された有効なリクエストではありません。
+ **[ID プロバイダーによって開始された (IdP によって開始された)](cognito-user-pools-SAML-session-initiation.md#cognito-user-pools-SAML-session-initiation-idp-initiation) フローの場合:** IdP は、必要な形式 (`redirect_uri=REDIRECT_URI&state=STATE`) を使用して、`/saml2/idpresponse` エンドポイントへの SAML アサーションに `RelayState` パラメータを含める必要があります。

詳細については、「[ユーザープールによる SAML ID プロバイダーの使用](cognito-user-pools-saml-idp.md)」を参照してください。

## マネージドログインユーザーが MFA 要素を選択できない
<a name="troubleshoot_mfa_factor_selection"></a>

**問題**  
ユーザーは、マネージドログインでサインインするときに希望する MFA の方法を選択できないか、または希望する MFA の方法を入力するよう求められません。

**ソリューション**  
Amazon Cognito は、特定のロジックに従い、ユーザープールの設定、ユーザー属性、アカウント復旧設定に基づいてユーザーが利用できる MFA 要素を決定します。例えば、E メールがプライマリのアカウント復旧方法として設定されている場合、ユーザーは E メール MFA を使用できません。  
MFA 要素のデフォルトの選択を上書きするには、次のいずれかのアプローチを実装できます。  
+ パブリックアプリケーションの場合: 有効なアクセストークンで [SetUserMFAPreference](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserMFAPreference.html) を使用して、ユーザーが希望する MFA を選択できるよう設定します。
+ 管理者マネージドアプリケーションの場合: AWS 認証情報で [AdminSetUserMFAPreference](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserMFAPreference.html) を使用してユーザー MFA 設定を構成する
どちらのオペレーションでも、ユーザーごとに SMS、E メール、TOTP MFA 方法を有効または無効にし、希望する方法として 1 つを設定できます。

詳細については、「[ユーザープールに MFA を追加します](user-pool-settings-mfa.md)」を参照してください。

### パスワードなしのユーザーとパスキーユーザーは MFA を使用できません
<a name="troubleshoot_passwordless_mfa"></a>

**問題**  
ワンタイムパスワード (OTP) 認証方法でサインインするユーザーは、多要素認証を追加または使用することはできません。

**ソリューション**  
OTP サインインフローは MFA をサポートしていません。ただし、ユーザー検証によるパスキー認証は MFA 要件を満たすことができます。ユーザープール`MULTI_FACTOR_WITH_USER_VERIFICATION`の `FactorConfiguration`を に設定`WebAuthnConfiguration`して、パスキーを多要素認証としてカウントできるようにします。

詳細については、「[ユーザープールによる認証](getting-started-identity-pools-application.md#user-pool-authentication)」を参照してください。

## E メール/SMS 経由でパスワードリセットコードを受信できない
<a name="troubleshoot_password_reset_delivery"></a>

**問題**  
ユーザーは、パスワードを忘れた場合のワークフローで、E メールまたは SMS を通じて検証コードを受信できません。

**ソリューション**  
検証コードが受信できない理由はさまざまです。この問題のトラブルシューティングを行うには、次のチェックリストに従います。  
+ ユーザーの E メールのスパムフォルダと迷惑メールフォルダを確認します。
+ ユーザープールにユーザーが存在することを確認します。
+ ユーザーのステータスが `FORCE_CHANGE_PASSWORD` でないことを確認します。このステータスである場合、ユーザーは管理者によって作成されており、Amazon Cognito は、ユーザーが仮パスワードを使用してサインインするときにパスワードを設定するよう求めます。
+ ユーザーの E メールまたは電話番号の属性が検証済みであることを確認します。
+ SMS メッセージングのアカウント使用制限を確認する
+ Amazon Simple Email Service (Amazon SES) のメッセージ送信クォータを確認します。
+ SMS と Amazon SES の両方 (ユーザープールが **[Amazon SES で E メールを送信]** に設定されている場合) がサンドボックス外に移動されているかどうかを確認します。Amazon SES によって検証されていない、またはパスワードリセットコードを受信できないサンドボックス、E メールアドレス、または電話番号から移動されなかった AWS End User Messaging SMS 場合。
+ ユーザーがアクティブな MFA 要素を持っている場合は、同じ要素へのメッセージを生成しようとしていないことを確認します。例えば、E メール MFA がアクティブであるユーザーは、パスワードリセットコードを E メールで送信できません。

詳細については、「[Amazon Cognito ユーザープールの E メール設定](user-pool-email.md)」および「[Amazon Cognito ユーザープール用の SMS メッセージ設定](user-pool-sms-settings.md)」を参照してください。

## パスワードのリセットは、未検証の復旧属性で失敗します。 `Could not reset password for the account, please contact support or try again`
<a name="troubleshoot_password_reset_unverified_recovery"></a>

**問題**  
未検証の復旧方法または MFA 設定の競合が原因でパスワードをリセットしようとすると、このエラーが発生します。エラーは、ユーザーの E メールまたは電話番号属性が未検証の場合、または MFA 設定で設定された復旧方法を使用できない場合に発生します。

**ソリューション**  
ユーザープールのアカウント復旧設定と、影響を受けるユーザーの検証ステータスを確認します。  
+ **復旧設定の確認:** ユーザープールで、**サインイン** > **ユーザーアカウントの復旧**に移動します。**セルフサービスアカウントの復旧**が有効になっていることを確認し、**復旧メッセージの配信方法**の設定を確認します。
+ **ユーザー属性の検証を確認する:** ユーザーに、復旧方法の設定に一致する検証済みの E メールアドレスまたは電話番号があることを確認します。コンソールで、ユーザーのプロファイルに移動し、**ユーザー属性** > **編集**を選択し、適切な属性を検証済みとしてマークします。
+ **MFA の競合を解決する:** 希望する MFA 方法が E メールであるユーザーは E メールでパスワードリセットコードを受信できず、SMS MFA を使用するユーザーは SMS でコードを受信できません。**Recovery メッセージ配信方法**を更新して、**利用可能な場合は SMS、利用可能な場合は E** メールまたは **E メール、それ以外の場合は SMS **などの代替オプションを提供します。
+ **管理検証:** API オペレーション [AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html) を使用して、コンソールアクセスが利用できないときにプログラムでユーザー属性を検証します。

詳細については、「[パスワード、アカウント復旧、パスワードポリシー](managing-users-passwords.md)」を参照してください。

## `SECRET_HASH` エラー
<a name="troubleshoot_secret_hash_required"></a>

**問題**  
クライアントシークレットを持つアプリケーションクライアントへの認証 API リクエストが `An error occurred (NotAuthorizedException) when calling the ForgotPassword operation: Client 1example23456789 is configured with secret but SECRET_HASH was not received.` などのエラーを返す

**ソリューション**  
アプリケーションは、現在のユーザー、アプリケーションクライアント、クライアントシークレットについて、`SECRET_HASH` を計算する必要があります。計算方法は次のとおりです。  

```
Base64 ( HMAC_SHA256 ( "client secret", "Username" + "Client Id" ) )
```
クライアントシークレットを取得するには、以下の操作ができます。  

1. Amazon Cognito コンソールを開き、**[アプリケーションクライアント]** メニューからアプリケーションクライアントに移動します。**[アプリケーションクライアント情報]** セクションで、**[クライアントシークレット]** を見つけます。**[クライアントシークレットを表示]** を選択すると、アプリケーションのクライアントシークレットが表示されます。

1. [DescribeUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPoolClient.html) リクエストを生成します。クライアントシークレットがレスポンスに含まれます。

詳細については、「[シークレットハッシュ 値の計算](signing-up-users-in-your-app.md#cognito-user-pools-computing-secret-hash)」を参照してください。

## Amazon Cognito コンソールが、新しいユーザープールにデフォルト設定を選択する
<a name="troubleshoot_console_default_config"></a>

**問題**  
コンソールで新しいユーザープールを設定すると、Amazon Cognito はいくつかのデフォルト設定を選択します。一部の設定は、ユーザープールの作成後に変更できません。情報に基づいた選択を行い、Amazon Cognito が自動的に何を選択したかを確認するにはどうすればよいですか?

**ソリューション**  
Amazon Cognito コンソールの新しいユーザープールの設定は、迅速なテストとプロトタイプ作成のために設計されています。コンソールには、ユーザープールの作成後に変更できない、最も重要な設定オプションのみが表示されます。Amazon Cognito が自動的に設定する他のすべての設定は、後で変更できます。  
次のようなアプローチを推奨します。  

1. コンソールを使用して、テストユーザープールを作成し、実装を改善します。

1. 本番稼働用設定を決定したら、この設定をテストユーザープールに適用します。

1. [DescribeUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html) および [DescribeUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPoolClient.html) API オペレーションを使用して、テスト済み設定の JSON テンプレートを生成します。

1.  AWS SDKs、CDK、REST API、 などのデプロイツールでこれらのテンプレート CloudFormation を使用して、本番稼働用リソースを作成します。

詳細については、「[ユーザープールの開始方法](getting-started-user-pools.md)」を参照してください。

## その他のトラブルシューティングリソース
<a name="troubleshoot_additional_resources"></a>

その他のトラブルシューティングガイダンスとコミュニティから提供されたソリューションについては、以下の外部リソースも参照してください。
+ [AWS re:Post Amazon Cognito コミュニティ](https://repost.aws/tags/TAkhAE7QaGSoKZwd6utGhGDA/amazon-cognito) - コミュニティの質問とソリューションを参照する
+ [AWS ナレッジセンターの Amazon Cognito 記事](https://aws.amazon.com/premiumsupport/knowledge-center/cognito/) - 厳選されたトラブルシューティング記事