Autenticação Kerberos do SQL Server
Este guia descreve como configurar uma conexão de banco de dados para autenticar com o Microsoft SQL Server usando autenticação de cache de ticket Kerberos (kinit).
Nota
Esta configuração é suportada apenas para agentes privados do Jitterbit.
Nota
O comportamento da autenticação Kerberos e SQL Server pode variar dependendo da configuração do Microsoft Active Directory, resolução de DNS, roteamento de rede e outros fatores específicos do ambiente.
Pré-requisitos
Antes de começar, certifique-se de que o seguinte esteja em vigor:
-
Um agente privado do Jitterbit.
-
Acesso à rede para o seguinte:
-
Um Controlador de Domínio do Active Directory (Centro de Distribuição de Chaves, ou KDC).
-
O host do SQL Server.
-
-
Uma conta de usuário válida do Active Directory.
-
Um Nome de Principal de Serviço (SPN) configurado no Active Directory para o SQL Server no seguinte formato:
MSSQLSvc/<SQL_SERVER_HOST>:<PORT>
Etapa 1: Garantir a resolução de DNS para o KDC
O Kerberos requer uma resolução de DNS adequada para localizar o KDC.
Linux
Em alguns ambientes, o DNS pode precisar ser ajustado. Substitua os seguintes espaços reservados pelos seus valores:
<AD_DNS_IP>: O servidor DNS que pode resolver o domínio do Active Directory.<SECONDARY_DNS_IP>: Um servidor DNS de fallback opcional.
Esta é uma configuração temporária. Execute esses comandos novamente cada vez que o contêiner reiniciar:
cat > /etc/resolv.conf <<EOF
nameserver <AD_DNS_IP>
nameserver <SECONDARY_DNS_IP>
EOF
Windows
Se o dispositivo que executa o agente privado do Windows já estiver associado ao mesmo domínio que o KDC, nenhuma configuração adicional é necessária. Caso contrário, adicione as entradas necessárias ao C:\Windows\System32\drivers\etc\hosts para que o dispositivo possa resolver os nomes do KDC e do SQL Server.
Etapa 2: Instalar utilitários de cliente Kerberos
Linux
O host do agente privado deve ter as ferramentas do Kerberos instaladas. Essas ferramentas são necessárias para criar o cache de tickets e para validar a comunicação com o KDC e a criação de tickets de serviço.
Execute os seguintes comandos para instalar krb5-user:
apt-get update
apt-get install krb5-user
Isso instala o seguinte:
kinitklist- Bibliotecas do Kerberos
Windows
As ferramentas do Kerberos estão disponíveis nativamente no Windows. Se não estiverem instaladas, faça o download em https://ist.mit.edu/mit-apps/kerberos-win.
Passo 3: Testar a resolução de DNS
Verifique se o agente consegue resolver o nome do host do KDC.
Linux
Execute o seguinte comando para instalar utilitários de DNS:
apt-get update
apt-get install dnsutils
Em seguida, teste a resolução de DNS:
nslookup <DOMAIN_CONTROLLER_HOSTNAME>
Exemplo
nslookup ad.dev.local
Windows
Execute o seguinte comando para testar a resolução de nomes:
ping <DOMAIN_CONTROLLER_HOSTNAME>
Exemplo
ping ad.dev.local
Se a resolução falhar, a autenticação do Kerberos não funcionará.
Passo 4: Criar o arquivo de configuração do Kerberos (krb5.conf)
Linux
Use o seguinte comando para criar ou editar o arquivo de configuração em /etc/krb5.conf:
vi /etc/krb5.conf
Conteúdo de exemplo
[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
Crie o arquivo krb5.conf usando a mesma estrutura mostrada acima. Escolha um local que o agente privado possa acessar sem exigir privilégios elevados, como:
C:\Jitterbit\kerberos
Parâmetros de configuração
[libdefaults]
default_realm: O nome do domínio do Active Directory em letras maiúsculas.rdns = false: Impede problemas de pesquisa reversa de DNS.dns_lookup_kdc = false: Desabilita a descoberta automática do KDC via DNS.dns_lookup_realm = false: Desabilita a descoberta automática do reino via DNS.
[realms]
kdc: O nome do host do controlador de domínio.admin_server: O controlador de domínio para operações administrativas.
[domain_realm]
Mapeia domínios DNS para o reino Kerberos.
Passo 5: Crie o arquivo de configuração JAAS
A autenticação Kerberos requer um arquivo de configuração do Serviço de Autenticação e Autorização Java (JAAS).
Linux
Execute o seguinte comando para criar o diretório:
mkdir -p /opt/jitterbit/kerberos
Execute o seguinte comando para criar o arquivo de configuração:
vi /opt/jitterbit/kerberos/jaas.conf
Conteúdo de exemplo
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
Crie o arquivo jaas.conf usando a mesma estrutura mostrada acima. Escolha um local que o agente privado possa acessar sem exigir privilégios elevados, como:
C:\Jitterbit\kerberos
Referência de parâmetros JAAS
useTicketCache=true: Usa o ticket Kerberos obtido viakinit.useKeyTab=false: Não usa um arquivo keytab.storeKey=false: Não armazena uma chave secreta.isInitiator=true: Configura este cliente como o iniciador da autenticação.doNotPrompt=true: Não solicita uma senha.renewTGT=false: Não renova automaticamente o Ticket Granting Ticket (TGT).debug=true: Habilita logs de depuração do Kerberos. (Opcional)refreshKrb5Config=true: Recarrega a configuração do Kerberos dinamicamente.
Defina permissões de arquivo (somente Linux)
A autenticação Kerberos requer permissões de arquivo adequadas para funcionar corretamente. Se os arquivos não forem legíveis, a autenticação falhará com o seguinte erro:
Could not initialize class com.microsoft.sqlserver.jdbc.KerbAuthentication
Execute os seguintes comandos para definir as permissões necessárias:
chmod 644 /opt/jitterbit/kerberos/jaas.conf
chmod 644 /etc/krb5.conf
chmod 644 /tmp/krb5cc_agent
Passo 6: Configure o Tomcat (setenv.sh)
Linux
Use o seguinte comando para abrir o script de inicialização do Tomcat em /opt/jitterbit/tomcat/bin/setenv.sh:
vi /opt/jitterbit/tomcat/bin/setenv.sh
Conteúdo de exemplo
#!/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 o agente privado do Windows, não é necessário criar um arquivo setenv.sh. Em vez disso, adicione os parâmetros JAVA_OPTS mostrados acima seguindo as instruções em Configurar opções Java para agentes privados.
Ao definir KRB5CCNAME, observe o caminho, pois será necessário especificá-lo novamente no Passo 8 ao criar o cache de tickets.
Se o teste de conexão retornar um erro mencionando jgss ou gss, tente o seguinte:
- Remova o parâmetro
-Dsun.security.jgss.native=true. - Adicione
udp_preference_limit = 1à seção[libdefaults]dokrb5.conf. - Reinicie o agente para que as alterações tenham efeito.
Referência de parâmetros
java.security.krb5.conf: O caminho para o arquivo de configuração do Kerberos.sun.security.jgss.native=true: Habilita a implementação nativa dos Serviços de Segurança Genéricos (GSS).java.security.auth.login.config: O caminho para o arquivo de configuração JAAS.sun.security.krb5.debug=true: Habilita logs de depuração do Kerberos (opcional).javax.security.auth.useSubjectCredsOnly=false: Permite o uso de credenciais externas.
Passo 7: Reiniciar o agente privado
Após qualquer alteração de configuração, reinicie o agente privado.
Linux
Execute o seguinte comando para reiniciar o agente:
sudo jitterbit restart
Se estiver usando um agente Docker, reinicie o contêiner:
docker restart <CONTAINER_NAME>
Após reiniciar, repita o Passo 1.
Windows
Para reiniciar o agente privado do Windows, use os atalhos de parar e iniciar criados durante a instalação do agente:
Stop Jitterbit Services
Start Jitterbit Services
Passo 8: Obter um ticket Kerberos
Esta configuração utiliza um cache de tickets Kerberos, que é dependente do usuário. Os seguintes comandos criam um cache de tickets que o Tomcat acessa em tempo de execução. Você pode ser solicitado a inserir uma senha.
Linux
Execute o seguinte comando para criar o cache de tickets:
kinit -c /tmp/krb5cc_agent <USER>@<REALM>
Verifique se o ticket foi criado:
klist -c /tmp/krb5cc_agent
Windows
No Windows, use o mesmo caminho especificado para KRB5CCNAME no Passo 6.
Execute o seguinte comando para criar o cache de tickets:
kinit -c <TICKET_CACHE_PATH> <USER>@<REALM>
Verifique se o ticket foi criado:
klist -c <TICKET_CACHE_PATH>
Se nenhum ticket aparecer, a autenticação falhará.
Nota
Os tickets Kerberos expiram. Execute kinit novamente para renovar o ticket conforme necessário.
Etapa 9: Configurar a conexão com o banco de dados
Configure a conexão com o banco de dados com as seguintes configurações:
- Tipo de driver: Selecione JDBC.
- Driver: Selecione SQL Server (Microsoft).
- Nome do servidor: Insira o nome, URL ou endereço IP do SQL Server.
- Nome do banco de dados: Insira o nome do banco de dados de destino.
- Login e Senha: Deixe esses campos em branco.
-
Em Configurações opcionais, selecione a caixa de seleção Usar string de conexão e insira o seguinte:
jdbc:sqlserver://<SQL_SERVER_HOST>:<PORT>;databaseName=<DATABASE>;integratedSecurity=true;authenticationScheme=JavaKerberos;encrypt=false
Configure a string de conexão usando os seguintes valores:
<SQL_SERVER_HOST>: O nome de domínio totalmente qualificado (FQDN) do SQL Server.<PORT>: O número da porta do SQL Server, tipicamente1433.<DATABASE>: O nome do banco de dados de destino.encrypt: Defina comotrueoufalsedependendo do seu ambiente.trustServerCertificate=true: Necessário se estiver usando Segurança de Camada de Transporte (TLS) sem uma autoridade certificadora (CA) confiável.