Autenticación Integrada y Delegación de Kerberos en IIS6
| La Autenticación Integrada y la Delegación de Kerberos, se trata de una configuración típica utilizada en Aplicaciones Web (Aplicaciones ASPNET, Aplicaciones Sharepoint, Sincronización Web de la Replicación de Mezcla de SQL Server 2005, etc.). Sin embargo, ¿Para qué sirve la Autenticación Integrada y la Delegación de Kerberos? ¿Qué pasos se deben seguir para configurarlo? ¿Y en caso de un Cluster NLB? |
La Autenticación Integrada y la Delegación de Kerberos sirve para poder conectarse a un servidor IIS remoto y autenticarnos con el usuario contextual con el que hemos iniciado sesión en nuestra estación de trabajo, y de forma adicional, cuando la Aplicación Web que se está ejecutando en dicho IIS necesita acceder a recursos remotos (ej: sistema de ficheros, SQL Server, etc) se puedan utilizar las credenciales del usuario que interactúa con la aplicación, en vez de las credenciales del usuario que inicia el Pool de Aplicaciones del IIS u otro usuario cualquiera (es decir, Impersonación). Además, con la Autenticación Integrada evitamos que se pidan las credenciales y evitamos que viajen las credenciales por la red, siendo éste el método de autenticación más seguro. Sin embargo, se debe tener en cuenta que requiere de Directorio Activo, de Microsoft Internet Explorer, y no funciona en Internet (excepto que se publique en Internet tanto los Controladores de Dominio de Directorio Activo, como la zona DNS utilizada por el dominio). Además, se trata de una configuración complicada, y desde el punto de vista de la Seguridad podría ser arriesgada, pues una aplicación sujeta a ésta configuración, sería capaz de abusar de los permisos de sus usuarios para obtener acceso a recursos restringidos (ficheros, bases de datos, etc.), y en consecuencia, comprometer la seguridad de nuestra infraestructura. Las configuraciones a realizar son las siguientes: - Activar la Autenticación Integrada en el IIS. Es suficiente con abrir la Herramienta Administrativa de Internet Information Services, y utilizar la pestaña Directory Security de las Propiedades del directorio virtual deseado. En caso de un Cluster NLB, realizar en cada nodo del Cluster.
- En caso de utilizar un nombre DNS (en vez del nombre NetBIOS del servidor) para acceder al IIS junto con la Autenticación Integrada (situación habitual en el caso de un Cluster NLB), es necesario Configurar en Microsoft Internet Explorer la zona de seguridad utilizada (ej: Sitios de Confianza ó Trusted Sites) para incluir el sitio al que deseamos acceder (si no estuviese incluido en dicha zona), y además, modificar la configuración de la zona activando la opción de "Automatic logon with current user name and password". Esta configuración se debe realizar sobre todos los equipos clientes, por lo cual, resulta de utilidad el uso de Directivas de Grupo (es decir, Políticas de Directorio Activo).
- Habilitar la Delegación de Kerberos en la cuenta de equipo del servidor IIS. Esta tarea se hace con la Herramienta Administrativa de Active Directory Users and Computers (ADUC), en las Propiedades de las cuentas de equipo de cada uno de los servidores IIS deseados (opción Trust this computer for delegation). Una vez activada esta opción, reiniciar es equipo correspondiente.
- Habilitar la Delegación de Kerberos en la cuenta de usuario utilizada en el Application Pool del IIS. Esta tarea se hace con la Herramienta Administrativa de Active Directory Users and Computers (ADUC), en las Propiedades de la cuenta de usuario (opción Account is trusted for delegation). Este paso debe realizarse, si el Application Pool de IIS utiliza una cuenta de usuario de Dominio, algo obligatorio en entornos de IIS en NLB.
- En caso de utilizar un nombre DNS (en vez del nombre NetBIOS del servidor) es necesario Registrar un nuevo Service Principal Name (SPN), utilizando la utilidad setspn del Kit de Recursos de Windows 2000 (descargable gratuitamente desde la Web de Microsoft). Como Directorio Activo desconoce este nombre de servicio, el Ticket Granting Service (TGS) no concede el ticket para autenticar al usuario, forzando la utilización del siguiente método de autenticación (es decir, NTLM). Se pueden dar dos casos.
Por ejemplo, si tenemos una única máquina (es decir, sin Cluster NLB) Windows Server 2003 funcionando como IIS con el Application Pool ejecutándose bajo la cuenta de Network Service, la cual tiene un nombre NetBIOS VIIS01, y queremos acceder a través del nombre DNS www.guillesql.local y aprovecharnos de la Autenticación Integrada y de la capacidad de Delegación, deberemos ejecutar el siguiente comando sobre el servidor IIS.
setspn –A HTTP/VIIS01 VIIS01 setspn –A HTTP/www.guillesql.local VIIS01
Sin embargo, si tenemos dos o más máquinas Windows Server 2003 funcionando como IIS y formando un Cluster NLB, se debe configurar el Application Pool para ejecutarse bajo una cuenta de usuario del dominio (ej: GUILLESQL\IISSvc) en cada uno de los nodos del Cluster NLB, debiendo pertenecer al grupo local de cada nodo IIS_WPG. Seguidamente, utilizaremos el comando setspn, como en el siguiente ejemplo:
setspn –A HTTP/www.guillesql.local GUILLESQL\IISSvc
Adicionalmente, puede ser necesario agregar los Service Principal Name asociados a los nombres de los servidores miembros (Nodos) del Cluster NLB, para permitir el acceso a los mismos, como se muestra en el siguiente ejemplo:
setspn -A HTTP/VIIS01 GUILLESQL\IISSvc setspn -A HTTP/VIIS01.guillesql.local GUILLESQL\IISSvc setspn -A HTTP/VIIS02 GUILLESQL\IISSvc setspn -A HTTP/VIIS02.guillesql.local GUILLESQL\IISSvc
Para más información sobre la solución Cluster NLB de Microsoft, se puede consultar el artículo Instalar y Configurar Microsoft Cluster NLB (Network Load Balancing) en Windows Server 2003.
- Modificar la Metabase de IIS. Es necesario modificar la Metabase de IIS (es posible hacer un Backup de la Metabase de IIS previamente) para especificar como protocolo de autenticación a Kerberos en el Sitio Web deseado, dejando la autenticación NTLM en segunda posición (como alternativa a Kerberos). Esto se puede realizar de varias formas, como por ejemplo ejecutando el comando cscript.exe adsutil.vbs set w3svc/1/NTAuthenticationProviders "Negotiate, NTLM" desde c:\inetpub\adminscripts (Nota: en el ejemplo, el 1 es el ID del Sitio Web dentro de IIS, que suele estar asignado al Sitio Web por defecto. El valor que deberemos utilizar, deberemos comprobarlo con la herramienta administrativa IIS Manager). También se puede modificar la Metabase directamente o mediante la herramienta Metabase Explorer del Kit de Recursos del IIS.
Actualizado 19/09/2009: Por aportar alguna documentación más oficial que este simple POST, quiero aprovechar para incluir unos Artículos de Soporte de Microsoft (KBs de los de toda la vida) que hablan sobre este tema, y algún otro enlace más: Es importante tener en cuenta que no es necesario utilizar la Delegación de Kerberos en todos los entornos de IIS. En muchos casos es suficiente con la Autorización, es decir, utilizar las credenciales del usuario para mostrarle (autorizarle) o no a ver una página Web de nuestro IIS. Sin embargo, en otros casos puede ser requisito de la Aplicación que se está montando sobre el IIS, incluyendo por supuesto, a MOSS 2007 (ej: acceder a Web Services desde formularios InfoPath publicados en MOSS 2007). Por último, quería incluir un par de enlaces a otros artículos aquí publicados, que están íntimamente relacionados con la Delegación de Kerberos: Actualizado 21/02/2010: Recientemente me he encontrado un caso de configuración de Kerberos, en particular, configurar la Autenticación y Delegación de Kerberos con MOSS y Analysis Services, que puede resultar una lectura de interés en relación con el tema del presente artículo. |
| | |