Partager via


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 de l’service Power BI à l’aide de CommonCryptoLib (sapcrypto.dll).

Remarque

Avant de tenter d’actualiser un rapport BASÉ sur SAP BW qui utilise l’authentification unique Kerberos, suivez les étapes décrites dans cet article et les étapes décrites dans Configurer l’authentification unique basée sur Kerberos. L’utilisation de CommonCryptoLib en tant que bibliothèque SNC (Secure Network Communications) permet de connecter l’authentification unique aux serveurs d’applications SAP BW et aux serveurs de messages SAP BW.

Remarque

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 pouvez pas vous connecter à l’aide de l’implémentation 2.0, le connecteur .NET n’est pas installé ou n’a pas été installé dans le Global Assembly Cache.

  3. Assurez-vous que Secure Login Client (SLC) de 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).

    Client de connexion sécurisée SAP

  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 AD que vous utilisez pour le test. Dans la capture d’écran suivante, nous avons accordé au groupe Utilisateurs authentifiés les autorisations Lire et exécuter pour sapcrypto.dll :

    Utilisateurs authentifiés

  7. Si vous n’avez pas encore de source de données SAP BW associée à la passerelle que vous souhaitez que la connexion d’authentification unique transite, ajoutez-en une dans la page Gérer les connexions et les passerelles dans le 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.

    Variable d’environnement système CCL_PROFILE

    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.

    Redémarrez le service de passerelle

  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.

    Exporter des journaux de passerelle

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 :

    Traçage CPIC

  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 code à partir d’un fichier de trace CPIC où une erreur de chargement .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 lancée par l’utilisateur AD emprunt d’identité. 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 sapcrypto.ini et sapcrypto.dll, 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 de ImpersonationLevel est différente de l’emprunt d’identité, 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 vérifiez à nouveau la chaîne About to impersonate user DOMAIN\User (IsAuthenticated : True, ImpersonationLevel : Impersonation) pour vérifier que la valeur de ImpersonationLevel correspond à ImpersonationLevel.

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 obtenir des informations de référence sur les erreurs Kerberos, consultez ce 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 la service Power BI, vous pouvez rencontrer une erreur inattendue similaire à celle de la capture d’écran suivante. Dans GatewayInfo[date].log vous verrez [DM.GatewayCore] ingérer une exception pendant la tentative d’exécution de requête ADO pour clientPipelineId et l’importation [0D_NW_CHANN] ne correspond à aucune exportation.

Capture d’écran d’erreur intraitable

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

En examinant les traces CPIC (sec-Microsoft.Mashup.trc*), vous verrez quelque chose de similaire à ce qui suit :

[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 devient plus claire dans les extraits de 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.

Capture d’écran du programme de traçage montrant une erreur

Notes

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 vous présenter une erreur similaire, mais pas identique qui se manifeste dans les traces WireShark comme l’erreur suivante KRB5KDC_ERR_BADOPTION :

Capture d’écran du programme WireShark montrant une erreur différente

Cette erreur indique que le SPN SAP/BW5 est introuvable, mais il n’est pas sous 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 : une configuration appropriée empêche la présentation d’erreurs génériques ou inattendues par la passerelle. 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 le fichier sectraces sec-disp+work[].trc à partir du serveur BW, vous voyez des traces similaires à ce qui suit :

[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 Microsoft Entra Connect est déjà configuré.

Validation : vous pouvez charger le rapport dans le service Power BI. Si vous ne parvenez pas à charger le rapport, consultez les étapes du symptôme 2.

Symptôme 2 : Dans le fichier sectraces sec-disp+work[].trc du serveur BW, vous voyez des traces similaires à ce qui suit :

[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 et vérifiez que le nom SNC correspond à ce qui est affiché dans vos journaux d’activité.

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 :