Uso del inicio de sesión único de Kerberos para el SSO en SAP BW con CommonCryptoLib (sapcrypto.dll)

En este artículo se describe cómo configurar el origen de datos de SAP BW para habilitar el inicio de sesión único del servicio Power BI mediante CommonCryptoLib (sapcrypto.dll).

Nota

Antes de intentar actualizar un informe basado en SAP BW que usa el inicio de sesión único de Kerberos, complete los dos pasos de este artículo y los de Configuración del inicio de sesión único de Kerberos. El uso de CommonCryptoLib como la biblioteca de SNC permite establecer conexiones SSO tanto a los servidores de aplicaciones de SAP BW como a los servidores de mensajería de SAP BW.

Nota

La configuración de ambas bibliotecas (sapcrypto y gx64krb5) en el mismo servidor de puerta de enlace es un escenario no compatible. No se recomienda configurar ambas bibliotecas en el mismo servidor de puerta de enlace, ya que provocará una mezcla de bibliotecas. Si quiere usar ambas bibliotecas, separe totalmente el servidor de puerta de enlace. Por ejemplo, configure gx64krb5 para el servidor A y, después, sapcrypto para el servidor B. Recuerde que no se admite ningún error en el servidor A que use gx64krb5, ya que SAP y Microsoft ya no admiten esta biblioteca.

Configuración de SAP BW para habilitar el SSO mediante CommonCryptoLib

Nota

La puerta de enlace de datos local es software de 64 bits, por lo que se requiere la versión de 64 bits de CommonCryptoLib (sapcrypto.dll) para realizar el SSO de BW. Si planea probar la conexión de inicio de sesión único al servidor de SAP BW en la interfaz gráfica de usuario de SAP antes de intentar una conexión de inicio de sesión único mediante la puerta de enlace (procedimiento recomendado), también necesitará la versión de 32 bits de CommonCryptoLib, ya que la interfaz gráfica de usuario de SAP es un software de 32 bits.

  1. Asegúrese de que el servidor de BW está configurado correctamente para el SSO de Kerberos con CommonCryptoLib. Si es así, puede usar el inicio de sesión único para acceder al servidor de BW (ya sea de manera directa o mediante un servidor de mensajería de SAP BW) con una herramienta de SAP como la interfaz gráfica de usuario que se configuró para usar CommonCryptoLib.

    Para obtener más información sobre los pasos de configuración, vea Inicio de sesión único de SAP: autenticación con Kerberos/SPNEGO. El servidor de BW debe usar CommonCryptoLib como biblioteca de SNC y tener un nombre de SNC que empiece por CN=, como CN=BW1. Para más información sobre los requisitos de nombre de SNC (en particular el parámetro snc/identity/as), consulte los Parámetros de SNC para la configuración de Kerberos.

  2. Si aún no lo ha hecho, instale la versión x64 del conector .NET de SAP en el equipo en el que se ha instalado la puerta de enlace.

    Puede comprobar si el componente se ha instalado intentando conectarse al servidor de BW en Power BI Desktop desde el equipo de puerta de enlace. Si no se puede conectar con la implementación 2.0, el conector .NET no está instalado o no se ha instalado en la caché global de ensamblados.

  3. Asegúrese de que Secure Login Client (SLC) de SAP no se esté ejecutando en el equipo en el que está instalada la puerta de enlace.

    SLC almacena en caché los vales de Kerberos de forma que puede interferir con la posibilidad de que la puerta de enlace use Kerberos para SSO.

  4. Si SLC está instalado, desinstálelo o asegúrese de salir de Secure Login Client de SAP. Haga clic con el botón derecho en el icono de la bandeja del sistema y seleccione Log out (Cerrar sesión) y Salir antes de intentar una conexión de inicio de sesión único mediante la puerta de enlace.

    No se admite el uso de SLC en máquinas con Windows Server. Para obtener más información, consulte la nota 2780475 de SAP (se requiere s-user).

    SAP Secure Login Client

  5. Si desinstala SLC o selecciona Log Out (Cerrar sesión) y Salir, abra una ventana de comandos y escriba klist purge para borrar cualquier vale de Kerberos almacenado en caché antes de intentar una conexión de inicio de sesión único mediante la puerta de enlace.

  6. Descargue la versión 8.5.25 o posterior de CommonCryptoLib (sapcrypto.dll) de 64 bits desde SAP Launchpad y cópiela en una carpeta de la máquina de la puerta de enlace. En el mismo directorio donde copió sapcrypto.dll, cree un archivo denominado sapcrypto.ini con el siguiente contenido:

    ccl/snc/enable_kerberos_in_client_role = 1
    

    El archivo .ini contiene información de configuración requerida por CommonCryptoLib para habilitar el inicio de sesión único en el escenario de puerta de enlace.

    Nota

    Estos archivos se deben almacenar en la misma ubicación; en otras palabras, /path/to/sapcrypto/ debe contener tanto sapcrypto.ini como sapcrypto.dll.

    Tanto el usuario de servicio de la puerta de enlace como el usuario de Active Directory (AD) que el primero va a suplantar necesitan permisos de lectura y ejecución para ambos archivos. Se recomienda conceder permisos para los archivos .ini y .dll al grupo de usuarios autenticados. A efectos de prueba, también puede conceder estos permisos explícitamente al usuario de servicio de la puerta de enlace y al usuario de Active Directory que usará para hacer la prueba. En la captura de pantalla siguiente se ha concedido al grupo de usuarios autenticados permisos de lectura y ejecución en sapcrypto.dll:

    Authenticated users

  7. Si todavía no tiene un origen de datos de SAP BW asociado a la puerta de enlace a través de la que quiere que se transmita la conexión de SSO, agregue uno en la página Administrar puertas de enlace del servicio Power BI. Si ya tiene este tipo de origen de datos, edítelo:

    • Elija SAP Business Warehouse como el tipo de origen de datos si quiere crear una conexión SSO a un servidor de aplicaciones de BW.
    • Seleccione Servidor de mensajería de SAP Business Warehouse si quiere crear una conexión SSO a un servidor de mensajería de BW.
  8. Para Biblioteca de SNC, seleccione la variable de entorno SNC_LIB o SNC_LIB_64, o Personalizada.

    • Si selecciona SNC_LIB, debe establecer el valor de la variable de entorno SNC_LIB_64 en la máquina de la puerta de enlace en la ruta de acceso absoluta de la copia de sapcrypto.dll de 64 bits de la máquina de la puerta de enlace, por ejemplo, C:\Users\Test\Desktop\sapcrypto.dll.

    • Si elige Personalizada, pegue la ruta de acceso absoluta a sapcrypto.dll en el campo Ruta de biblioteca SNC personalizada que aparece en la página Administrar puertas de enlace.

  9. En Nombre de asociado de SNC, escriba el nombre de SNC del servidor de BW. En Configuración avanzada, asegúrese de que la opción Usar SSO mediante Kerberos para las consultas de DirectQuery esté activada. Rellene los demás campos como si estuviera estableciendo una conexión de autenticación de Windows desde PBI Desktop.

  10. Cree una variable de entorno del sistema CCL_PROFILE y establezca su valor en la ruta de acceso a sapcrypto.ini.

    CCL_PROFILE system environment variable

    Los archivos .dll e .ini de sapcrypto deben estar en la misma ubicación. En el ejemplo anterior, sapcrypto.ini y sapcrypto.dll se encuentran en el escritorio.

  11. Reinicie el servicio de puerta de enlace.

    Restart gateway service

  12. Ejecución de un informe de Power BI

Solución de problemas

Si no puede actualizar el informe en el servicio Power BI, puede usar el seguimiento de puerta de enlace, el seguimiento de CPIC y de CommonCryptoLib para diagnosticar el problema. Como el seguimiento de CPIC y CommonCryptoLib son productos de SAP, Microsoft no puede ofrecer compatibilidad directa con ellos.

Registros de puerta de enlace

  1. Reproduzca el problema.

  2. Abra la aplicación de puerta de enlace y seleccione Exportar registros de la pestaña Diagnóstico.

    Export gateway logs

Seguimiento de CPIC

  1. Para habilitar el seguimiento de CPIC, establezca dos variables de entorno: CPIC_TRACE y CPIC_TRACE_DIR.

    La primera variable establece el nivel de seguimiento y la segunda, el directorio del archivo de seguimiento. El directorio debe ser una ubicación en la que puedan escribir los miembros del grupo de usuarios autenticados.

  2. Establezca CPIC_TRACE en 3 y CPIC_TRACE_DIR en el directorio en el que quiere que se escriban los archivos de seguimiento. Por ejemplo:

    CPIC tracing

  3. Reproduzca el problema y asegúrese de que CPIC_TRACE_DIR contiene archivos de seguimiento.

    El seguimiento de CPIC puede diagnosticar problemas de nivel superior, como un error al cargar la biblioteca sapcrypto.dll. Por ejemplo, el siguiente es un fragmento de un archivo de seguimiento de CPIC donde se ha producido un error de carga de .dll:

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

    Si se produce un error de este estilo, pero estableció los permisos de lectura y ejecución en sapcrypto.dll y sapcrypto.ini tal como se describe en la sección anterior, intente establecer los mismos permisos de lectura y escritura en la carpeta que contiene los archivos.

    Si sigue sin poder cargar el .dll, intente activar la auditoría del archivo. Examinar los registros de auditoría resultantes en el Visor de eventos de Windows puede ayudarlo a determinar por qué se produce el error de carga. Busque una entrada de error iniciada por el usuario de Active Directory suplantado. Por ejemplo, para el usuario suplantado MYDOMAIN\mytestuser, un error del registro de auditoría tendría un aspecto similar al siguiente:

    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
    

Seguimiento de CommonCryptoLib

  1. Active el seguimiento de CommonCryptoLib agregando estas líneas al archivo sapcrypto.ini que creó anteriormente:

    ccl/trace/level=5
    ccl/trace/directory=<drive>:\logs\sectrace
    
  2. Cambie la opción ccl/trace/directory a una ubicación donde los miembros del grupo de usuarios autenticados puedan escribir.

  3. También puede crear otro archivo .ini para cambiar este comportamiento. En el mismo directorio en que están sapcrypto.ini y sapcrypto.dll, cree un archivo denominado sectrace.ini con el contenido siguiente. Reemplace la opción DIRECTORY por una ubicación en la máquina en la que los miembros del grupo de usuarios autenticados puedan escribir:

    LEVEL = 5
    DIRECTORY = <drive>:\logs\sectrace
    
  4. Reproduzca el problema y compruebe que la ubicación a la que apunta DIRECTORY contiene archivos de seguimiento.

  5. Cuando haya terminado, desactive el seguimiento de CPIC y CCL.

    Para más información sobre el seguimiento de CommonCryptoLib, consulte la nota 2491573 de SAP (es necesario ser usuario-s de SAP).

Suplantación

En esta sección se describen los síntomas y los pasos de resolución en la solución de problemas para incidencias de suplantación.

Síntoma: al examinar el archivo GatewayInfo[date].log, se encuentra una entrada similar a la siguiente: A punto de suplantar al usuario DOMAIN\User (IsAuthenticated: True, ImpersonationLevel: Impersonation) . Si el valor de ImpersonationLevel es diferente de Impersonation, la suplantación no se está produciendo correctamente.

Resolución: siga los pasos descritos en el artículo Concesión de derechos de directiva local a la cuenta de servicio de la puerta de enlace en la máquina de la puerta de enlace. Reinicie el servicio de puerta de enlace después de cambiar la configuración.

Validación: actualice o cree el informe y recopile el archivo GatewayInfo[date].log. Abra el archivo de registro GatewayInfo más reciente y vuelva a comprobar la cadena siguiente: A punto de suplantar al usuario DOMAIN\User (IsAuthenticated: True, ImpersonationLevel: Impersonation) para asegurarse de que el valor de ImpersonationLevel coincide con Impersonation.

Delegación

Los problemas de delegación suelen aparecer en el servicio Power BI como errores genéricos. Para determinar si la delegación es la incidencia, es útil recopilar los seguimientos de Wireshark y usar Kerberos como filtro. A modo de referencia de los errores de Kerberos, consulte la entrada de blog. En el resto de esta sección se describen los síntomas y los pasos de resolución en la solución de problemas para incidencias de delegación.

Síntoma: en el servicio Power BI puede encontrar un error inesperado, similar a la captura de pantalla siguiente. En el archivo GatewayInfo[date].log verá que [DM.GatewayCore] ingiere una excepción durante el intento de ejecución de la consulta Ado para clientPipelineId y que la importación [0D_NW_CHANN] no coincide con ninguna exportación.

Screenshot of unhelpful error

En el archivo Mashup[date].log, verá el error genérico GSS-API(maj): No credentials were supplied (GSS-API(maj): No se han proporcionado credenciales).

Si observa los seguimientos de CPIC (sec.Microsoft.Mashup*.trc), verá algo similar a lo siguiente:

[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

El error se vuelve más claro en los sectraces de la máquina de puerta de enlace sec-Microsoft.Mashup.Con-[].trc:

[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.

También puede ver el problema si examina los seguimientos de WireShark.

Screenshot of tracing program showing an error

Nota:

El resto de errores KRB5KDC_ERR_PREAUTH_REQUIRED pueden omitirse de forma segura.

Resolución: debe agregar un elemento SPN SAP/BW5 a una cuenta de servicio. La información detallada y los pasos que se deben seguir están disponibles en la documentación de SAP.

Puede encontrarse con un error similar, pero no idéntico, que se manifiesta en los seguimientos de WireShark como el siguiente error KRB5KDC_ERR_BADOPTION:

Screenshot of WireShark program showing a different error

Este error indica que el elemento SPN SAP/BW5 no se ha podido encontrar, pero que no está en los Servicios en los que esta cuenta puede presentar credenciales delegadas en la pestaña Delegación de la cuenta de servicio de la puerta de enlace. Para corregir esta incidencia, siga los pasos que se describen en el artículo Configuración de la cuenta de servicio de la puerta de enlace para la delegación restringida de Kerberos estándar.

Validación: la configuración adecuada impedirá que la puerta de enlace presente errores genéricos o no previstos. Si sigue teniendo errores, compruebe la configuración de la propia puerta de enlace o la configuración del servidor BW.

Errores de credenciales

En esta sección se describen los síntomas y los pasos de resolución en la solución de problemas para incidencias de error de credenciales. También puede ver errores genéricos del servicio Power BI, tal como se describe en la sección anterior sobre la delegación.

Hay diferentes resoluciones, según los síntomas que se ven en el origen de datos (SAP BW), por lo que revisaremos ambos.

Síntoma 1: en sectraces sec-disp+work[].trc desde el servidor BW, verá seguimientos similares a los siguientes:

[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

Resolución: complete los pasos de configuración para establecer los parámetros de configuración de asignación de usuarios en la máquina de puerta de enlace si es necesario. Deberá completar esos pasos incluso si ya tiene configurado Microsoft Entra Connect.

Validación: podrá cargar correctamente el informe en el servicio Power BI. Si no se funciona correctamente, vea los pasos del síntoma 2.

Síntoma 2: en sectraces sec-disp+work[].trc desde el servidor BW, verá seguimientos similares a los siguientes:

[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

Resolución: compruebe que el id. externo de Kerberos para el usuario coincide con lo que muestran los sectraces.

  1. Abra Inicio de sesión de SAP.
  2. Use la transacción SU01.
  3. Edite el usuario.
  4. Vaya a la pestaña SNC y compruebe que el nombre de SNC coincide con lo que se muestra en los registros.

Validación: cuando se complete correctamente, podrá crear y actualizar informes en el servicio Power BI.

Para más información sobre la puerta de enlace de datos local y DirectQuery, consulte los recursos siguientes: