Amazon Connect를 통한 SAML 문제 해결 - Amazon Connect

Amazon Connect를 통한 SAML 문제 해결

이 문서에서는 Amazon Connect에서 SAML을 사용할 때 발생하는 가장 일반적인 문제 중 일부를 해결하는 방법에 대해 설명합니다.

Okta, PingIdentify, Azure AD 등과 같은 다른 ID 공급자와의 통합 문제를 해결하는 경우 Amazon Connect SSO 설치 워크숍을 참조하세요.

오류 메시지: 액세스가 거부되었습니다. 계정이 인증되었지만 이 애플리케이션에 온보딩되지 않았습니다.

오류 메시지: 액세스가 거부되었습니다.

이것은 무엇을 의미하나요?

이 오류는 사용자가 SAML을 통해 AWS SAML 로그인 엔드포인트에 성공적으로 인증되었음을 의미합니다. 그러나 사용자는 Amazon Connect 내부에서 매칭되거나 찾을 수 없습니다. 이 메시지는 일반적으로 다음 중 하나를 나타냅니다.

  • Amazon Connect의 사용자 이름이 자격 증명 공급자가 반환한 SAML 응답에 지정된 RoleSessionName SAML 특성과 일치하지 않습니다.

  • 사용자는 Amazon Connect에 존재하지 않습니다.

  • 사용자에게는 SSO를 통해 두 개의 개별 프로필이 할당됩니다.

해결 방법

다음 단계를 사용하여 자격 증명 공급자가 반환하는 SAML 응답에 지정된 RolesSessionName SAML 속성을 확인한 다음 Amazon Connect에서 로그인 이름을 검색하고 비교합니다.

  1. 엔드 투 엔드 로그인 프로세스를 위해 HAR 캡처 (HTTP AR차이브) 를 수행합니다. 이것은 브라우저 측에서 네트워크 요청을 캡처합니다. HAR 파일을 원하는 파일 이름 (예: saml.har) 으로 저장합니다.

    자세한 내용은 AWS Support 사례를 위해 브라우저에서 HAR 파일을 생성하려면 어떻게 해야 합니까?를 참조하세요.

  2. 텍스트 편집기를 사용하여 HAR 파일에서 SAML 응답을 찾습니다. 다음 명령을 실행합니다:

    $ grep -o "SAMLResponse=.*&" azuresaml.har | sed -E 's/SAMLResponse=(.*)&/\1/' > samlresponse.txt

    • 이 HAR 파일에서 SAML 응답을 검색하고 samlresponse.txt 파일에 저장합니다.

    • 응답은 URL로 인코딩되고 내용은 Base64로 인코딩됩니다.

  3. URL 응답을 디코딩 한 다음 타사 도구 또는 간단한 스크립트를 사용하여 Base64 내용을 디코딩합니다. 예:

    $ cat samlresponse.txt | python3 -c "import sys; from urllib.parse import unquote; print(unquote(sys.stdin.read()));" | base64 --decode > samlresponsedecoded.txt

    이 스크립트는 간단한 python 명령을 사용하여 원래 URL 인코딩 형식에서 SAMLResponse를 디코딩합니다. 그런 다음 Base64에서 응답을 디코딩하고 SAML 응답을 일반 텍스트 형식으로 출력합니다.

  4. 필요한 속성에 대한 디코딩 된 응답을 확인하십시오. 예를 들어 다음 이미지는 확인 방법을 보여 줍니다 RoleSessionName.

    grep 명령은 rolesessionname을 확인합니다.
  5. 이전 단계에서 반환된 사용자 이름이 Amazon Connect 인스턴스에 사용자로 존재하는지 확인합니다.

    $ AWS 연결 목록 사용자 - 인스턴스 ID [인스턴스 ID] | 그렙 $ 사용자 이름

    • 최종 grep이 결과를 반환하지 않으면 사용자가 Amazon Connect 인스턴스에 존재하지 않거나 다른 대/소문자/대문자로 작성되었음을 의미합니다.

    • Amazon Connect 인스턴스에 많은 사용자가 있는 경우 ListUsers API 호출의 응답이 페이지가 매겨질 수 있습니다. API에 의해 NextToken 반환 된 를 사용하여 나머지 사용자를 가져옵니다. 자세한 내용은 ListUsers을참조하십시오.

SAML 응답 예

다음은 샘플 SAML 응답의 이미지입니다. 이 경우 ID 공급자 (IdP) 는 Azure AD (활성 디렉터리) 입니다.

SAML 응답 예.

오류 메시지: 액세스가 거부되었습니다. AWS 계정 관리자에게 도움을 요청하세요.

오류 메시지: 액세스가 거부되었습니다.

이것은 무엇을 의미하나요?

사용자가 수임한 역할이 SAML을 통해 성공적으로 인증되었습니다. 그러나 역할에는 Amazon Connect에 대한 GetFederationToken API를 호출할 수 있는 권한이 없습니다. 사용자가 SAML을 사용하여 Amazon Connect 인스턴스에 로그인할 수 있도록 이 호출이 필요합니다.

해결 방법

  1. 오류 메시지에 있는 역할에 connect:GetFederationToken 대한 권한이 있는 정책을 연결합니다. 다음은 샘플 정책입니다.

    { "Version": "2012-10-17", "Statement": [{ "Sid": "Statement1", "Effect": "Allow", "Action": "connect:GetFederationToken", "Resource": [ "arn:aws:connect:ap-southeast-2:xxxxxxxxxxxx:instance/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/user/${aws:userid}" ] } ] }
  2. IAM 콘솔을 사용하여 정책을 연결합니다. 또는 첨부 역할 정책 API를 사용합니다. 예를 들면 다음과 같습니다.

    $ aws iam attach-role-policy —role-name [ASSUMED_ROLE] —policy_arn [POLICY_WITH_GETFEDERATIONTOKEN]

오류 메시지: 세션 만료됨

로그인하는 동안 세션 만료됨 메시지가 표시되는 경우 세션 토큰을 새로 고치기만 하면 문제가 해결될 수 있습니다. ID 제공업체로 이동하여 로그인합니다. Amazon Connect 페이지를 새로 고칩니다. 이 메시지가 계속 표시되면 IT 팀에 문의하세요.