Troubleshooting SAML
출처: 문서
본문
SAML 문제 해결
OpenSearch Dashboards 인증에 SAML을 사용할 때 발생하는 문제를 해결하려면 다음 문제 해결 단계를 따라요.
목차
- TOC {:toc}
sp.entity_id 확인
대부분의 IdP(Identity Provider)는 여러 애플리케이션에 대해 다양한 인증 방법을 구성할 수 있도록 허용해요. 예를 들어 Okta에서는 이러한 클라이언트를 '애플리케이션'이라고 부르고, Keycloak에서는 '클라이언트'라고 불러요. 각각 고유한 엔티티 ID가 있어요. sp.entity_id가 해당 설정과 일치하도록 구성하세요.
saml:
...
http_authenticator:
type: 'saml'
challenge: true
config:
...
sp:
entity_id: opensearch-dashboards-saml
SAML 어설션 컨슈머 서비스 URL 확인
로그인에 성공하면 IdP는 HTTP POST를 사용하여 OpenSearch Dashboards '어설션 컨슈머 서비스 URL'(ACS)로 SAML 응답을 보내요.
OpenSearch Dashboards Security 플러그인이 제공하는 엔드포인트는 다음과 같아요.
/_opendistro/_security/saml/acs
IdP에서 이 엔드포인트를 올바르게 구성했는지 확인하세요. 일부 IdP는 요청을 보내는 모든 엔드포인트를 허용 목록에 추가하도록 요구하기도 해요. ACS 엔드포인트가 목록에 포함되어 있는지 확인하세요.
OpenSearch Dashboards도 이 엔드포인트를 허용 목록에 추가해야 해요. opensearch_dashboards.yml에 다음 항목이 있는지 확인하세요.
server.xsrf.allowlist: [/_opendistro/_security/saml/acs]
모든 문서 서명
일부 IdP는 기본적으로 SAML 문서에 서명하지 않아요. IdP가 모든 문서에 서명하도록 하세요.
Keycloak

역할 설정
SAML 응답에 사용자 역할을 포함하는 것은 IdP에 따라 달라요. 예를 들어 Keycloak에서는 이 설정이 클라이언트의 Mappers 섹션에 있어요. Okta에서는 그룹 속성 명령문을 설정해야 해요. 이것이 올바르게 구성되었는지, 그리고 SAML 구성의 roles_key가 SAML 응답의 역할 이름과 일치하는지 확인하세요.
saml:
...
http_authenticator:
type: 'saml'
challenge: true
config:
...
roles_key: Role
SAML 응답 검사
IdP의 SAML 응답에 무엇이 포함되어 있고 사용자 이름과 역할이 어디에 있는지 확실하지 않은 경우 log4j2.properties에서 디버그 모드를 활성화할 수 있어요.
logger.token.name = com.amazon.dlic.auth.http.saml.Token
logger.token.level = debug
이 설정은 SAML 응답을 OpenSearch 로그 파일에 출력하여 검사하고 디버깅할 수 있게 해요. 이 로거를 debug로 설정하면 많은 명령문이 생성되므로 프로덕션 환경에서는 사용하지 않는 것이 좋아요.
SAML 응답을 검사하는 또 다른 방법은 OpenSearch Dashboards에 로그인하는 동안 네트워크 트래픽을 모니터링하는 거예요. IdP는 HTTP POST 요청을 사용하여 Base64로 인코딩된 SAML 응답을 다음으로 보내요.
/_opendistro/_security/saml/acs
이 POST 요청의 페이로드를 검사하고 base64decode.org와 같은 도구를 사용하여 디코딩하세요.
역할 매핑 확인
Security 플러그인은 표준 역할 매핑을 사용하여 사용자 또는 백엔드 역할을 하나 이상의 Security 역할에 매핑해요.
사용자 이름의 경우 Security 플러그인은 기본적으로 SAML 응답의 NameID 속성을 사용해요. 일부 IdP에서는 이 속성에 예상되는 사용자 이름이 아닌 내부 사용자 ID가 포함될 수 있어요. SAML 응답의 내용을 확인하여 사용자 이름으로 사용할 요소를 찾고 subject_key를 설정하여 구성하세요.
saml:
...
http_authenticator:
type: 'saml'
challenge: true
config:
...
subject_key: preferred_username
SAML 응답에 올바른 백엔드 역할이 포함되어 있는지 확인하려면 내용을 검사하고 올바른 속성 이름을 설정하세요.
saml:
...
http_authenticator:
type: 'saml'
challenge: true
config:
...
roles_key: Role
JWT 토큰 검사
Security 플러그인은 SAML 응답을 더 가벼운 JSON 웹 토큰(JWT)으로 교환해요. JWT의 사용자 이름과 백엔드 역할은 궁극적으로 Security 플러그인의 역할에 매핑돼요. 매핑에 문제가 있는 경우 SAML 응답 검사와 동일한 설정을 사용하여 토큰 디버그 모드를 활성화할 수 있어요.
이 설정은 JWT를 OpenSearch 로그 파일에 출력하여 JWT.io와 같은 도구를 사용하여 검사하고 디버깅할 수 있게 해요.