CommonCryptoLib(sapcrypto.dll)를 사용하여 SAP BW에 대한 SSO에 Kerberos Single Sign-On 사용

이 문서에서는 CommonCryptoLib(sapcrypto.dll)를 사용하여 Power BI 서비스에서 SSO를 사용하도록 SAP BW 데이터 원본을 구성하는 방법을 설명합니다.

참고 항목

Kerberos SSO를 사용하는 SAP BW 기반 보고서를 새로 고치기 전에 이 문서의 단계와 Kerberos SSO 구성 단계를 모두 완료합니다. CommonCryptoLib를 SNC 라이브러리로 사용하면 SAP BW 애플리케이션 서버와 SAP BW 메시지 서버 모두에 SSO 연결을 사용할 수 있습니다.

참고 항목

동일한 게이트웨이 서버에서 두 라이브러리(sapcrypto 및 gx64krb5)를 구성하는 것은 지원되지 않는 시나리오입니다. 라이브러리가 혼합되도록 동일한 게이트웨이 서버에서 두 라이브러리를 구성하는 것은 권장되지 않습니다. 두 라이브러리를 모두 사용하려면 게이트웨이 서버를 완전히 분리하세요. 예를 들어 서버 A에 대해 gx64krb5를 구성한 다음, 서버 B에 대해 sapcrypto를 구성합니다. gx64krb5는 SAP 및 Microsoft에서 더 이상 지원되지 않으므로 gx64krb5를 사용하는 서버 A의 오류는 지원되지 않습니다.

CommonCryptoLib를 사용하여 SSO를 활성화하도록 SAP BW 구성

참고 항목

온-프레미스 데이터 게이트웨이는 64비트 소프트웨어이므로 BW SSO를 수행하려면 64비트 버전의 CommonCryptoLib(sapcrypto.dll)가 필요합니다. 게이트웨이를 통해 SSO 연결을 시도하기 전에 SAP GUI에서 SAP BW 서버에 대한 SSO 연결을 테스트하려는 경우, SAP GUI가 32비트 소프트웨어이기 때문에 32비트 버전의 CommonCryptoLib도 필요합니다.

  1. BW 서버가 CommonCryptoLib를 사용하여 Kerberos SSO에 대해 올바르게 구성되었는지 확인합니다. 올바르게 구성된 경우, SSO를 사용하여 CommonCryptoLib를 사용하도록 구성된 SAP GUI와 같은 SAP 도구로 직접 또는 SAP BW 메시지 서버를 통해 BW 서버에 액세스할 수 있습니다.

    설치 단계에 대한 자세한 내용은 SAP Single Sign-On: Kerberos/SPNEGO를 사용하여 인증을 참조하세요. BW 서버는 CommonCryptoLib를 SNC 라이브러리로 사용하고 CN=으로 시작하는 SNC 이름(예: CN = BW1)이 있어야 합니다. SNC 이름 요구 사항(특히 snc/identity/as 매개 변수)에 대한 자세한 내용은 SNC Parameters for Kerberos Configuration(Kerberos 구성의 SNC 매개 변수)를 참조하세요.

  2. 아직 수행하지 않은 경우 게이트웨이가 설치된 컴퓨터에 SAP .NET Connector x64 버전을 설치합니다.

    게이트웨이 컴퓨터의 Power BI Desktop에서 BW 서버에 연결을 시도하여 구성 요소가 설치되었는지 확인할 수 있습니다. 2.0 구현을 사용하여 연결할 수 없는 경우 .NET Connector가 GAC에 설치되어 있지 않거나 설치된 적이 없는 것입니다.

  3. 게이트웨이가 설치된 컴퓨터에 SAP SLC(보안 로그인 클라이언트)가 실행되고 있지 않은지 확인합니다.

    SLC는 SSO를 위해 Kerberos를 사용하는 게이트웨이 기능을 방해할 수 있는 방식으로 Kerberos 티켓을 캐시합니다.

  4. SLC가 설치되어 있으면 제거하거나 SAP 보안 로그인 클라이언트를 종료해야 합니다. 시스템 트레이에서 아이콘을 마우스 오른쪽 단추로 클릭하고 로그아웃종료를 선택한 다음, 게이트웨이를 사용하여 SSO 연결을 시도합니다.

    Windows Server 머신에서는 SLC를 사용할 수 없습니다. 자세한 내용은 SAP Note 2780475(s-user가 필요함)를 참조하세요.

    SAP Secure Login Client

  5. SLC를 제거하거나 로그아웃종료를 선택하는 경우, cmd 창을 열고 klist purge를 입력하여 캐시된 Kerberos 티켓을 모두 지운 다음, 게이트웨이를 통해 SSO 연결을 시도합니다.

  6. SAP 실행 패드에서 64비트 CommonCryptoLib(sapcrypto.dll) 버전 8.5.25 이상을 다운로드하고 게이트웨이 머신의 폴더에 복사합니다. sapcrypto.dll을 복사한 디렉터리에 다음 내용이 포함된 sapcrypto.ini라는 파일을 만듭니다.

    ccl/snc/enable_kerberos_in_client_role = 1
    

    .ini 파일에는 CommonCryptoLib가 게이트웨이 시나리오에서 SSO를 사용하도록 설정하는 데 필요한 구성 정보가 포함되어 있습니다.

    참고 항목

    두 파일을 동일한 위치에 저장해야 합니다. 즉, /path/to/sapcrypto/에 sapcrypto.ini와 sapcrypto.dll을 모두 포함해야 합니다.

    게이트웨이 서비스 사용자와 서비스 사용자가 가장하는 AD(Active Directory) 사용자 모두 두 파일에 대한 읽기 및 실행 권한이 필요합니다. 인증된 사용자 그룹에 .ini 및 .dll 파일 권한을 모두 부여하는 것이 좋습니다. 테스트에 사용할 게이트웨이 서비스 사용자와 Active Directory 사용자 둘 다에게 테스트 목적으로 이러한 사용 권한을 명시적으로 부여할 수도 있습니다. 다음 스크린샷에서는 인증된 사용자 그룹에 sapcrypto.dll 대한 읽기 및 실행 권한을 부여했습니다.

    Authenticated users

  7. SSO 연결이 통과할 게이트웨이와 연결된 SAP BW 데이터 원본이 아직 없는 경우 Power BI 서비스의 게이트웨이 관리 페이지에서 추가합니다. 이러한 데이터 원본이 이미 있는 경우 다음과 같이 편집합니다.

    • BW 애플리케이션 서버에 대한 SSO 연결을 만들려면 SAP Business Warehouse데이터 원본 유형으로 선택합니다.
    • BW 메시지 서버에 대한 SSO 연결을 만들려면 Sap Business Warehouse 메시지 서버를 선택합니다.
  8. SNC 라이브러리에서 SNC_LIB 또는 SNC_LIB_64 환경 변수 또는 사용자 지정을 선택합니다.

    • SNC_LIB를 선택하는 경우, 게이트웨이 머신의 SNC_LIB_64 환경 변수 값을 게이트웨이 머신에 있는 sapcrypto.dll 64비트 버전의 절대 경로로 설정해야 합니다. 예를 들어 C:\Users\Test\Desktop\sapcrypto.dll로 설정합니다.

    • 사용자 지정을 선택하는 경우, 게이트웨이 관리 페이지에 표시되는 사용자 지정 SNC 라이브러리 경로 필드에 sapcrypto.dll의 절대 경로를 붙여넣습니다.

  9. SNC 파트너 이름에 BW 서버의 SNC 이름을 입력합니다. 고급 설정에서 DirectQuery 쿼리에 Kerberos를 통한 SSO 사용이 선택되어 있는지 확인합니다. PBI Desktop에서 Windows 인증 연결을 설정하는 것처럼 다른 필드를 채웁니다.

  10. CCL_PROFILE 시스템 환경 변수를 만들고 변수 값을 sapcrypto.ini의 경로로 설정합니다.

    CCL_PROFILE system environment variable

    sapcrypto .dll 및 .ini 파일은 동일한 위치에 있어야 합니다. 위의 예제에서 sapcrypto.ini 및 sapcrypto.dll은 둘 다 바탕 화면에 있습니다.

  11. 게이트웨이 서비스를 다시 시작합니다.

    Restart gateway service

  12. Power BI 보고서 실행

문제 해결

Power BI 서비스에서 보고서를 새로 고칠 수 없는 경우 게이트웨이 추적, CPIC 추적 및 CommonCryptoLib 추적을 사용하여 문제를 진단할 수 있습니다. CPIC 추적 및 CommonCryptoLib는 SAP 제품이므로 Microsoft에서 지원할 수 없습니다.

게이트웨이 로그

  1. 이슈를 재현합니다.

  2. 게이트웨이 앱을 열고 진단 탭에서 로그 내보내기를 선택합니다.

    Export gateway logs

CPIC 추적

  1. CPIC 추적을 사용하도록 설정하려면 두 개의 환경 변수 CPIC_TRACECPIC_TRACE_DIR을 설정합니다.

    첫 번째 변수는 추적 수준을 설정하고, 두 번째 변수는 추적 파일 디렉터리를 설정합니다. 이 디렉터리는 인증된 사용자 그룹의 구성원이 쓸 수 있는 위치여야 합니다.

  2. CPIC_TRACE3으로 설정하고, CPIC_TRACE_DIR을 추적하려는 파일이 기록된 디렉터리로 설정합니다. 예시:

    CPIC tracing

  3. 문제를 재현하고, CPIC_TRACE_DIR에 추적 파일이 있는지 확인합니다.

    CPIC 추적은 sapcrypto.dll 라이브러리 로드 오류와 같은 더 높은 수준의 문제를 진단할 수 있습니다. 예를 들어 다음은 .dll 로드 오류가 발생한 CPIC 추적 파일의 조각입니다.

    [Thr 7228] *** ERROR => DlLoadLib()==DLENOACCESS - LoadLibrary("C:\Users\test\Desktop\sapcrypto.dll")
    Error 5 = "Access is denied." [dlnt.c       255]
    

    이러한 오류가 발생하지만 위의 섹션에 설명된 대로 sapcrypto.dll 및 sapcrypto.ini 대한 읽기 및 실행 권한을 설정한 경우 파일이 포함된 폴더에 대해 동일한 읽기 및 실행 권한을 설정해 봅니다.

    여전히 .dll을 로드할 수 없는 경우 파일에 대한 감사를 사용하도록 설정해 봅니다. Windows 이벤트 뷰어에서 결과 감사 로그를 검사하면 파일 로드에 실패한 이유를 확인하는 데 도움이 될 수 있습니다. 가장한 Active Directory 사용자가 시작한 오류 항목을 찾습니다. 예를 들어 가장한 사용자가 MYDOMAIN\mytestuser인 경우 감사 로그에서 오류는 다음과 같습니다.

    A handle to an object was requested.
    
    Subject:
        Security ID:        MYDOMAIN\mytestuser
        Account Name:       mytestuser
        Account Domain:     MYDOMAIN
        Logon ID:           0xCF23A8
    
    Object:
        Object Server:      Security
        Object Type:        File
        Object Name:        <path information>\sapcrypto.dll
        Handle ID:          0x0
        Resource Attributes:    -
    
    Process Information:
        Process ID:     0x2b4c
        Process Name:   C:\Program Files\On-premises data gateway\Microsoft.Mashup.Container.NetFX45.exe
    
    Access Request Information:
        Transaction ID:     {00000000-0000-0000-0000-000000000000}
        Accesses:           ReadAttributes
    
    Access Reasons:     ReadAttributes: Not granted
    
    Access Mask:        0x80
    Privileges Used for Access Check:   -
    Restricted SID Count:   0
    

CommonCryptoLib 추적

  1. 앞에서 만든 sapcrypto.ini 파일에 다음 줄을 추가하여 CommonCryptoLib 추적을 켭니다.

    ccl/trace/level=5
    ccl/trace/directory=<drive>:\logs\sectrace
    
  2. ccl/trace/directory 옵션을 인증된 사용자 그룹의 구성원이 쓸 수 있는 위치로 변경합니다.

  3. 또는 새 .ini 파일을 만들어 이 동작을 변경합니다. sapcrypto.ini 및 sapcrypto.dll과 동일한 디렉터리에 다음 내용이 포함된 sectrace.ini라는 파일을 만듭니다. DIRECTORY 옵션을 인증된 사용자 그룹의 구성원이 쓸 수 있는 컴퓨터의 위치로 바꿉니다.

    LEVEL = 5
    DIRECTORY = <drive>:\logs\sectrace
    
  4. 이제 문제를 재현하고, DIRECTORY가 가리키는 위치에 추적 파일이 있는지 확인합니다.

  5. 작업을 마쳤으면 CPIC 및 CCL 추적을 끕니다.

    CommonCryptoLib 추적에 대한 자세한 내용은 SAP Note 2491573(SAP s-user 필요)을 참조하세요.

가장 행위

이 섹션에서는 가장 문제의 증상 해결 및 해결 단계에 대해 설명합니다.

증상: GatewayInfo[date].log에서 About to impersonate user DOMAIN\User(IsAuthenticated: True, ImpersonationLevel: Impersonation)과 유사한 항목이 보입니다. ImpersonationLevel 값이 Impersonation과 다른 경우 가장이 제대로 발생하지 않습니다.

해결 방법: 게이트웨이 서비스 계정에 게이트웨이 머신에 대한 로컬 정책 권한 부여 문서에 있는 단계를 따릅니다. 구성을 변경한 후 게이트웨이 서비스를 다시 시작합니다.

유효성 검사: 보고서를 새로 고치거나 만들고 GatewayInfo[date].log를 수집합니다. 최신 GatewayInfo 로그 파일을 열고 About to impersonate user DOMAIN\User(IsAuthenticated: True, ImpersonationLevel: Impersonation) 문자열을 다시 확인하여 ImpersonationLevel 값이 Impersonation과 일치하는지 확인합니다.

위임

위임 문제는 대부분 Power BI 서비스에서 일반 오류로 표시됩니다. 위임이 문제인지를 확인하려면 Wireshark 추적을 수집하고 Kerberos를 필터로 사용하는 것이 유용합니다. Kerberos 오류 참조는 블로그 게시물을 참조하세요. 이 섹션의 나머지 부분에서는 위임 문제의 증상 해결 및 해결 단계를 설명합니다.

증상: Power BI 서비스에서 다음 스크린샷과 비슷한 예기치 않은 오류가 발생합니다. GatewayInfo[date].log에서 clientPipelineId에 대한 Ado 쿼리 실행 시도 중에 예외를 수집하는 [DM.GatewayCore]가 표시되고 가져오기 [0D_NW_CHANN]이 내보내기와 일치하지 않습니다.

Screenshot of unhelpful error

Mashup[date].logGSS-API(maj): 자격 증명이 제공되지 않았습니다. 일반 오류가 표시됩니다.

CPIC 추적(sec-Microsoft.Mashup*.trc)을 살펴보면 다음과 유사한 내용이 표시됩니다.

[Thr 4896] *** ERROR => SncPEstablishContext() failed for target='p:CN=BW5' [sncxxall.c 3638]
[Thr 4896] *** ERROR => SncPEstablishContext()==SNCERR_GSSAPI [sncxxall.c 3604]
[Thr 4896] GSS-API(maj): No credentials were supplied
[Thr 4896] Unable to establish the security context
[Thr 4896] target="p:CN=BW5"
[Thr 4896] <<- SncProcessOutput()==SNCERR_GSSAPI
[Thr 4896]
[Thr 4896] LOCATION CPIC (TCP/IP) on local host HNCL2 with Unicode
[Thr 4896] ERROR GSS-API(maj): No credentials were supplied
[Thr 4896] Unable to establish the security context
[Thr 4896] target="p:CN=BW5"
[Thr 4896] TIME Thu Oct 15 20:49:31 2020
[Thr 4896] RELEASE 721
[Thr 4896] COMPONENT SNC (Secure Network Communication)
[Thr 4896] VERSION 6
[Thr 4896] RC -4
[Thr 4896] MODULE sncxxall.c
[Thr 4896] LINE 3604
[Thr 4896] DETAIL SncPEstablishContext
[Thr 4896] SYSTEM CALL gss_init_sec_context
[Thr 4896] COUNTER 3
[Thr 4896]
[Thr 4896] *** ERROR => STISEND:STISncOut failed 20 [r3cpic.c 9834]
[Thr 4896] STISearchConv: found conv without search

게이트웨이 머신의 sec-Microsoft.Mashup.Con-[].trc sectraces에서 오류가 더 명확해집니다.

[2020.10.15 20:31:38.396000][4][Microsoft.Mashup.Con][Kerberos ][ 3616] AcquireCredentialsHandleA called successfully.
[2020.10.15 20:31:38.396000][2][Microsoft.Mashup.Con][Kerberos ][ 3616] InitializeSecurityContextA returned -2146893053 (0x80090303). Preparation for kerberos failed!
[2020.10.15 20:31:38.396000][2][Microsoft.Mashup.Con][Kerberos ][ 3616] Getting kerberos ticket for 'SAP/BW5' failed (user name is affonso_v@HANABQ.COM)
[2020.10.15 20:31:38.396000][2][Microsoft.Mashup.Con][Kerberos ][ 3616] Error for requested algorithm 18: 0/C000018B The security database on the server does not have a computer account for this workstation trust relationship.
[2020.10.15 20:31:38.396000][2][Microsoft.Mashup.Con][Kerberos ][ 3616] Error for requested algorithm 17: 0/C000018B The security database on the server does not have a computer account for this workstation trust relationship.
[2020.10.15 20:31:38.396000][2][Microsoft.Mashup.Con][Kerberos ][ 3616] Error for requested algorithm 23: 0/C000018B The security database on the server does not have a computer account for this workstation trust relationship.
[2020.10.15 20:31:38.396000][2][Microsoft.Mashup.Con][Kerberos ][ 3616] Error for requested algorithm 3: 0/C000018B The security database on the server does not have a computer account for this workstation trust relationship.

WireShark 추적을 보면 이 문제를 확인할 수도 있습니다.

Screenshot of tracing program showing an error

참고 항목

다른 오류 KRB5KDC_ERR_PREAUTH_REQUIRED는 무시해도 됩니다.

해결 방법: SPN SAP/BW5를 서비스 계정에 추가해야 합니다. 자세한 정보 및 단계는 SAP 설명서에서 확인할 수 있습니다.

WireShark 추적에 매니페스트되는 것과는 다른 다음과 같은 오류가 나타날 수 있습니다. KRB5KDC_ERR_BADOPTION:

Screenshot of WireShark program showing a different error

이러한 오류는 SPN SAP/BW5가 있지만, 게이트웨이 서비스 계정의 위임 탭에 있는 이 계정이 위임된 자격 증명을 사용할 수 있는 서비스에는 없다는 것을 의미합니다. 이 오류를 해결하려면 표준 Kerberos 제한 위임에 대한 게이트웨이 서비스 계정 구성에서 설명하는 단계를 따라야 합니다.

유효성 검사: 적절한 구성으로 게이트웨이에서 일반적인 오류 또는 예기치 않은 오류가 표시되는 것을 방지합니다. 그래도 오류가 표시되면 게이트웨이 자체의 구성 또는 BW 서버 구성을 확인합니다.

자격 증명 오류

이 섹션에서는 자격 증명 오류 문제의 증상 해결 및 해결 단계를 설명합니다. 위임에 대한 이전 섹션에서 설명했듯이 Power BI 서비스에서 일반 오류가 표시될 수도 있습니다.

데이터 원본(SAP BW)에 표시되는 증상에 따라 다른 해결 방법이 있으며 두 가지 모두를 살펴보겠습니다.

증상 1: BW 서버의 sectraces sec-disp+work[].trc 에 다음과 유사한 추적이 표시됩니다.

[2020.05.26 14:21:28.668325][4][disp+work ][SAPCRYPTOLIB][435584] { gss_display_name [2020.05.26 14:21:28.668338][4][disp+work ][GSS ][435584] gss_display_name output buffer (41 bytes) [2020.05.26 14:21:28.668338][4][disp+work ][GSS ][435584] CN=DAVID@XS.CONTOSO.COM@CONTOSO.COM

해결 방법: 필요한 경우 게이트웨이 머신에 사용자 매핑 구성 매개 변수를 설정하는 구성 단계를 완료합니다. Microsoft Entra 커넥트 이미 구성된 경우에도 이러한 단계를 완료해야 합니다.

유효성 검사: Power BI 서비스에서 성공적으로 보고서를 로드할 수 있습니다. 실패할 경우 증상 2의 단계를 참조하세요.

증상 2: BW 서버의 sectraces sec-disp+work[].trc에서 다음과 유사한 추적이 표시됩니다.

[2020.10.19 23:10:15.469000][4][disp+work.EXE ][SAPCRYPTOLIB][ 4460] { gss_display_name
[2020.10.19 23:10:15.469000][4][disp+work.EXE ][GSS ][ 4460] gss_display_name output buffer (23 bytes)
[2020.10.19 23:10:15.469000][4][disp+work.EXE ][GSS ][ 4460] CN=DAVID@CONTOSO.COM

해결 방법: 사용자의 Kerberos 외부 ID가 sectraces에 표시되는 것과 일치하는지 확인합니다.

  1. SAP 로그온을 엽니다.
  2. SU01 트랜잭션을 사용합니다.
  3. 사용자를 편집합니다.
  4. SNC 탭으로 이동하여 SNC 이름이 로그에 표시된 이름과 일치하는지 확인합니다.

유효성 검사: 정상적으로 완료되면 Power BI 서비스에서 보고서를 만들고 새로 고칠 수 있습니다.

온-프레미스 데이터 게이트웨이 및 DirectQuery에 대한 자세한 내용은 다음 리소스를 참조하세요.