Autenticación Kerberos de SQL Server
Esta guía describe cómo configurar una fuente de base de datos o destino para autenticar con Microsoft SQL Server utilizando la autenticación de caché de tickets de Kerberos (kinit).
Nota
Esta configuración es compatible solo con agentes privados de Jitterbit.
Nota
El comportamiento de la autenticación de Kerberos y SQL Server puede variar según la configuración de su Active Directory de Microsoft, la resolución DNS, el enrutamiento de red y otros factores específicos del entorno.
Requisitos previos
Antes de comenzar, asegúrese de que lo siguiente esté en su lugar:
-
Un agente privado de Jitterbit.
-
Acceso a la red a lo siguiente:
-
Un Controlador de Dominio de Active Directory (Centro de Distribución de Claves, o KDC).
-
El host de SQL Server.
-
-
Una cuenta de usuario válida de Active Directory.
-
Un Nombre de Principal de Servicio (SPN) configurado en Active Directory para SQL Server en el siguiente formato:
MSSQLSvc/<SQL_SERVER_HOST>:<PORT>
Paso 1: Asegurar la resolución DNS al KDC
Kerberos requiere una correcta resolución DNS para localizar el KDC.
Linux
En algunos entornos, puede ser necesario ajustar la configuración DNS. Reemplace los siguientes marcadores de posición con sus valores:
<AD_DNS_IP>: El servidor DNS que puede resolver el dominio de Active Directory.<SECONDARY_DNS_IP>: Un servidor DNS de respaldo opcional.
Esta es una configuración temporal. Ejecute estos comandos nuevamente cada vez que el contenedor se reinicie:
cat > /etc/resolv.conf <<EOF
nameserver <AD_DNS_IP>
nameserver <SECONDARY_DNS_IP>
EOF
Windows
Si el dispositivo que ejecuta el agente privado de Windows ya está unido al mismo dominio que el KDC, no se necesita ninguna configuración adicional. De lo contrario, agregue las entradas requeridas a C:\Windows\System32\drivers\etc\hosts para que el dispositivo pueda resolver los nombres de host del KDC y de SQL Server.
Paso 2: Instalar utilidades del cliente Kerberos
Linux
El host del agente privado debe tener instaladas las herramientas de Kerberos. Estas herramientas son necesarias para crear la caché de tickets y para validar la comunicación con el KDC y la creación de tickets de servicio.
Ejecute los siguientes comandos para instalar krb5-user:
apt-get update
apt-get install krb5-user
Esto instala lo siguiente:
kinitklist- Bibliotecas de Kerberos
Windows
Las herramientas de Kerberos están disponibles de forma nativa en Windows. Si no están instaladas, descárguelas desde https://ist.mit.edu/mit-apps/kerberos-win.
Paso 3: Probar la resolución de DNS
Verifique que el agente pueda resolver el nombre del host del KDC.
Linux
Ejecute el siguiente comando para instalar utilidades de DNS:
apt-get update
apt-get install dnsutils
Luego pruebe la resolución de DNS:
nslookup <DOMAIN_CONTROLLER_HOSTNAME>
Ejemplo
nslookup ad.dev.local
Windows
Ejecute el siguiente comando para probar la resolución de nombres:
ping <DOMAIN_CONTROLLER_HOSTNAME>
Ejemplo
ping ad.dev.local
Si la resolución falla, la autenticación de Kerberos no funcionará.
Paso 4: Crear el archivo de configuración de Kerberos (krb5.conf)
Linux
Utilice el siguiente comando para crear o editar el archivo de configuración en /etc/krb5.conf:
vi /etc/krb5.conf
Contenido de ejemplo
[libdefaults]
default_realm = DEV.LOCAL
rdns = false
dns_lookup_kdc = false
dns_lookup_realm = false
[realms]
DEV.LOCAL = {
kdc = ad.dev.local
admin_server = ad.dev.local
}
[domain_realm]
.dev.local = DEV.LOCAL
dev.local = DEV.LOCAL
Windows
Cree el archivo krb5.conf utilizando la misma estructura mostrada arriba. Elija una ubicación a la que el agente privado pueda acceder sin requerir privilegios elevados, como:
C:\Jitterbit\kerberos
Parámetros de configuración
[libdefaults]
default_realm: El nombre del dominio de Active Directory en mayúsculas.rdns = false: Previene problemas de búsqueda inversa de DNS.dns_lookup_kdc = false: Desactiva el descubrimiento automático del KDC a través de DNS.dns_lookup_realm = false: Desactiva el descubrimiento automático del reino a través de DNS.
[realms]
kdc: El nombre del host del controlador de dominio.admin_server: El controlador de dominio para operaciones administrativas.
[domain_realm]
Asocia dominios DNS con el reino de Kerberos.
Paso 5: Crear el archivo de configuración JAAS
La autenticación de Kerberos requiere un archivo de configuración del Servicio de Autenticación y Autorización de Java (JAAS).
Linux
Ejecuta el siguiente comando para crear el directorio:
mkdir -p /opt/jitterbit/kerberos
Ejecuta el siguiente comando para crear el archivo de configuración:
vi /opt/jitterbit/kerberos/jaas.conf
Contenido de ejemplo
com.sun.security.jgss.krb5.initiate {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=true
useKeyTab=false
storeKey=false
isInitiator=true
doNotPrompt=true
renewTGT=false
debug=true
refreshKrb5Config=true;
};
SQLJDBCDriver {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=true
useKeyTab=false
storeKey=false
isInitiator=true
doNotPrompt=true
renewTGT=false
debug=true
refreshKrb5Config=true;
};
Windows
Crea el archivo jaas.conf utilizando la misma estructura mostrada arriba. Elige una ubicación a la que el agente privado pueda acceder sin requerir privilegios elevados, como:
C:\Jitterbit\kerberos
Referencia de parámetros JAAS
useTicketCache=true: Utiliza el ticket de Kerberos obtenido a través dekinit.useKeyTab=false: No utiliza un archivo keytab.storeKey=false: No almacena una clave secreta.isInitiator=true: Configura este cliente como el iniciador de la autenticación.doNotPrompt=true: No solicita una contraseña.renewTGT=false: No renueva automáticamente el Ticket Granting Ticket (TGT).debug=true: Habilita los registros de depuración de Kerberos. (Opcional)refreshKrb5Config=true: Recarga la configuración de Kerberos dinámicamente.
Establecer permisos de archivo (solo Linux)
La autenticación de Kerberos requiere permisos de archivo adecuados para funcionar correctamente. Si los archivos no son legibles, la autenticación fallará con el siguiente error:
Could not initialize class com.microsoft.sqlserver.jdbc.KerbAuthentication
Ejecuta los siguientes comandos para establecer los permisos requeridos:
chmod 644 /opt/jitterbit/kerberos/jaas.conf
chmod 644 /etc/krb5.conf
chmod 644 /tmp/krb5cc_agent
Paso 6: Configurar Tomcat (setenv.sh)
Linux
Utiliza el siguiente comando para abrir el script de inicio de Tomcat en /opt/jitterbit/tomcat/bin/setenv.sh:
vi /opt/jitterbit/tomcat/bin/setenv.sh
Contenido de ejemplo
#!/bin/sh
JAVA_OPTS="$JAVA_OPTS \
-Djava.security.krb5.conf=/etc/krb5.conf \
-Dsun.security.jgss.native=true \
-Djava.security.auth.login.config=/opt/jitterbit/kerberos/jaas.conf \
-Dsun.security.krb5.debug=true \
-Djavax.security.auth.useSubjectCredsOnly=false"
export KRB5CCNAME=/tmp/krb5cc_agent
export JAVA_OPTS
Windows
Para el agente privado de Windows, no es necesario crear un archivo setenv.sh. En su lugar, agrega los parámetros JAVA_OPTS mostrados arriba siguiendo las instrucciones en Configurar opciones de Java para agentes privados.
Al establecer KRB5CCNAME, toma nota de la ruta, ya que necesitarás especificarla nuevamente en Paso 8 al crear la caché de tickets.
Si la prueba de conexión devuelve un error que menciona jgss o gss, intenta lo siguiente:
- Elimina el parámetro
-Dsun.security.jgss.native=true. - Agrega
udp_preference_limit = 1a la sección[libdefaults]dekrb5.conf. - Reinicia el agente para que los cambios surtan efecto.
Referencia de parámetros
java.security.krb5.conf: La ruta al archivo de configuración de Kerberos.sun.security.jgss.native=true: Habilita la implementación nativa de Servicios de Seguridad Genéricos (GSS).java.security.auth.login.config: La ruta al archivo de configuración de JAAS.sun.security.krb5.debug=true: Habilita los registros de depuración de Kerberos (opcional).javax.security.auth.useSubjectCredsOnly=false: Permite el uso de credenciales externas.
Paso 7: Reiniciar el agente privado
Después de cualquier cambio de configuración, reinicia el agente privado.
Linux
Ejecuta el siguiente comando para reiniciar el agente:
sudo jitterbit restart
Si usas un agente de Docker, reinicia el contenedor:
docker restart <CONTAINER_NAME>
Después de reiniciar, repite Paso 1.
Windows
Para reiniciar el agente privado de Windows, utiliza los accesos directos de detener e iniciar creados durante la instalación del agente:
Detener Servicios de Jitterbit
Iniciar Servicios de Jitterbit
Paso 8: Obtener un ticket de Kerberos
Esta configuración utiliza una caché de tickets de Kerberos, que es dependiente del usuario. Los siguientes comandos crean una caché de tickets a la que Tomcat accede en tiempo de ejecución. Es posible que se te pida que ingreses una contraseña.
Linux
Ejecuta el siguiente comando para crear la caché de tickets:
kinit -c /tmp/krb5cc_agent <USER>@<REALM>
Verifica que el ticket fue creado:
klist -c /tmp/krb5cc_agent
Windows
En Windows, utiliza la misma ruta especificada para KRB5CCNAME en Paso 6.
Ejecuta el siguiente comando para crear la caché del ticket:
kinit -c <TICKET_CACHE_PATH> <USER>@<REALM>
Verifica que el ticket fue creado:
klist -c <TICKET_CACHE_PATH>
Si no aparece ningún ticket, la autenticación fallará.
Nota
Los tickets de Kerberos expiran. Ejecuta kinit nuevamente para renovar el ticket según sea necesario.
Paso 9: Configurar la conexión a la base de datos
Configura la fuente de base de datos o destino con los siguientes ajustes:
- Tipo de controlador: Selecciona JDBC.
- Controlador: Selecciona SQL Server (Microsoft).
-
En Opciones, selecciona la casilla Construir la cadena de conexión manualmente e ingresa lo siguiente:
jdbc:sqlserver://<SQL_SERVER_HOST>:<PORT>;databaseName=<DATABASE>;integratedSecurity=true;authenticationScheme=JavaKerberos;encrypt=false
Configura la cadena de conexión utilizando los siguientes valores:
<SQL_SERVER_HOST>: El nombre de dominio completamente calificado (FQDN) del SQL Server.<PORT>: El número de puerto del SQL Server, típicamente1433.<DATABASE>: El nombre de la base de datos de destino.encrypt: Establecer entrueofalsedependiendo de tu entorno.trustServerCertificate=true: Requerido si se utiliza Seguridad de Capa de Transporte (TLS) sin una autoridad de certificación (CA) confiable.