SAP Netweaver 에서는 ICM (Internet Communication Manager) 을 통해서 SAP 시스템과 외부 시스템 간의 통신을 관리하고 요청을 처리하며, 모니터링할 수 있다.
대부분의 커뮤니케이션은 인터넷 표준 프로토콜(HTTP, HTTPS, SMTP 등) 에 따라 통신하며, HTTP 통신의 경우, ICM 을 거쳐 호출된 ICF 프레임 워크로 전달되며, 해당 ICF 의 Handler 처리를 통해 요청을 어플리케이션(ABAP Program) 으로 전달한다.
따라서 근본 원인 분석(Root Cause Analysis)을 위해서는 ICM, ICF 추적 로그를 모두 분석해야 하며, Tcode SECTRACE 를 사용해 HTTP 통신의 ICM, ICF 추적 로그를 같이 분석할 수 있다.
여기서는 SSO(Single Sign On) 로그인 관점의 HTTP 통신에 대하여, 로그를 분석하고 문제를 추적하는 방법에 대해서 기록한다.
대상 시스템이 SAP_BASIS 750 이상이라면, 아래 Notes 를 구현하여 SEC_TRACE_ANALYZER_V2 를 사용하는것을 권장한다.
아래 글도 V2 를 기준으로 작성한다.
SSO(SAML2 기반) 를 통한 SAP WEBGUI 접속
ICF 서비스 상에, 필요한 서비스들은 모두 활성화가 되어있고, HTTP 접속과 관련된 파라미터들도 활성화가 되어있다고 가정한다.
아래 ICF 서비스는 핵심적인 부분만 기록했으며, 운영환경에 따라 추가로 ICF 서비스 활성화가 필요할 수 있다.
HTTP 세션 접속을 위한 파라미터 설정 확인
=> Tcode : SICF_SESSIONS
ICF 서비스
=> Tcode : SICF
SAML2 기반 SSO 일 경우, Tcode SECTRACE 외에도 ICF 서비스
/sap/bc/webdynpro/sap/sec_diag_tool
를 사용해서도 추적/디버깅이 가능하다.
- SAP Notes 2960670 - How to collect SAML trace with the Security Diagnostic Tool for ABAP system
Tcode : SECTRACE (Report SEC_TRACE_ANALYZER_V2)
-> Trace Settings
-> Trace for HTTP based Accesses 선택
-> Trace Collection Criteria
-> Profile : Custom 선택
-> ICF Service / Path : /sap/public/bc/sec/saml2
-> Timeout : Default 값 00:10:00
사용
-> Level : Default 값 2
사용 (더 자세한 흐름을 확인하려면 3
)
-> Activate Trace
ICF Service / Path 에서 상위 노드를 선택하면, 해당 노드의 하위 노드들에 대해서 모두 추적이 활성화 된다.
즉, /sap/public/bc/sec 노드를 선택하면, sec 하위 모든 노드(또는 서비스)에 대해서 추적된다.
추적 활성화를 완료했으니, 시나리오에 따라 로그를 수집하도록 한다.
사전 정의된 시나리오에 따라, SSO(SAML2) 를 통해 SAP WEBGUI 를 접속한다.
추적 시나리오는 항상 정확하게 보고 싶은 부분에 대해서만 수행해야 한다.
로그의 양이 많아지면 분석의 피로도가 올라가고, 혼동을 줄 수 있기 때문이다.
따라서, 길어도 1~2분 사이에는 추적 시나리오가 종료되는것이 좋다.
만약 추적 레벨이 1(Error) 이라면, 오류가 발생하는 시나리오 전체 흐름을 흘려보는것도 괜찮다.
추적 시나리오 수행이 끝나면, Deactivate Trace
버튼을 클릭하여 추적을 비활성화 한다.
추적이 비활성화 되면 자동으로 추적 평가 조건(Trace Evaluation Criteria) 에 로그 분석 시작 시간(Not Before) 과 종료 시간(Not After) 이 입력된다.
따라서, 바로 Show Trace
버튼을 클릭하여 수집된 추적 로그를 확인하면 된다.
Show Trace 로 추적으로 기록된 로그를 분석할 수 있으며, error, failed, exception 등의 키워드 검색을 통해, 문제가 있는 부분을 확인할 수 있다.
또한 추적로그 헤더를 통해서도, 간략하게 어떤 서비스의 로그 인지도 확인할 수 있다.
만약 이슈가 있음에도 Trace 가 없다면, ICF Service / Path 를 상위 노드로 옮겨서 재추적을 해보면 된다.
본 글의 시나리오에서는 SAML2 기반 SSO 접속이므로, 접속 흐름을 간략하게 정리하면 다음과 같다. (아래 흐름은 SSO 구성에 따라 차이가 있으니 참고만 하길 바란다.)
SAP 시스템은 Service Providers(동시에 Local Providers) 이며, IdP 는 별도의 인증 시스템
...
### 인증 절차 수행 - Method Call
### Logon Type H - HTTP Logon
H HTTP> System_Call_Http: H (syrepid: CL_HTTP_SERVER_NET============CP )
H HTTP> HTTP Application> [Prop]; Method Name: CL_HTTP_SERVER_NET->AUTHENTICATION
...
### Logon Order (로그온 절차) - Standard, 여기서는 AUTH_SAML
H HTTP> HTTP Application> [Prop]; logon order: AUTH_FIELD,AUTH_CERT,AUTH_SSO,
AUTH_ASSERT,AUTH_BASIC,AUTH_SAP,AUTH_SAMLBEARER,AUTH_SPNEGO,AUTH_SAML,AUTH_SERVI
...
### 첫 SAP 접속이므로, security_session_cookie 없음(SPACE)
HTTP> HTTP Application> [Info]; Value of security_session_cookie is: SPACE
...
◾ SAP 시스템과 IdP 는 인증서 등록을 통한 신뢰 관계 상태
...
### SAML 인증 방식 시작 및 Configuration 확인
N SAML-Trace: Starting SAML authentication for access to path: ~
N SAML-Trace: Received configuration data:
### 설정된 IdP 로 인증 위임 (SAMLResponse)
N SAML20 SP (client 000): Binding: POST, Message statement: SAMLResponse
N SAML20 SP (client 000): CL_SAML20_BINDING: Binding created: Type=POST, Message statement=SAMLResponse
N N SAML20 SP (client 000): Original request method of current HTTP request is POST
N SAML20 SP (client 000): Start processing SAMLResponse
...
SAP 에서는 리턴된 SAML 인증결과(SAML_RESPONES, SAML_ASSERTION) 를 받아, STRUST 인증서(신뢰 관계) 로 결과를 복호화하여 확인한다.
...
### SSO ACS End-point 로 결과 수신
N SAML20 SP (client 000): Incoming Response
N SAML20 Binding: POST
N SAML20 IdP Name: <IdP System>
N SAML20 Status Code: ~~~"
...
### 수신된 결과에서 Federation mode 에 따라, 사용자 매핑
N SAML20 SP (client 000): Default ACS endpoint: ~~~
N SAML20 SP (client 000): Federation mode - 'Persistent users', user ID source - subject name ID, value - XXX
N SAML20 SP (client 000): Mapping mode - 'Name', user ID source - XXX, mapped user - XXX
N SAML20 SP (client 000): End processing SAMLResponse
N SAML20 SP (client 000): Started authentication for access to path: ~~~
N SAML20 SP (client 000): NameID XXX (Format Name) mapped to user ID XXX
N DyISigni: client=000, user=XXX , lang=3, access=H, auth=2
N usrexist: effective authentification method: SAML 2.0
...
SAP Notes 2181120 - Tracing and troubleshooting security events in http communication with the AS ABAP
SAP Notes 3569985 - Usage of report SEC_TRACE_ANALYZER_V2
SAP Notes 3572783 - Implementation of SEC_TRACE_ANALYZER_V2 for SAP_BASIS 750 to SAP_BASIS 758
SAP Notes 320991 - Error codes during logon (list)
SAP Notes 1257108 - Collective Note: Analyzing issues with Single Sign On (SSO)
SAP Notes 701205 - Single Sign-On using SAP Logon Tickets