Descripción del Escenario del Problema
Partimos de un escenario formado por un dominio de Directorio Activo con Controladores de Dominio Windows Server 2003 R2. Sobre este dominio, tenemos una máquina corriendo MOSS 2007 SP2 (denominada VMOSS01Mob) y otra máquina corriendo Analysis Services 2005 (denominada VSQL01Mob), con una única instancia de Analysis Services corriendo como instancia por defecto.
Directorio Activo se encuentra configurado a un nivel funcional de dominio de Windows Server 2003, y a un nivel funcional del bosque de Windows 2000, como se puede apreciar a continuación.
La máquina que ejecuta MOSS 2007, tiene configurado los Application Pool de MOSS para ejecutarse utilizando una cuenta de Directorio Activo (en particular, la cuenta MOSSSvc), actuando dicho usuario como una cuenta de servicio. Esta misma cuenta (MOSSSvc), ha sido utilizada para el resto de servicios de MOSS.
En este escenario, intentamos crear un Indicador KPI utilizando datos de Analysis Services 2005, sin embargo, al intentar crear el Indicador KPI, justo después de especificar el fichero de conexión de datos (ODC - Office Data Connection), se muestra el error The connection either timed out or was lost, como se muestra en la siguiente pantalla capturada.
También, puede ocurrir que se muestre el error Authentication failed, como se muestra a continuación, dependiendo de si utilizamos el nombre corto del servidor de Analysis Services 2005, o si por el contrario utilizamos el nombre largo FQDN (al menos es lo que he observado durante las pruebas, quizás este error se produzca también en otros escenarios).
En ambos casos, el problema es el mismo: MOSS no es capaz de entregarle a Analysis Services las credenciales del usuario, realizando en su lugar un acceso anónimo, como se muestra en la siguiente captura de traza de Analysis Services.
Anteriormente, ya me había pegado con configuraciones similares de Kerberos, como por ejemplo al configurar la autenticación integrada y delegación de Kerberos en IIS6, configurar la autenticación de Kerberos en SQL Server (error Cannot Generate SSPI context), al configurar la autenticación de Kerberos en el CSS de ISA Server 2006 (ISA Server cannot connect to the Configuration Storage Server), al configurar MOSS 2007 para invocar un Web Service desde un Formulario InfoPath en NLB, y en alguna otra ocasión más.
Esto hacía que tuviese cierta idea de cómo poder solucionar este problema de conexión a Analysis Server 2005 desde MOSS 2007 (el problema del doble salto, o Double Hop), pero no, me costó un Web !!
Sin embargo, al final conseguí hacer funcionar el invento, y conseguí que un usuario desde su PC, pudiese autenticarse ante MOSS con sus credenciales, y acceder a un servidor remoto de Analysis Services a través de MOSS, utilizando las credenciales del usuario (ni acceso anónimo, ni el usuario del Application Pool). Para ello, realicé principalmente dos tareas:
- Configurar la autenticación y delegación de Kerberos en MOSS.
- Configurar la autenticación y delegación de Kerberos en Analysis Services.
- Configurar el fichero de conexión a Analysis Services (ODC - Office Data Connection) utilizando el nombre completo FQDN.
A continuación, entramos en detalles.
Configuración de Autenticación y Delegación de Kerberos en MOSS
Para la configuración de Autenticación y Delegación de Kerberos en MOSS, tuve que realizar varios pasos de configuración. Al final, debo admitir que me quedó un poco la duda, de si habría funcionado también si no hubiese realizado todos los pasos, pero entre pruebas y reinicios se me fue el tiempo sin conseguir determinarlo, por lo que a continuación se detallan todas las configuraciones que tuve que realizar para conseguir hacer funcionar la Autenticación y Delegación de Kerberos en MOSS.
Paso 1) Configurar SPN (Service Principle Names) de Cuentas de Equipo
Esta configuración no suele ser habitual, ya que se utiliza sólo en aquellos casos en que el servicio que se desea configurar (o el Application Pool) no utiliza una cuenta de usuario, por ejemplo, al utilizar la cuenta Network Service.
En nuestro caso, no aplica, ya que utilizamos en todos los casos una cuenta de usuario. Si fuese al contrario, deberían ejecutarse comandos setspn similares a los que se describen en el paso 2, con la diferencia de que en vez de especificar una cuenta de usuario, se debería de especificar la cuenta de equipo del servidor MOSS.
Paso 2) Configurar SPN (Service Principle Names) de Cuenta de Servicio para HTTP
Antes de ejecutar esta configuración, es necesario determinar los nombres que se desean utilizar para acceder a MOSS (es decir, las URLs) y las cuentas de servicio utilizadas (incluyendo las cuentas utilizadas en los Application Pool de IIS).
En nuestro escenario, utilizamos el nombre NetBIOS del servidor (VMOSS01Mob) para acceder a MOSS (un caso extraño, quiero decir, en producción es típico utilizar nombres DNS y entornos NLB, pero nuestro caso de ejemplo se basa en un pequeño entorno de laboratorio). Adicionalmente, utilizamos una única cuenta de usuario (la cuenta MOSSSvc) para ejecutar todos los servicios de MOSS y también para los Application Pool (tampoco recomendable para entornos productivos, pero en entornos de laboratorio, simplifica bastante la configuración y mantenimiento).
Bajo estas premisas, tan sólo es necesario ejecutar un par de comandos setspn.exe, uno para el nombre largo (FQDN) y otro para el nombre corto, como se muestra en la siguiente pantalla capturada.
Paso 3) Habilitar la Delegación (Trust for Delegation) en las Cuentas de Equipo
La ejecución de este paso, consiste en habilitar la Delegación (Trust computer for Delegation) en las cuentas de equipo de los Frontales de MOSS. Al menos, en mi caso lo he realizado sólo sobre las cuentas de los Frontales de MOSS, en vez de sobre todos los servidores MOSS (ej: Index Server, Excel Services, etc.), y en las pruebas que he realizado el resultado ha sido satisfactorio (igual en un tiempo, resulta que me hacía falta configurarlo sobre el resto de cuentas de equipo, no lo descarto ;-).
Para realizar esta configuración, desde la herramienta administrativa ADUC (Active Directory Users and Computers), mostrar las propiedades de la cuenta de equipo que se desea configurar. Seguidamente, seleccionar la pestaña Delegation, y sobre la misma, seleccionar la opción Trust this computer for delegation to any service (Kerberos Orly), como se aprecia en la siguiente pantalla capturada.
Téngase en cuenta, que la configuración de esta opción, varía en función del nivel funcional de Directorio Activo. Podría ocurrir que no apareciese la pestaña Delegation, en cuyo caso, se debería activar la opción Trust computer for delegation, que en este caso, se mostrará en la pestaña General. Esto puede generar algo de confusión, pero francamente, no tiene mayor misterio.
Paso 4) Habilitar la Delegación (Trust for Delegation) en las Cuentas de Servicio
Este paso es similar al paso anterior, con la diferencia de que debe aplicarse sobre las cuentas de usuario utilizadas en los servicios y Application Pool de MOSS, en lugar de sobre cuentas de equipo.
En consecuencia, para realizar esta configuración, desde la herramienta administrativa ADUC (Active Directory Users and Computers), mostrar las propiedades de la cuenta de usuario que se desea configurar, seleccionar la pestaña Delegation, y sobre la misma, seleccionar la opción Trust this user for delegation to any service (Kerberos Orly), como se aprecia en la siguiente pantalla capturada.
Si no se muestra la pestaña Delegation sobre la cuenta de usuario, podría ser porque no se configuró previamente el SPN. Otro motivo, el nivel funcional de Directorio Activo (comprobar si aparece la opción Account is trusted for delegation en la pestaña Account).
Paso 5) Modificar la MetaBase de IIS
Esta configuración se realiza ejecutando en cada Frontal de MOSS, un comando para cada Sitio Web de IIS que se desee configurar. En este caso de ejemplo, tenemos un único Frontal de MOSS (VMOSS01Mob) y dos Sitios Web de IIS. Es necesario identificar previamente el ID de cada Sitio Web, algo que podemos obtener desde la herramienta administrativa IIS Manager, como se muestra en la siguiente pantalla capturada.
Los comandos a utilizar, se basan en el script adsutil.vbs, ubicado por defecto en c:\Inetpub\AdminScripts. A continuación se muestra una pantalla capturada con los comandos ejecutados (recordar realizarlo en cada Frontal MOSS).
De forma previa, para quién lo desee, es posible realizar un Backup de la Metabase de IIS6
Paso 6) Habilitar Autenticación Kerberos en las Aplicaciones Web de MOSS
Esta configuración debe realizarse para la Aplicación Web que deseamos configurar. En mi caso, lo configuré también en la Aplicación Web correspondiente a la Administración de los Servicios Compartidos.
Los pasos a seguir son los siguientes. En la Consola de Administración Central de MOSS, seleccionar la pestaña Application Management, y seguidamente seleccionar la opción Authentication Providers de la sección Application Security. En la pantalla Authentication Providers, seleccionar la aplicación que se desea configurar en el desplegable Web Application. Seguidamente, click sobre la zona que se desea configurar (habitualmente, se tratará de la zona Default, que será la única zona existente).
En la pantalla Edit Authentication, en el apartado IIS Authentication Settings, seleccionar la opción Negotiate (Kerberos), como se muestra en la siguiente pantalla captura.
Guardar los cambios, y repetir el proceso para el resto de Aplicaciones Web de MOSS que se deseen configurar.
Paso 7) Habilitar Kerberos en los Servicios Compartidos (SSP) de MOSS
Consiste en ejecutar un comando STSADM desde uno de los frontales de MOSS, en particular: STSADM.exe -o SetSharedWebServiceAuthn -negotiate
A continuación se muestra una pantalla capturada.
Paso 8) Habilitar la Delegación en Excel Services
Similar al paso anterior, consiste en ejecutar un par de comandos STSADM desde uno de los frontales de MOSS. Téngase en cuenta, que en el primero de los comandos a ejecutar es necesario especificar el nombre de los Servicios Compartidos sobre los que se desea habilitar Kerberos.
El primer comando a ejecutar es: stsadm.exe -o set-ecssecurity -ssp SSP_NAME -accessmodel delegation
El segundo comando a ejecutar es: stsadm.exe -o execadmsvcjobs
A continuación se muestra una pantalla capturada a modo de ejemplo.
Paso 9) Habilitar la Delegación en los Servidores de MOSS (Component Services)
Esta configuración debe realizarse en cada uno de los Frontales de MOSS. Es decir, si tenemos una Granja MOSS con dos Frontales formando un Cluster NLB, será necesario realizar esta configuración en cada uno de los dos Frontales.
La tarea a realizar es muy sencilla. Abrir la herramienta administrativa Component Services, y seleccionar la opción Properties de My Computer, como se muestra en la siguiente pantalla capturada.
En la pestaña Default Properties, seleccionar el valor Delegate para la opción Default Impersonation Level, como se muestra en la siguiente pantalla capturada.
Aplicamos los cambios, y hemos terminado (excepto que tengamos que repetirlo en algún otro Frontal de MOSS).
Paso 10) Reiniciar los Frontales de MOSS
Lo de siempre. Si tenemos varios frontales, los reiniciamos de forma ordenada. Sin mucho misterio.
Configurar la autenticación y delegación de Kerberos en Analysis Services
Paso 1) Configurar SPN (Service Principle Names) de Cuentas de Equipo
Esta configuración no suele ser habitual, ya que se utiliza sólo en aquellos casos en que el servicio de Analysis Services no utiliza una cuenta de usuario, por ejemplo, al utilizar la cuenta Network Service.
En nuestro caso, no aplica, ya que utilizamos una cuenta de usuario, en particular la cuenta de dominio SQLSvc. Si fuese al contrario, deberían ejecutarse comandos setspn similares a los que se describen en el paso 2, con la diferencia de que en vez de especificar una cuenta de usuario, se debería de especificar la cuenta de equipo que ejecuta Analysis Services.
Paso 2) Configurar SPN (Service Principle Names) de Cuenta de Servicio para Analysis Services
Tan sólo es necesario ejecutar un par de comandos setspn.exe, uno para el nombre largo (FQDN) y otro para el nombre corto, como se muestra en la siguiente pantalla capturada (damos por hecho, que estos dos nombres, son los únicos que se utilizarán para acceder a Analysis Services).
Paso 3) Habilitar la Delegación (Trust for Delegation) en las Cuentas de Equipo
Desde la herramienta administrativa ADUC (Active Directory Users and Computers), mostrar las propiedades de la cuenta de equipo que se desea configurar (en nuestro caso, VSQL01Mob). Seguidamente, seleccionar la pestaña Delegation, y sobre la misma, seleccionar la opción Trust this computer for delegation to any service (Kerberos Orly). Este paso es similar al que se comentó anteriormente para el caso de las cuentas de equipo de MOSS.
Cómo ya se dijo, debe tenerse en cuenta, que la configuración de esta opción, varía en función del nivel funcional de Directorio Activo. Podría ocurrir que no apareciese la pestaña Delegation, en cuyo caso, se debería activar la opción Trust computer for delegation, que en este caso, se mostrará en la pestaña General. Esto puede generar algo de confusión, pero francamente, no tiene mayor misterio.
Paso 4) Habilitar la Delegación (Trust for Delegation) en las Cuentas de Servicio
Este paso es similar al paso anterior, y sobre todo, similar al paso que se comentó anteriormente para el caso de las cuentas de usuario de MOSS, aunque ahora se limita a la cuenta de usuario utilizada para iniciar el servicio de Analysis Services.
En consecuencia, para realizar esta configuración, desde la herramienta administrativa ADUC (Active Directory Users and Computers), mostrar las propiedades de la cuenta de usuario que se desea configurar (en nuestro caso, la cuenta SQLSvc), seleccionar la pestaña Delegation, y sobre la misma, seleccionar la opción Trust this user for delegation to any service (Kerberos Orly).
Si no se muestra la pestaña Delegation sobre la cuenta de usuario, podría ser porque no se configuró previamente el SPN. Otro motivo, el nivel funcional de Directorio Activo (comprobar si aparece la opción Account is trusted for delegation en la pestaña Account).
Paso 5) Reiniciar el servidor de Analysis Services
Sin mayor misterio.
Configurar el fichero de conexión (ODC - Office Data Connection) a Analysis Services
Partimos de un equipo de escritorio (en nuestro caso, un Windows XP) con Office 2007 instalado. Desde el Explorador de Windows, nos ubicamos en My Documents, y hacemos doble-click sobre la opción Connect to New Data Source.odc, como se muestra en la siguiente pantalla capturada.
Esto producirá que se inicie Microsoft Excel. Es probable que se muestre un mensaje de seguridad, como se muestra a continuación. En este caso, click Enable para continuar.
Se inicia el asistente para la creación de una nueva conexión de datos. Seleccionamos Microsoft SQL Server Analysis Services, y click en Next para continuar.
Especificamos el nombre de la instancia a la que nos deseamos conectar. En nuestro caso, se trata de una instancia por defecto. Es recomendable utilizar el nombre completo de la máquina (FQDN). Seleccionamos la autenticación de Windows (Use Windows Authentication). Click Next para continuar.
Seleccionamos el Cubo al que nos deseamos conectar. Click Next para continuar.
Especificamos el nombre del fichero ODC que deseamos crear, la descripción y el nombre amigable que deseemos. Click Finish para continuar.
Llegados a este punto, se habrá creado el fichero ODC (Office Data Connection) correspondiente a nuestra conexión a Analysis Services.
Ahora sólo queda subir el fichero ODC a la correspondiente librería de MOSS, bien manualmente (haciendo un upload, como se hace con cualquier otro tipo de documentos), o bien desde Excel. En este último caso, seleccionaremos la opción Connections de la pestaña Data.
En el diálogo Workbook Connections, seleccionamos la conexión deseada, y click Properties.
En el diálogo Connection Properties, seleccionaremos la pestaña Definition, y click en el botón Export Connection File.
En el diálogo File Save, escribimos en la caja File Name la URL sobre la que deseamos almacenar el fichero de conexión ODC, y click Save.
Si se muestra el diálogo Web File Properties, ajustamos el valor de los campos mostrados, y click OK para continuar.
Y ya está. Por fin, hemos creado nuestro fichero de conexión ODC a Analysis Services, y lo hemos subido a MOSS, para poder empezar a utilizarlo.
Comprobar el funcionamiento de la nueva configuración realizada
Finalmente, no hay nada como comprobar que todo funciona correctamente. En nuestro caso, es suficiente con intentar crear en MOSS un nuevo Indicador KPI desde Analysis Services, y al especificar el fichero de conexión apropiado (ODC - Office Data Connection file), comprobar que se consigue acceder a Analysis Services y se muestran las KPIs disponibles. A continuación, se muestra una pantalla capturada.
Uff. Qué alivio.
Conclusiones finales y enlaces de interés
Tras ejecutar la configuración descrita en este artículo, se pueden sacar algunas conclusiones.
Por ejemplo, para conseguir poner en funcionamiento la Autenticación y Delegación de Kerberos ha sido necesario ejecutar algunos comandos y configuraciones propias de MOSS, a través de STSADM y de la Consola de Administración Central. Estas son configuraciones específicas de MOSS 2007.
Del mismo modo, también ha sido necesario realizar configuraciones comunes, que suelen realizarse al configurar la Autenticación y Delegación de Kerberos en otros entornos distintos a MOSS. Véase el caso de la configuración de los SPN (Service Principal Name), y de habilitar la Delegación de Kerberos (Trust for Delegation) en cuentas de equipo y de servicio.
Una configuración que me ha llamado la atención, es la correspondiente al Paso 9, Habilitar la Delegación en los Servidores de MOSS (Component Services). El motivo, es que nunca anteriormente había tenido que tocar esta propiedad, por lo que no descarto que en alguna otra configuración de Kerberos (ajena a MOSS) que pueda encontrarme en un futuro, me resulte necesario.
Por último, aprovecho para colgar algunos enlaces de interés, de los cuales quiero destacar los correspondientes al sitio A Marvellous Point, de Martin Kearn (buenísimo).
Martin Kearn, ha dejado de dar continuidad al sitio A Marvellous Point, y ahora escribe en el Blog de la MDSN UK SharePoint Team, para quien quiera darle un vistazo.
Actualizado 26/02/2010. Aprovecho para incluir un par de enlaces de interés:
Poco más. Como siempre, espero que os resulte de utilidad.