Kerberos avec Windows Server 2008 R2, SharePoint 2010 et SSRS R2 sur la même machine + Host Header : La recette

La topologie d’un déploiement SharePoint avec Reporting Services n’est jamais la même. Il est possible d’installer Reporting Services sur le même serveur que SharePoint, de le placer sur un serveur applicatif séparé ou de le mettre à même le serveur de données (SQL et SSAS).

De plus la version de Windows a un impact sur la version d’IIS, SharePoint est soit WSS 3.0, WSS 4.0, MOSS 2007 ou MOSS 2010 et il y a SSRS R1 et SSRS R2 …

C’est pourquoi il y a beaucoup d’information sur Internet (voir références) mais très peu qui donne la recette exacte pour un déploiement donné. Mon article vise à lister les grandes lignes de mon déploiement ce qui pourrait vous aider dans un déploiement similaire.

Dans mon cas, le serveur de données (SQL / SSAS) était séparé du serveur SharePoint 2010 d’où la nécessité d’utiliser Kerberos (double hop). Afin de ne pas avoir à ajouter le serveur de données à la ferme (ex. pour qu’il serve à d’autres SharePoint), on a choisi d’installer une instance de Reporting Services à même le serveur SharePoint 2010.

On se retrouve avec la situation suivante: le Report Server Web Service et SharePoint utilisent le même “service class”. Comme il n’est pas possible d’enregistrer le même SPN (ex. HTTP/server.domain) sur deux comptes de services AD différents (un pour le AppPool de SharePoint et l’autre pour le service de Reporting Services) il faut donc utiliser le même compte de service pour les deux. Lire cet extrait de technet:

HTTP is the service class. The Report Server Web service runs in HTTP.SYS. A by-product of creating an SPN for HTTP is that all Web applications on the same computer that run in HTTP.SYS (including applications hosted in IIS) will be granted tickets based on the domain user account. If those services run under a different account, the authentication requests will fail. To avoid this problem, be sure to configure all HTTP applications to run under the same account, or consider creating host headers for each application and then creating separate SPNs for each host header. When you configure host headers, DNS changes are required regardless of the Reporting Services configuration.

Si vous avez plusieurs Application Pool dans SharePoint (ex. Project Server et SharePoint côte à côte), utilisez le même compte de service.

Voici la liste des choses que j’ai eu à faire:

  1. Assigner le même compte de service à tous les AppPool de SharePoint ainsi que pour SSRS.
  2. Mettre <RSWindowsNegotiate /> pour <AuthenticationTypes> dans C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\rsreportserver.config
  3. Créer une adresse pour le Report Server en utilisant le nom de la machine (http://server/ReportServer) même si SharePoint utilise un HOST HEADER (de type A) pour une de ses applictions Web.
    image
  4. Configurer l’intégration SSRS dans SharePoint:
    image
  5. S’assurer que l’application Web SharePoint utilise Kerberos pour toutes les zones:
    image
    image
  6. Vérifier qu’IIS est en Negotiate,NTLM et non juste en NTLM (par défaut c’était correct). cscript adsutil.vbs get w3svc\NTAuthenticationProviders
  7. Comme SharePoint utilise des HOST Header, il faut désactiver le LoopbackCheck (manière explicite ou globale).
  8. Créer les SPNs pour SQL server sur le compte de service utiliseé par SQL Server (ex. cs-sql)MSSQLSvc/NetBIOS:1433
    MSSQLSvc/FQDN:1433
  9. Créer les SPNs pour SSAS sur le compte de service utiliseé par celui-ci (ex. cs-ssas)MSOLAPSvc.3/NetBIOS
    MSOLAPSvc.3/FQDN
  10. Créer les SPNs vers le serveur SharePoint (et dans mon cas vers le HOST HEADER de type A) pour le compte utilisé par SharePoint et SSRS (ex. cs-http)HTTP/NetBIOS
    HTTP/FQDN
    HTTP/HostHeader
    HTTP/HostHeaderFQDN (ex. HTTP/alias.domain.com)
  11. Permettre la délégation pour tous les services (Kerberos) pour le compte utilisé par SharePoint et SSRS.
    image
  12. Permettre la délégation vers SQL Server pour le compte de service utilisé par SSAS (ex. cs-ssas) si le cube doit accéder au comptoir de données (Datamart).
    image
  13. Pour le site IIS du SharePoint qui n’utilise pas de HOST HEADER (ex. SharePoint – 80) j’ai dû activer le Kernel Mode en spécifiant l’utilisation de l’identité du AppPool. Autrement je ne pouvais plus accéder à ce site, il demandait mon identité à l’infini (popup).Il faut Modifier C:\Windows\System32\inetsrv\config\applicationHost.config:

    <location path= »SharePoint – 80″>
    <system.webServer>
    <security>
    <authentication>
    <windowsAuthentication enabled= »true » useKernelMode= »true » useAppPoolCredentials= »true »>
    (…)
    </location>

Constrained Delegation

Normalement j’utilise la mécanique plus stricte pour la délégation Kerberos. Dans ce cas je n’ai pas réussi à la faire fonctionner. D’après ce que j’ai lu, il aurait fallu créer un HOST HEADER de type A différent pour le Report Server. Cela nous aurait permis d’avoir un SPN distinct pour celui-ci. Ainsi nous aurions pu utiliser un compte de service différent pour le Report Server et faire en sorte que le compte de service SharePoint (ex. cs-sharepoint avec HTTP/sharepoint.domain.com) délègue vers le compte de service ssrs (ex. cs-ssrs avec HTTP/reportserver.domain.com) qui aurait délégué vers SQL Server et SSAS.

WireShark

Quand tout fonctionne, voici les requêtes Kerberos que vous devriez voir passer dans WireShark sur le serveur SharePoint (rapport SSRS accédant des données sur un serveur SQL distant):
image
image

1) TGS-REQ – MSSQLSvc/server>.syntell.com:1433
image

2) TGS-REP – MSSQLSvc/server>.syntell.com:1433
image

3) TGS-REQ – krbtgt/SYNTELL.COM
image

4) TGS-REP – krbtgt/SYNTELL.COM
image

Quand je tentais d’utiliser la délégation spécifique, mon TGS-REQ et TGS-REP étaient sur:
Server Name (Enterprise Name): <compte de service sharepoint>@syntell.com ce qui ne fait aucun sens et échouait.

Références

  1. Kerberos delegation and Windows 2008
  2. Kerberos Issues With Reporting Services and SharePoint in a Distributed Environment
  3. Manage Kerberos Authentication Issues in a Reporting Services Environment
  4. Configuring Kerberos Authentication in SharePoint 2010
  5. How to: Register a Service Principal Name (SPN) for a Report Server
  6. Solving the Reporting Services Login issue in the February CTP of SQL Server 2008
  7. Free Software – SharePoint Kerberos Buddy – Detect And Repair Kerberos Issues

Une réflexion sur “Kerberos avec Windows Server 2008 R2, SharePoint 2010 et SSRS R2 sur la même machine + Host Header : La recette

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s