IAM과 SAML 페더레이션 문제 해결
IAM과 SAML 페더레이션 문제 해결
SAML 2.0 기반 페더레이션을 구성하다 보면 AWS STS가 돌려주는 다양한 오류를 만나게 돼요. 이 페이지는 IAM 콘솔 로그인이나 역할 수임 과정에서 흔히 보는 오류 메시지별 원인과 해결법을 정리해 주는 트러블슈팅 가이드예요.
출처: 문서
본문
SAML 2.0과 AWS Identity and Access Management의 페더레이션을 다룰 때 만날 수 있는 문제를 진단하고 해결하는 데 도움이 되는 내용이에요.
오류: Your request included an invalid SAML response. To logout, click here.
이 오류는 ID 공급자(identity provider)의 SAML 응답에 Name이 https://aws.amazon.com/SAML/Attributes/Role로 설정된 속성(attribute)이 포함되지 않을 때 발생할 수 있어요. 이 속성에는 하나 이상의 AttributeValue 요소가 포함되어야 하고, 각 요소에는 쉼표로 구분된 두 문자열 쌍이 들어가야 해요.
- 사용자가 매핑될 수 있는 역할의 ARN
- SAML 공급자의 ARN
또한 ID 공급자가 보낸 SAML 속성 값에 앞·뒤 공백이나 다른 잘못된 문자가 있을 때도 이 오류가 발생할 수 있어요. SAML 속성의 기대 값에 대한 자세한 내용은 인증 응답을 위한 SAML 어설션 구성을 참고하세요. 브라우저에서 SAML 응답을 보려면 브라우저에서 SAML 응답 보기에 나열된 단계를 따르세요.
오류: RoleSessionName is required in AuthnResponse (service: AWSSecurityTokenService; status code: 400; error code: InvalidIdentityToken)
이 오류는 ID 공급자의 SAML 응답에 Name이 https://aws.amazon.com/SAML/Attributes/RoleSessionName으로 설정된 속성이 포함되지 않을 때 발생할 수 있어요. 이 속성 값은 사용자의 식별자로, 대개 사용자 ID나 이메일 주소예요. 자세한 내용은 인증 응답을 위한 SAML 어설션 구성을 참고하세요.
오류: Not authorized to perform sts:AssumeRoleWithSAML (service: AWSSecurityTokenService; status code: 403; error code: AccessDenied)
이 오류는 다음 경우에 발생할 수 있어요.
- SAML 응답에 지정된 IAM 역할 이름이 잘못되었거나 존재하지 않는 경우. 역할 이름은 대소문자를 구분하므로 정확한 이름을 사용해야 해요. SAML 서비스 공급자 구성에서 역할 이름을 수정하세요.
- 역할의 신뢰 정책에
sts:AssumeRoleWithSAML동작이 포함되어야만 접근이 허용돼요. SAML 어설션이PrincipalTag속성을 사용하도록 구성되어 있다면 신뢰 정책에sts:TagSession동작도 포함해야 해요. 세션 태그에 대한 자세한 내용은 AWS STS에서 세션 태그 전달을 참고하세요. - 역할 신뢰 정책에
sts:SetSourceIdentity권한이 없을 때. SAML 어설션이SourceIdentity속성을 사용하도록 구성되어 있다면 신뢰 정책에sts:SetSourceIdentity동작도 포함해야 해요. 소스 ID에 대한 자세한 내용은 수임된 역할로 수행되는 동작 모니터링·제어을 참고하세요. - 페더레이션 프린시펄이 역할을 수임할 권한이 없을 때. 역할에는 IAM SAML ID 공급자의 ARN을
Principal로 지정하는 신뢰 정책이 있어야 해요. 역할은 어떤 사용자가 수임할 수 있는지 제어하는 조건도 포함해요. 사용자가 해당 조건 요구 사항을 충족하는지 확인하세요. - SAML 응답에
NameID를 포함하는Subject가 없을 때.
자세한 내용은 SAML 2.0 페더레이션 프린시펄이 AWS Management Console에 접근하도록 설정과 인증 응답을 위한 SAML 어설션 구성을 참고하세요.
오류: RoleSessionName in AuthnResponse must match [a-zA-Z_0-9+=,.@-]{2,64} (service: AWSSecurityTokenService; status code: 400; error code: InvalidIdentityToken)
RoleSessionName 속성 값이 너무 길거나 잘못된 문자를 포함할 때 발생할 수 있어요. 유효한 최대 길이는 64자예요.
오류: Source Identity must match [a-zA-Z_0-9+=,.@-]{2,256} and not begin with "aws:" (service: AWSSecurityTokenService; status code: 400; error code: InvalidIdentityToken)
sourceIdentity 속성 값이 너무 길거나 잘못된 문자를 포함할 때 발생할 수 있어요. 유효한 최대 길이는 256자예요. 소스 ID에 대한 자세한 내용은 수임된 역할로 수행되는 동작 모니터링·제어를 참고하세요.
오류: Response signature invalid (service: AWSSecurityTokenService; status code: 400; error code: InvalidIdentityToken)
ID 공급자의 페더레이션 메타데이터가 IAM ID 공급자의 메타데이터와 일치하지 않을 때 발생할 수 있어요. 예를 들어 만료된 인증서를 갱신하기 위해 ID 서비스 공급자의 메타데이터 파일이 바뀌었을 수 있어요. ID 서비스 공급자에서 업데이트된 SAML 메타데이터 파일을 내려받은 다음, IAM에 정의한 AWS ID 공급자 엔티티에서 aws iam update-saml-provider 크로스 플랫폼 CLI 명령이나 Update-IAMSAMLProvider PowerShell cmdlet으로 업데이트하세요.
오류: Invalid private key.
개인 키 파일을 올바르게 포맷하지 않았을 때 발생할 수 있어요. 이 오류는 개인 키가 왜 유효하지 않은지에 대한 추가 세부 정보를 제공할 수 있어요.
- Key is encrypted. — 키가 암호화되어 있음.
- Key format is not recognized. Private key file must be a .pem file. — 키 형식을 인식할 수 없음. 개인 키 파일은
.pem파일이어야 함.
AWS Management Console에서 IAM SAML ID 공급자를 만들 때는 암호화를 활성화하려면 ID 공급자에서 개인 키를 내려받아 IAM에 제공해야 해요. 개인 키는 SAML 어설션을 해독할 때 AES-GCM 또는 AES-CBC 암호화 알고리즘을 사용하는 .pem 파일이어야 해요.
오류: Failed to remove private key.
SAML 암호화가 Required로 설정되어 있고, 요청이 IAM SAML 공급자의 유일한 개인 해독 키를 제거하게 될 때 발생할 수 있어요. 개인 키 순환에 대한 자세한 내용은 SAML 암호화 키 관리를 참고하세요.
오류: Failed to remove private key because the Key ID does not match a private key.
개인 키의 keyId 값이 ID 공급자의 개인 키 파일 두 개 중 어느 Key ID와도 일치하지 않을 때 발생할 수 있어요. update-saml-provider 또는 UpdateSAMLProvider API 동작으로 SAML 암호화 개인 키를 제거할 때 RemovePrivateKey의 값은 ID 공급자에 연결된 개인 키의 유효한 Key ID여야 해요.
오류: Failed to assume role: Issuer not present in specified provider (service: AWSOpenIdDiscoveryService; status code: 400; error code: AuthSamlInvalidSamlResponseException)
SAML 응답의 발급자(issuer)가 페더레이션 메타데이터 파일에 선언된 발급자와 일치하지 않을 때 발생할 수 있어요. 이 메타데이터 파일은 IAM에서 ID 공급자를 만들 때 AWS에 업로드된 파일이에요.
오류: Could not parse metadata.
메타데이터 파일을 올바르게 포맷하지 않았을 때 발생할 수 있어요.
AWS Management Console에서 SAML ID 공급자를 만들거나 관리할 때는 ID 공급자의 SAML 메타데이터 문서를 가져와야 해요. 이 메타데이터 파일은 발급자 이름, 만료 정보, IdP에서 받은 SAML 인증 응답(어설션)을 검증하는 데 쓸 수 있는 키를 포함해요. 메타데이터 파일은 BOM(byte order mark) 없는 UTF-8 형식으로 인코딩되어야 해요. BOM을 제거하려면 Notepad++ 같은 텍스트 편집 도구로 파일을 UTF-8로 인코딩하면 돼요.
SAML 메타데이터 문서의 일부로 포함된 X.509 인증서는 최소 1024비트 키 크기를 사용해야 해요. 또한 X.509 인증서에는 반복되는 확장(extension)이 없어야 해요. 확장을 사용할 수는 있지만 인증서에 한 번만 나타나야 해요. X.509 인증서가 두 조건 중 하나라도 충족하지 않으면 IdP 생성이 실패하고 "Unable to parse metadata" 오류를 반환해요.
SAML V2.0 메타데이터 상호운용성 프로필 버전 1.0에 정의된 대로, IAM은 SAML 메타데이터 문서의 X.509 인증서 만료를 평가하거나 조치하지 않아요. 만료된 X.509 인증서가 걱정된다면 인증서 만료 날짜를 모니터링하고 조직의 거버넌스·보안 정책에 따라 인증서를 순환할 것을 권장해요.
오류: Unable to update identity provider. No updates are defined for metadata or encryption assertion.
update-saml-provider CLI나 UpdateSAMLProvider API 동작을 사용하면서 요청 파라미터에 업데이트 값을 제공하지 않을 때 발생할 수 있어요. IAM SAML 공급자 업데이트에 대한 자세한 내용은 IAM에서 SAML ID 공급자 만들기를 참고하세요.
오류: Unable to set assertion encryption mode to Required because no private key is provided.
이전에 개인 해독 키를 업로드하지 않은 상태에서 SAML 암호화를 Required로 설정하면서 요청에 개인 키를 포함하지 않을 때 발생할 수 있어요. create-saml-provider CLI, CreateSAMLProvider API, update-saml-provider CLI, UpdateSAMLProvider API 동작으로 암호화된 SAML 어셈션을 요구할 때는 IAM SAML 공급자에 개인 키가 정의되어 있는지 확인하세요.
오류: Unable to add and remove private keys in the same request. Set a value for only one of the two parameters.
같은 요청에 개인 키 추가와 제거 값이 모두 포함될 때 발생할 수 있어요. update-saml-provider 또는 UpdateSAMLProvider API 동작으로 SAML 암호화 개인 키 파일을 순환할 때는 요청에서 개인 키를 추가하거나 제거하는 것 중 하나만 할 수 있어요. 개인 키를 제거하면서 동시에 추가하면 동작이 실패해요. 개인 키 순환에 대한 자세한 내용은 SAML 암호화 키 관리를 참고하세요.
오류: Specified provider doesn't exist.
SAML 어설션의 공급자 이름이 IAM의 공급자 이름과 일치하지 않을 때 발생할 수 있어요. 공급자 이름을 보는 방법은 IAM에서 SAML ID 공급자 만들기를 참고하세요.
오류: Requested DurationSeconds exceeds MaxSessionDuration set for this role.
AWS CLI나 API에서 역할을 수임할 때 발생할 수 있어요. assume-role-with-saml CLI나 AssumeRoleWithSAML API 동작으로 역할을 수임할 때 DurationSeconds 파라미터 값을 지정할 수 있어요. 900초(15분)부터 역할의 최대 세션 지속 시간 설정까지 값을 지정할 수 있어요. 이 설정보다 높은 값을 지정하면 동작이 실패해요. 예를 들어 세션 지속 시간을 12시간으로 지정했는데 관리자가 최대 세션 지속 시간을 6시간으로 설정했다면 동작이 실패해요. 역할의 최댓값을 보는 방법은 역할의 최대 세션 지속 시간 업데이트를 참고하세요.
오류: Private key limit of 2 is reached.
ID 공급자에 개인 키를 추가하려고 할 때 발생할 수 있어요. 각 ID 공급자에 최대 2개의 개인 키를 저장할 수 있어요. update-saml-provider 또는 UpdateSAMLProvider API 동작으로 세 번째 개인 키를 추가하면 동작이 실패해요. 새 개인 키를 추가하기 전에 만료된 개인 키를 제거하세요. 개인 키 순환에 대한 자세한 내용은 SAML 암호화 키 관리를 참고하세요.
오류: Response does not contain the required audience.
SAML 구성의 audience URL과 ID 공급자 사이에 불일치가 있을 때 발생할 수 있어요. ID 공급자(IdP) 신뢰 당사자 식별자가 SAML 구성에 제공된 audience URL(엔티티 ID)과 정확히 일치하는지 확인하세요.