Amazon Cognito 문제 해결 - Amazon Cognito

Amazon Cognito 문제 해결

이 장에서는 Amazon Cognito로 작업하는 동안 발생할 수 있는 일반적인 문제에 대한 솔루션을 제공합니다. Amazon Cognito 구현은 인증 흐름, 사용자 풀 구성 및 ID 페더레이션 설정 전반에 걸쳐 다양한 문제에 직면할 수 있습니다. 새 애플리케이션을 개발하든 기존 애플리케이션을 유지하든 이 문제 해결 안내서는 일반적인 문제를 신속하게 식별하고 해결하는 데 도움이 됩니다.

사용자 지정 도메인 구성 오류

Amazon Cognito에서 사용자 지정 도메인 이름을 구성할 때 오류 메시지가 표시될 수 있습니다. 일반적인 오류에는 검증 문제, 인증서 문제 또는 도메인 충돌이 포함됩니다.

Custom domain is not a valid subdomain

이 오류는 상위 도메인의 DNS 확인 문제를 나타냅니다. Amazon Cognito는 최상위 도메인을 지원하지 않으며 검증을 위해 상위 도메인에 DNS A 레코드가 있어야 합니다.

문제

이 오류는 상위 도메인의 DNS 확인 문제를 나타냅니다. Amazon Cognito는 최상위 도메인을 지원하지 않으며 검증을 위해 상위 도메인에 DNS A 레코드가 있어야 합니다.

Solution
  • 상위 도메인에 대한 레코드 생성: 사용자 지정 도메인의 상위 도메인에 대한 DNS 구성에서 A 레코드를 생성해야 합니다.

    • 예: 사용자 지정 도메인이 auth.xyz.yourdomain.com인 경우 상위 도메인은 xyz.yourdomain.com입니다. xyz.yourdomain.com을 사용자 지정 도메인으로 구성하려는 경우 상위 항목은 yourdomain.com입니다.

    • 상위 도메인은 유효한 IP 주소로 확인되어야 합니다. 실제 IP 주소를 가리키지 않는 경우 8.8.8.8과 같은 더미 IP 주소를 사용할 수 있습니다.

  • 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에 자체 도메인 사용을 참조하세요.

Domain already associated with another user pool

사용자 지정 도메인 이름은 모든 AWS 계정 및 리전에서 고유해야 합니다.

문제

사용자 지정 도메인 이름은 모든 AWS 계정 및 리전에서 고유해야 합니다.

Solution
  • 새 사용자 풀에 도메인 이름을 사용하려면 현재 연결된 사용자 풀에서 사용자 지정 도메인을 삭제해야 합니다.

  • 삭제 후 대기: 사용자 지정 도메인이 첫 번째 사용자 풀에서 완전히 삭제되는 데 시간이 걸립니다. 삭제 직후 동일한 이름으로 새 사용자 지정 도메인을 생성해도 여전히 이 오류가 발생할 수 있습니다. 몇 분 기다렸다가 다시 시도합니다.

One or more of the CNAMEs that you provided are already associated with a different resource

사용자 지정 도메인을 생성하면 Amazon Cognito는 AWS 관리형 Amazon CloudFront 배포를 생성합니다. 도메인 이름은 하나의 Amazon CloudFront 배포에만 사용할 수 있습니다. 이 오류는 도메인 이름이 이미 다른 Amazon CloudFront 배포의 대체 도메인으로 사용 중인 경우에 발생합니다.

문제

사용자 지정 도메인을 생성하면 Amazon Cognito는 AWS 관리형 Amazon CloudFront 배포를 생성합니다. 도메인 이름은 하나의 Amazon CloudFront 배포에만 사용할 수 있습니다. 이 오류는 도메인 이름이 이미 다른 Amazon CloudFront 배포의 대체 도메인으로 사용 중인 경우에 발생합니다.

Solution
  • 옵션 1: Amazon Cognito 사용자 지정 도메인에 다른 도메인 이름을 사용합니다.

  • 옵션 2: Amazon Cognito의 도메인 이름을 사용하는 경우 다른 Amazon CloudFront 배포판과 함께 사용하지 마세요.

The specified SSL certificate doesn't exist

Amazon Cognito는 사용자 풀의 리전에 관계없이 AWS Certificate Manager(ACM) 인증서가 us-east-1(버지니아 북부) AWS 리전에 있어야 하는 Amazon CloudFront를 사용합니다.

문제

Amazon Cognito는 사용자 풀의 리전에 관계없이 AWS Certificate Manager(ACM) 인증서가 us-east-1(버지니아 북부) AWS 리전에 있어야 하는 Amazon CloudFront를 사용합니다.

Solution
  • 인증서 리전 확인: ACM 인증서가 us-east-1 리전에 있는지 확인합니다.

  • 인증서 유효성 확인: 선택한 인증서가 만료되지 않았는지 확인합니다.

  • 가져온 인증서: 인증서를 ACM으로 가져온 경우 다음을 확인합니다.

    • 공인 인증 기관에서 발급한 것입니다.

    • 여기에는 올바른 인증서 체인이 포함됩니다.

  • AWS KMS 정책 확인: 도메인을 생성하는 IAM 사용자 또는 역할에 대한 AWS Key Management Service(AWS KMS) 정책의 명시적 deny 문으로 인해 이 오류가 발생할 수 있습니다. 특히 kms:DescribeKey, kms:CreateGrant 또는 kms:* 작업에 대한 명시적 거부가 있는지 확인합니다.

Invalid refresh token 오류

문제

새로 고침 토큰을 사용하여 AdminInitiateAuth 또는 InitiateAuth API 작업을 사용하여 Amazon Cognito 사용자 풀에서 새 액세스 및 ID 토큰을 가져오려고 할 때 Invalid refresh token 오류가 발생합니다.

Solution

사용자 풀 구성 및 API 사용량에 따라 다음 문제 해결 단계를 구현합니다.

  • 일관된 앱 클라이언트 ID 보장: 토큰 새로 고침을 위해 AdminInitiateAuth 또는 InitiateAuth API를 호출할 때 새로 고침 토큰을 생성한 초기 인증 중에 사용된 것과 정확히 동일한 앱 클라이언트 ID를 사용해야 합니다.

  • 디바이스 확인: 사용자 풀에서 디바이스 추적이 활성화되었지만 사용자의 디바이스가 확인되지 않은 경우 먼저 ConfirmDevice 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여야 합니다.

자세한 내용은 사용자 풀의 사용자 디바이스 작업 섹션을 참조하세요.

페더레이션의 잘못된 SAML 응답 오류

SAML 2.0을 사용하여 Amazon Cognito에 페더레이션하려고 하면 사용자에게 다양한 Invalid SAML response 및 유사한 오류가 발생합니다. 이러한 오류는 속성 매핑 문제, 인증서 문제 또는 구성 불일치로 인해 발생할 수 있습니다.

Invalid user attributes: Required attribute

문제

사용자가 사용자 풀에 필요한 속성 값을 누락했거나 IdP가 변경 불가능한 속성을 제거하거나 업데이트하려고 합니다.

Solution
  • 사용자 풀 구성에 정의된 필수 속성을 확인합니다.

  • 브라우저에서 네트워크 캡처 도구를 사용하여 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

문제

IdP가 SAML 서명 인증서를 업데이트하여 SAML 응답의 인증서와 Amazon Cognito에 저장된 메타데이터 파일이 일치하지 않습니다.

Solution
  1. IdP에서 최신 메타데이터 파일을 다운로드합니다.

  2. Amazon Cognito 콘솔에서 사용자 풀의 소셜 및 외부 공급자로 이동하여 SAML 공급자를 편집하고 기존 메타데이터 파일을 새로 다운로드한 파일로 바꿉니다.

Audience restriction‘or’Application with identifier not found

문제

IdP에 잘못된 엔터티 ID가 구성되었거나 어설션이 다른 사용자 풀의 URN(Uniform Resource Name)을 사용합니다.

Solution
  1. 콘솔의 개요 섹션에서 Amazon Cognito 사용자 풀 ID를 가져옵니다.

  2. IdP의 관리 콘솔에서 사용자 풀의 SAML 애플리케이션에서 엔터티 ID를 업데이트합니다. urn:amazon:cognito:sp:USER_POOL_ID 형식과 일치하도록 개체 ID를 구성합니다. USER_POOL_ID을 전 단계의 사용자 풀 ID로 바꿉니다.

An error was encountered with the requested page

문제

IdP에 등록된 어설션 소비자 서비스(ACS) URL이 잘못 구성되었거나 IdP가 필요한 POST 바인딩을 사용하여 SAML 응답을 전송하지 않습니다.

Solution
  • 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

문제

RelayState 파라미터가 누락되었거나 유효하지 않거나 IdP와 Amazon Cognito 간에 URL이 일치하지 않습니다.

Solution
  • 서비스 공급자 시작(SP 시작) 흐름의 경우: 항상 사용자 풀 /oauth2/authorize 엔드포인트에서 인증을 시작합니다. 사용자가 Amazon Cognito를 처음 방문할 때 RelayState 파라미터를 반환하지 않는 SAML 어설션은 유효한 SP 시작 요청이 아닙니다.

  • ID 제공업체 시작(IdP 시작) 흐름의 경우: IdP에는 필수 형식 redirect_uri=REDIRECT_URI&state=STATE를 사용하여 /saml2/idpresponse 엔드포인트에 대한 SAML 어설션과 함께 RelayState 파라미터가 포함되어야 합니다.

자세한 내용은 사용자 풀에서 SAML ID 제공업체 사용 섹션을 참조하세요.

관리형 로그인 사용자는 MFA 요소를 선택할 수 없습니다.

문제

사용자는 관리형 로그인을 통해 로그인할 때 선호하는 MFA 방법을 선택할 수 없거나 예상한 MFA 방법을 입력하라는 메시지가 표시되지 않습니다.

Solution

Amazon Cognito는 특정 로직을 따라 사용자 풀 설정, 사용자 속성 및 계정 복구 구성을 기반으로 사용자가 사용할 수 있는 MFA 요소를 결정합니다. 예를 들어 이메일이 기본 계정 복구 방법으로 구성된 경우 사용자는 이메일 MFA를 사용할 수 없습니다.

기본 MFA 팩터 선택을 재정의하려면 다음 방법 중 하나를 구현할 수 있습니다.

  • 퍼블릭 애플리케이션의 경우: 유효한 액세스 토큰과 함께 SetUserMFAPreference를 사용하여 사용자가 자신의 MFA 기본 설정을 설정하도록 허용

  • 관리자 관리형 애플리케이션의 경우: AWS 자격 증명과 함께 AdminSetUserMFAPreference를 사용하여 사용자 MFA 기본 설정을 구성합니다.

두 작업을 모두 사용하면 개별 사용자에 대해 SMS, 이메일 및 TOTP MFA 메서드를 활성화 또는 비활성화하고 원하는 대로 하나의 메서드를 설정할 수 있습니다.

자세한 내용은 사용자 풀에 MFA 추가 섹션을 참조하세요.

암호 없는 사용자 및 패스키 사용자는 MFA를 사용할 수 없습니다.

문제

암호 없는 인증 방법 또는 패스키로 로그인하는 사용자는 다중 인증을 추가하거나 사용할 수 없습니다.

Solution

이는 의도한 제한 사항입니다. 사용자가 MFA를 사용하거나 암호 없는 요소로 로그인하도록 사용자 풀을 구성할 수 있지만 둘 다 구성할 수는 없습니다. MFA는 암호 기반 인증 흐름에만 사용할 수 있습니다.

자세한 내용은 사용자 풀로 인증을 참조하세요.

이메일/SMS를 통해 암호 재설정 코드를 수신할 수 없음

문제

사용자는 암호 찾기 워크플로 중에 이메일 또는 SMS를 통해 확인 코드를 받을 수 없습니다.

Solution

확인 코드가 수신되지 않는 이유는 다양합니다. 문제를 해결하려면 다음 체크리스트를 따르십시오.

  • 사용자의 이메일 스팸 및 정크 폴더를 확인합니다.

  • 사용자가 사용자 풀에 있는지 확인합니다.

  • 사용자의 상태가 FORCE_CHANGE_PASSWORD가 아닌지 확인합니다. 이 경우 관리자가 사용자를 생성했으며 Amazon Cognito는 임시 암호로 로그인할 때 암호를 설정하라는 메시지를 표시합니다.

  • 사용자에게 확인된 이메일 또는 전화 번호 속성이 있는지 확인합니다.

  • SMS 메시징에 대한 계정 사용 한도 확인

  • Amazon Simple Email Service(Amazon SES) 메시지 전송 할당량을 확인합니다.

  • SMS와 Amazon SES(사용자 풀이 Amazon SES로 이메일을 전송하도록 구성된 경우)가 모두 샌드박스에서 이동되었는지 확인하세요. 샌드박스에서 옮겨지지 않은 경우 Amazon SES 또는 AWS End User Messaging SMS에서 확인하지 않은 이메일 주소나 전화번호는 암호 재설정 코드를 받을 수 없습니다.

  • 사용자에게 활성 MFA 요소가 있는 경우 동일한 요소로 메시지를 생성하려고 하지 않는지 확인합니다. 예를 들어 이메일 MFA가 활성화된 사용자는 이메일로 암호 재설정 코드를 전송할 수 없습니다.

자세한 내용은 Amazon Cognito 사용자 풀에 대한 이메일 설정Amazon Cognito 사용자 풀의 SMS 메시지 설정(을)를 참조하세요.

SECRET_HASH 오류

문제

클라이언트 보안 암호가 있는 앱 클라이언트에 대한 인증 API 요청은 An error occurred (NotAuthorizedException) when calling the ForgotPassword operation: Client 1example23456789 is configured with secret but SECRET_HASH was not received.와 같은 오류를 반환합니다.

Solution

애플리케이션은 현재 사용자, 앱 클라이언트 및 클라이언트 보안 암호에 대한 SECRET_HASH를 계산해야 합니다. 계산 방법은 다음과 같습니다.

Base64 ( HMAC_SHA256 ( "client secret", "Username" + "Client Id" ) )

클라이언트 보안 암호를 가져오려면 다음을 수행할 수 있습니다.

  1. Amazon Cognito 콘솔을 열고 앱 클라이언트 메뉴에서 앱 클라이언트로 이동합니다. 앱 클라이언트 정보 섹션에서 클라이언트 보안 암호를 찾습니다. 클라이언트 보안 암호 표시를 선택하면 앱 클라이언트 보안 암호가 나타납니다.

  2. DescribeUserPoolClient 요청을 생성합니다. 클라이언트 보안 암호가 응답에 포함됩니다.

자세한 내용은 보안 암호 해시 값 컴퓨팅 섹션을 참조하세요.

Amazon Cognito 콘솔에서 새 사용자 풀에 대한 기본 구성 선택

문제

콘솔에서 새 사용자 풀을 설정하면 Amazon Cognito가 몇 가지 기본 설정을 자동으로 선택합니다. 일부 설정은 사용자 풀이 생성된 후에는 변경할 수 없습니다. 정보에 입각한 선택을 하고 Amazon Cognito가 자동으로 선택한 항목을 이해하려면 어떻게 해야 하나요?

Solution

Amazon Cognito 콘솔의 새로운 사용자 풀 설정은 신속한 테스트 및 프로토타이핑을 위해 설계되었습니다. 콘솔은 사용자 풀 생성 후 변경할 수 없는 가장 중요한 구성 선택 사항만 제공합니다. Amazon Cognito가 자동으로 구성하는 다른 모든 설정은 나중에 수정할 수 있습니다.

다음과 같이 하는 것이 좋습니다.

  1. 구현을 구체화하는 동안 콘솔을 사용하여 테스트 사용자 풀을 생성합니다.

  2. 프로덕션 구성을 결정한 후 해당 설정을 테스트 사용자 풀에 적용합니다.

  3. DescribeUserPoolDescribeUserPoolClient API 작업을 사용하여 테스트된 구성의 JSON 템플릿을 생성합니다.

  4. 이러한 템플릿을 AWS SDK, CDK, REST API 또는 CloudFormation와 같은 배포 도구와 함께 사용하여 프로덕션 리소스를 생성합니다.

자세한 내용은 사용자 풀 시작하기 섹션을 참조하세요.

추가 문제 해결 리소스

추가 문제 해결 지침 및 커뮤니티 기여 솔루션을 보려면 다음 외부 리소스를 탐색할 수도 있습니다.