Utiliser l’authentification unique Kerberos pour l’authentification unique pour SAP BW à l’aide de CommonCryptoLib (sapcrypto.dll)

Cet article explique comment configurer votre source de données SAP BW pour activer l’authentification unique à partir du service Power BI à l’aide de CommonCryptoLib (sapcrypto.dll).

Notes

Suivez les étapes décrites dans cet article en plus de celles de l’article Configurer l’authentification unique Kerberos avant d’essayer d’actualiser un rapport basé sur SAP BW qui utilise l’authentification unique Kerberos. L’utilisation de CommonCryptoLib comme bibliothèque SNC active les connexions par authentification unique à la fois aux serveurs d’applications SAP BW et aux serveurs de messages SAP BW.

Notes

La configuration des deux bibliothèques (sapcrypto et gx64krb5) sur le même serveur passerelle est un scénario non pris en charge. Il n’est pas recommandé de configurer les deux bibliothèques sur le même serveur de passerelle, car cela conduirait à un mélange de bibliothèques. Si vous souhaitez utiliser les deux bibliothèques, veuillez séparer complètement le serveur de la passerelle. Par exemple, configurez gx64krb5 pour le serveur A puis sapcrypto pour le serveur B. N’oubliez pas que toute panne sur le serveur A qui utilise gx64krb5 n’est pas prise en charge, car gx64krb5 n’est plus pris en charge par SAP et Microsoft.

Configurer SAP BW pour activer l’authentification unique à l’aide de CommonCryptoLib

Notes

La passerelle de données locale est une application 64 bits et requiert donc la version 64 bits de CommonCryptoLib (sapcrypto.dll) pour effectuer l’authentification unique BW. Si vous prévoyez de tester la connexion par authentification unique à votre serveur SAP BW dans l’interface graphique de SAP avant de tenter une connexion par authentification unique via la passerelle (méthode recommandée), vous aurez également besoin de la version 32 bits de CommonCryptoLib, car l’interface graphique de SAP est une application 32 bits.

  1. Vérifiez que votre serveur BW est correctement configuré pour l’authentification unique Kerberos avec CommonCryptoLib. Si c’est le cas, vous pouvez utiliser l’authentification unique pour accéder à votre serveur BW (directement ou via un serveur de messages SAP BW) avec un outil SAP, comme l’interface graphique SAP, qui a été configuré pour utiliser CommonCryptoLib.

    Pour plus d’informations sur les étapes de configuration, consultez Authentification unique SAP : s’authentifier avec Kerberos/SPNEGO. Votre serveur BW doit utiliser CommonCryptoLib comme bibliothèque SNC et avoir un nom SNC commençant par CN=, comme CN=BW1. Pour plus d’informations sur les conventions de nommage des noms SNC (en particulier le paramètre snc/identity/as), consultez Paramètres SNC pour la configuration de Kerberos.

  2. Si vous ne l’avez pas déjà fait, installez la version 64 bits du connecteur SAP .NET sur l’ordinateur sur lequel la passerelle a été installée.

    Vous pouvez vérifier si le composant a été installé en tentant de vous connecter à votre serveur BW dans Power BI Desktop à partir de l’ordinateur passerelle. Si vous ne réussissez pas à vous connecter à l’aide de l’implémentation 2.0, cela signifie que le connecteur .NET n’est pas installé ou qu’il n’a pas été installé dans le GAC.

  3. Assurez-vous que le client de connexion sécurisée SAP n’est pas en cours d’exécution sur l’ordinateur sur lequel la passerelle est installée.

    SLC met en cache les tickets Kerberos d’une façon pouvant interférer avec la capacité de la passerelle à utiliser Kerberos pour l’authentification unique.

  4. Si le client de connexion sécurisée est installé, désinstallez-le ou veillez à quitter le client de connexion sécurisée SAP. Cliquez avec le bouton droit sur l’icône de la barre d’état système, puis sélectionnez Se déconnecter et Quitter avant de tenter une connexion SSO à l’aide de la passerelle.

    Le client de connexion sécurisée n’est pas pris en charge sur les machines Windows Server. Pour plus d’informations, consultez SAP Note 2780475 (utilisateur-s requis).

    SAP Secure Login Client

  5. Si vous désinstallez le client de connexion sécurisée ou sélectionnez Se déconnecter et Quitter, ouvrez une fenêtre de commande et entrez klist purge pour effacer tous les tickets Kerberos mis en cache avant de tenter une connexion SSO via la passerelle.

  6. Téléchargez CommonCryptoLib (sapcrypto.dll) 64 bits (version 8.5.25 ou ultérieure) à partir de SAP Launchpad, puis copiez-le dans un dossier sur votre machine passerelle. Dans le même répertoire que celui où vous avez copié sapcrypto.dll, créez un fichier nommé sapcrypto.ini, avec le contenu suivant :

    ccl/snc/enable_kerberos_in_client_role = 1
    

    Le fichier .ini contient les informations de configuration requises par CommonCryptoLib pour activer l’authentification unique dans le scénario de passerelle.

    Notes

    Ces fichiers doivent être stockés au même emplacement. En d’autres termes, /path/to/sapcrypto/ doit contenir à la fois sapcrypto.ini et sapcrypto.dll.

    L’utilisateur du service de passerelle et l’utilisateur Active Directory (AD) dont l’utilisateur du service emprunte l’identité ont besoin des autorisations de lecture et d’exécution pour les deux fichiers. Nous vous recommandons d’accorder des autorisations aux fichiers .ini et .dll au groupe des utilisateurs authentifiés. À des fins de test, vous pouvez également accorder explicitement ces autorisations à l’utilisateur du service de passerelle et à l’utilisateur Active Directory que vous utilisez pour les tests. Dans la capture d’écran suivante, nous avons accordé au groupe Utilisateurs authentifiés les autorisations Lire et exécuter pour sapcrypto.dll :

    Authenticated users

  7. Si vous n’avez pas de source de données SAP BW associée à la passerelle par le biais de laquelle vous souhaitez établir une connexion d’authentification unique, ajoutez-en une dans la page Gérer les passerelles du service Power BI. Si vous en avez déjà une, modifiez-la :

    • Choisissez SAP Business Warehouse comme Type de source de données si vous souhaitez créer une connexion par authentification unique à un serveur d’applications BW.
    • Sélectionnez Serveur de messages SAP Business Warehouse si vous souhaitez créer une connexion par authentification unique à un serveur de messagerie BW.
  8. Pour Bibliothèque SNC, sélectionnez la variable d’environnement SNC_LIB ou SNC_LIB_64, ou une variable personnalisée.

    • Si vous sélectionnez SNC_LIB, vous devez définir la valeur de la variable d’environnement SNC_LIB_64 sur l’ordinateur passerelle en spécifiant le chemin absolu de la copie 64 bits de sapcrypto.dll de la machine passerelle. Par exemple, C:\Users\Test\Desktop\sapcrypto.dll.

    • Si vous choisissez Personnalisé, collez le chemin absolu du fichier sapcrypto.dll dans le champ « Chemin de la bibliothèque SNC personnalisée » qui figure dans la page Gérer les passerelles.

  9. Pour le Nom du partenaire SNC, entrez le nom SNC du serveur BW. Sous Paramètres avancés, vérifiez que l’option Utiliser l’authentification unique via Kerberos pour les requêtes DirectQuery est cochée. Renseignez les autres champs comme si vous établissiez une connexion par authentification Windows à partir de PBI Desktop.

  10. Créez une variable d’environnement système CCL_PROFILE et définissez sa valeur sur le chemin de sapcrypto.ini.

    CCL_PROFILE system environment variable

    Les fichiers sapcrypto.ini et sapcrypto.dll doivent se trouver au même emplacement. Dans l’exemple ci-dessus, sapcrypto.ini et sapcrypto.dll se trouvent tous les deux sur le Bureau.

  11. Redémarrez le service de passerelle.

    Restart gateway service

  12. Générer un rapport Power BI

Résolution des problèmes

Si vous ne parvenez pas à actualiser le rapport dans le service Power BI, vous pouvez utiliser le suivi de la passerelle, le traçage CPIC et le traçage CommonCryptoLib pour diagnostiquer le problème. Étant donné que le traçage CPIC et CommonCryptoLib sont des produits SAP, Microsoft ne peut pas fournir de support direct pour eux.

Journaux d’activité de la passerelle

  1. Reproduisez le problème.

  2. Ouvrez l’application de passerelle, puis sélectionnez Exporter les journaux sous l’onglet Diagnostics.

    Export gateway logs

Traçage CPIC

  1. Pour activer le traçage CPIC, définissez deux variables d’environnement : CPIC_TRACE et CPIC_TRACE_DIR.

    La première variable définit le niveau de trace, et la deuxième variable définit le répertoire des fichiers de trace. Le répertoire doit être un emplacement dans lequel les membres du groupe des utilisateurs authentifiés peuvent écrire.

  2. Définissez CPIC_TRACE sur 3 et CPIC_TRACE_DIR sur le répertoire où vous voulez écrire les fichiers de trace. Par exemple :

    CPIC tracing

  3. Reproduisez le problème et vérifiez que CPIC_TRACE_DIR contient les fichiers de trace.

    Le traçage CPIC peut diagnostiquer des problèmes de niveau supérieur tels que l'échec du chargement de la bibliothèque sapcrypto.dll. Par exemple, voici un extrait de fichier de trace CPIC dans lequel une erreur de chargement de .dll s’est produite :

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

    Si vous rencontrez un tel échec mais que vous avez défini les autorisations Lire et exécuter sur sapcrypto.dll et sapcrypto.ini comme décrit dans la section ci-dessus, essayez de définir les mêmes autorisations Lire et exécuter sur le dossier contenant les fichiers.

    Si vous n'arrivez toujours pas à charger la bibliothèque .dll, essayez d'activer l’audit du fichier. L'examen des journaux d'audit résultants dans l'observateur d'événements Windows peut vous aider à déterminer l’origine de l’échec de chargement du fichier. Recherchez une entrée d'échec initiée par l'utilisateur Active Directory usurpé. Par exemple, pour l'utilisateur usurpé MYDOMAIN\mytestuser, un échec dans le journal d'audit ressemblerait à ceci :

    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
    

Traçage CommonCryptoLib

  1. Activez le traçage CommonCryptoLib en ajoutant ces deux lignes au fichier sapcrypto.ini créé précédemment :

    ccl/trace/level=5
    ccl/trace/directory=<drive>:\logs\sectrace
    
  2. Remplacez l’option ccl/trace/directory par un emplacement où les membres du groupe des utilisateurs authentifiés peuvent écrire.

  3. Vous pouvez également créer un nouveau fichier .ini pour modifier ce comportement. Dans le même répertoire que les fichiers sapcrypto.dll et sapcrypto.ini, créez un fichier nommé sectrace.ini, avec le contenu suivant. Remplacez l’option DIRECTORY par un emplacement de votre machine où les membres du groupe Utilisateurs authentifiés peuvent écrire :

    LEVEL = 5
    DIRECTORY = <drive>:\logs\sectrace
    
  4. Reproduisez le problème et vérifiez que l’emplacement désigné par DIRECTORY contient des fichiers de trace.

  5. Lorsque vous avez terminé, désactivez le traçage CPIC et CCL.

    Pour plus d’informations sur le traçage CommonCryptoLib, consultez Note SAP 2491573 (identifiant SAP nécessaire).

Emprunt d'identité

Cette section décrit le dépannage des symptômes et les étapes de résolution des problèmes d’emprunt d’identité.

Symptôme : quand vous examinez GatewayInfo[date].log, vous trouvez une entrée de type : About to impersonate user DOMAIN\User (IsAuthenticated: True, ImpersonationLevel: Impersonation) . Si la valeur d’ImpersonationLevel est différente de celle d’Impersonation, l’emprunt d’identité ne se produit pas correctement.

Résolution : suivez les étapes de l’article Accorder au compte de service de passerelle les droits de stratégie locaux sur la machine de passerelle. Redémarrez le service de passerelle après avoir changé la configuration.

Validation : actualisez ou créez le rapport, et collectez le journal GatewayInfo[date].log. Ouvrez le dernier fichier journal GatewayInfo et revérifiez la chaîne suivante : About to impersonate user DOMAIN\User (IsAuthenticated: True, ImpersonationLevel: Impersonation) pour voir si la valeur d’ImpersonationLevel correspond à Impersonation.

La délégation

Les problèmes de délégation apparaissent généralement dans le service Power BI en tant qu’erreurs génériques. Pour déterminer si la délégation est le problème, collectez les traces Wireshark et utilisez Kerberos comme filtre. Pour des informations de référence sur les erreurs Kerberos, consultez le billet de blog. Le reste de cette section décrit le dépannage des symptômes et les étapes de résolution des problèmes de délégation.

Symptôme : dans le service Power BI, vous pouvez rencontrer une erreur inattendue, comme celle illustrée dans la capture d’écran suivante. Dans le journal GatewayInfo[date].log vous voyez que [DM.GatewayCore] ingère une exception pendant la tentative d’exécution de la requête Ado pour clientPipelineId et que l’importation [0D_NW_CHANN] ne correspond à aucune exportation.

Screenshot of unhelpful error

Dans le journal Mashup[date].log, vous voyez l’erreur générique GSS-API(maj): No credentials were supplied.

En regardant les traces CPIC (sec-Microsoft.Mashup*.trc), vous voyez un résultat de ce type :

[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

L’erreur est plus claire dans sectraces sur la machine de passerelle 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.

Vous pouvez aussi voir le problème si vous examinez les traces WireShark.

Screenshot of tracing program showing an error

Remarque

Les autres erreurs KRB5KDC_ERR_PREAUTH_REQUIRED peuvent être ignorées sans problème.

Résolution : vous devez ajouter un SPN SAP/BW5 à un compte de service. Des informations et des étapes détaillées sont disponibles dans la documentation SAP.

Vous pouvez rencontrer une erreur similaire, mais non identique, qui se manifeste dans les traces WireShark par l’erreur KRB5KDC_ERR_BADOPTION suivante :

Screenshot of WireShark program showing a different error

Cette erreur indique que le SPN SAP/BW5 a été trouvé, mais qu’il n’est pas dans les Services auxquels ce compte peut présenter des informations d’identification déléguées sous l’onglet Délégation du compte de service de passerelle. Pour résoudre ce problème, suivez les étapes pour configurer le compte de service de passerelle pour la délégation Kerberos contrainte standard.

Validation : la configuration appropriée empêche la présentation par la passerelle d’erreurs génériques ou inattendues. Si vous voyez toujours des erreurs, vérifiez la configuration de la passerelle elle-même ou la configuration du serveur BW.

Erreurs d’informations d’identification

Cette section décrit le dépannage des symptômes et les étapes de résolution des problèmes d’erreur d’informations d’identification. Vous pouvez également voir des erreurs génériques du service Power BI, comme décrit dans la section précédente sur la délégation.

Différentes résolutions sont possibles en fonction des symptômes que vous voyez dans la source de données (SAP BW), nous examinons les deux.

Symptôme 1 : dans la trace sectraces sec-disp+work[].trc du serveur BW, vous voyez des traces de ce type :

[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

Résolution : suivez les étapes de configuration pour définir les paramètres de configuration du mappage d’utilisateur sur la machine de passerelle, si nécessaire. Vous devez effectuer ces étapes même si vous avez déjà configuré Microsoft Entra Connect.

Validation : vous pouvez charger le rapport dans le service Power BI. En cas d’échec, consultez les étapes du symptôme 2.

Symptôme 2 : dans la trace sectraces sec-disp+work[].trc du serveur BW, vous voyez des traces de ce type :

[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

Solution : vérifiez si l’ID externe Kerberos pour l’utilisateur correspond à ce qui est montré dans sectraces.

  1. Ouvrez une session SAP.
  2. Utilisez la transaction SU01.
  3. Modifiez l’utilisateur.
  4. Accédez à l’onglet SNC, vérifiez que le nom SNC correspond à ce qui est montré dans vos journaux.

Validation : vous pouvez créer et actualiser des rapports dans le service Power BI.

Pour plus d’informations sur la passerelle de données locale et DirectQuery, consultez les ressources suivantes :