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에서 로그인 이름을 검색하고 비교합니다.
-
엔드 투 엔드 로그인 프로세스를 위해 HAR 캡처 (HTTP AR차이브) 를 수행합니다. 이것은 브라우저 측에서 네트워크 요청을 캡처합니다. HAR 파일을 원하는 파일 이름 (예: saml.har) 으로 저장합니다.
자세한 내용은 AWS Support 사례를 위해 브라우저에서 HAR 파일을 생성하려면 어떻게 해야 합니까?
를 참조하세요. -
텍스트 편집기를 사용하여 HAR 파일에서 SAML 응답을 찾습니다. 다음 명령을 실행합니다:
$ grep -o "SAMLResponse=.*&" azuresaml.har | sed -E 's/SAMLResponse=(.*)&/\1/' > samlresponse.txt
-
이 HAR 파일에서 SAML 응답을 검색하고 samlresponse.txt 파일에 저장합니다.
-
응답은 URL로 인코딩되고 내용은 Base64로 인코딩됩니다.
-
-
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 응답을 일반 텍스트 형식으로 출력합니다.
-
필요한 속성에 대한 디코딩 된 응답을 확인하십시오. 예를 들어 다음 이미지는 확인 방법을 보여 줍니다
RoleSessionName
. -
이전 단계에서 반환된 사용자 이름이 Amazon Connect 인스턴스에 사용자로 존재하는지 확인합니다.
$ AWS 연결 목록 사용자 - 인스턴스 ID [인스턴스 ID] | 그렙 $ 사용자 이름
-
최종 grep이 결과를 반환하지 않으면 사용자가 Amazon Connect 인스턴스에 존재하지 않거나 다른 대/소문자/대문자로 작성되었음을 의미합니다.
-
Amazon Connect 인스턴스에 많은 사용자가 있는 경우 ListUsers API 호출의 응답이 페이지가 매겨질 수 있습니다. API에 의해
NextToken
반환 된 를 사용하여 나머지 사용자를 가져옵니다. 자세한 내용은 ListUsers을참조하십시오.
-
SAML 응답 예
다음은 샘플 SAML 응답의 이미지입니다. 이 경우 ID 공급자 (IdP) 는 Azure AD (활성 디렉터리) 입니다.
오류 메시지: 액세스가 거부되었습니다. AWS 계정 관리자에게 도움을 요청하세요.
이것은 무엇을 의미하나요?
사용자가 수임한 역할이 SAML을 통해 성공적으로 인증되었습니다. 그러나 역할에는 Amazon Connect에 대한 GetFederationToken API를 호출할 수 있는 권한이 없습니다. 사용자가 SAML을 사용하여 Amazon Connect 인스턴스에 로그인할 수 있도록 이 호출이 필요합니다.
해결 방법
-
오류 메시지에 있는 역할에
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}" ] } ] }
-
IAM 콘솔을 사용하여 정책을 연결합니다. 또는 첨부 역할 정책 API를 사용합니다. 예를 들면 다음과 같습니다.
$ aws iam attach-role-policy —role-name [
ASSUMED_ROLE
] —policy_arn [POLICY_WITH_GETFEDERATIONTOKEN
]
오류 메시지: 세션 만료됨
로그인하는 동안 세션 만료됨 메시지가 표시되는 경우 세션 토큰을 새로 고치기만 하면 문제가 해결될 수 있습니다. ID 제공업체로 이동하여 로그인합니다. Amazon Connect 페이지를 새로 고칩니다. 이 메시지가 계속 표시되면 IT 팀에 문의하세요.