Este documento descreve como configurar o gerenciador de trabalhos de Sintéticos (SJM) para executar monitores com suporte à autenticação Kerberos. Ele também inclui um passo a passo opcional para configurar um Centro de Distribuição de Chaves (KDC) Kerberos e um aplicativo web protegido por SPNEGO em uma instância de EC2 do Amazon Linux 2023, para que você possa validar a configuração antes de apontar o gerenciador de trabalhos para o seu próprio realm.
Valores de espaço reservado
Antes de começar, identifique os seguintes valores para o seu ambiente. Substitua cada espaço reservado pelo seu próprio valor onde quer que ele apareça neste documento.
Espaço reservado | Descrição | Exemplo |
|---|---|---|
| Realm do Kerberos (deve estar em maiúsculas) |
|
| Endereço IPv4 privado da instância de EC2 |
|
| Nome de domínio totalmente qualificado (FQDN) do aplicativo web |
|
| Identidade Kerberos atribuída aos workers de Sintéticos |
|
| Caminho completo no host onde o keytab do cliente está armazenado |
|
| Chave de localização privada da New Relic |
|
Requisitos e compatibilidade
A autenticação Kerberos depende de acesso direto à rede para o seu Key Distribution Center (KDC), resolução de DNS interno e relógios rigorosamente sincronizados. Essas restrições limitam onde você pode executá-la, portanto, revise os seguintes requisitos antes de começar.
Oferecemos suporte à autenticação Kerberos nestes ambientes:
- Localizações privadas que executam o gerenciador de tarefas Sintético em um ambiente de contêiner Docker
- Localizações privadas que executam o gerenciador de jobs de Sintéticos em um ambiente de contêiner Podman
Não oferecemos suporte à autenticação Kerberos nestes ambientes:
- Localizações públicas, que não têm rota de rede para o seu KDC interno
- Ambientes do gerenciador de jobs do Kubernetes e do OpenShift
O gerenciador de jobs fornece credenciais Kerberos apenas para jobs de monitor de navegador. Monitores de API com script e monitores de ping são executados sem autenticação Kerberos.
Cada contêiner de tempo de execução do navegador adquire seu próprio ticket Kerberos (via kinit, antes do lançamento do Chrome), portanto, sua localização privada também deve atender a estes requisitos:
- Acesse seu KDC na porta 88 TCP e UDP de dentro dos contêineres de tempo de execução.
- Resolva os nomes do host do seu KDC e do aplicativo de destino de dentro dos contêineres de tempo de execução. Nas implantações do Docker, se o DNS interno não os resolver, mapeie-os com
RUNTIME_EXTRA_HOSTS— esta variável é exclusiva do Docker. As implantações do Podman dependem do DNS interno. - Mantenha o relógio do host da localização privada com uma diferença máxima de 5 minutos em relação ao relógio do KDC, usando um serviço como
chrony. Os contêineres de tempo de execução compartilham o relógio do kernel do host, portanto, sincronizar o host é suficiente.
Parte 1: configurar um laboratório de testes Kerberos (opcional)
Dica
A Parte 1 cria um realm do Kerberos independente e um aplicativo de teste protegido para que você possa validar a configuração do gerenciador de trabalhos de ponta a ponta. Não é o caminho de produção e a New Relic não gerencia o seu KDC. Se você já executa um KDC do Kerberos ou um domínio do Active Directory, obtenha o nome do realm, o endereço do KDC e um keytab de cliente de quem o administra e, em seguida, pule para a Parte 2.
Parte 2: configurar o gerenciador de jobs de Sintéticos para o Kerberos
Para permitir que os contêineres do executor de navegador do Sintéticos resolvam automaticamente o KDC, adquiram tickets Kerberos e se autentiquem em endpoints protegidos, adicione as seguintes variáveis de ambiente Kerberos e a montagem de volume keytab ao comando que inicia o seu gerenciador de trabalhos.
Cuidado
Quando você ativa o Kerberos em uma localização privada, cada trabalho de monitor de navegador nessa localização recebe a montagem keytab e as variáveis de ambiente Kerberos. O gerenciador de jobs não filtra credenciais por monitor ou por URL. O Chrome decide quais hosts recebem um ticket Kerberos com base apenas em KERBEROS_HOST_ALLOWLIST, portanto, mantenha essa lista de permissões o mais restrita possível.
Importante
Defina todas as quatro variáveis KERBEROS_*, ou não defina nenhuma delas. Se definir apenas algumas, o gerenciador de tarefas Sintético falha ao iniciar e registra um erro de configuração incompleta do Kerberos.
Comando padrão (sem Kerberos)
$docker run -e PRIVATE_LOCATION_KEY=<PRIVATE_LOCATION_KEY> \> -d --restart unless-stopped \> -v /var/run/docker.sock:/var/run/docker.sock:rw \> newrelic/synthetics-job-managerComando obrigatório (com suporte a Kerberos habilitado)
Adicione as quatro variáveis de ambiente KERBEROS_* (-e) e a montagem de volume keytab (-v) ao comando que você já usa para iniciar o gerenciador de trabalhos.
Parte 3: solução de problemas de autenticação Kerberos
Se a inicialização do Kerberos falhar dentro do contêiner de tempo de execução, o pipeline de inicialização do contêiner ainda faz o lançamento do navegador e executa o seu monitor. O monitor então falha em um endpoint protegido com um desafio HTTP 401 ou um tempo limite de navegação, e adicionamos a tag de causa raiz KerberosInitWarning ao resultado. Como a falha parece um tempo limite comum, verifique os logs do seu job em busca dos seguintes códigos de erro antes de investigar o script do monitor.
Esses códigos são separados da validação de inicialização na Parte 2 — se você definir apenas algumas das variáveis KERBEROS_*, o gerenciador de trabalhos falhará ao iniciar imediatamente, e nenhum desses códigos aparecerá nos logs de um trabalho.
Código de erro | Causa | O que fazer |
|---|---|---|
| O contêiner de tempo de execução não consegue acessar o KDC pela rede. | Verifique as regras de firewall para a porta TCP e UDP 88 entre o host da sua localização privada e o KDC. |
| O principal não corresponde ao keytab, ou o keytab está danificado. | Verifique o keytab no host executando
. |
| O relógio do host difere do relógio do KDC em mais de 5 minutos. | Sincronize o relógio do host com o NTP, usando um serviço como
. |
| O contêiner não consegue resolver o nome do host do KDC ou o realm. | Verifique as configurações do resolvedor DNS interno para o contêiner do seu gerenciador de tarefas ou mapeie os hosts com
. |
| O contêiner de tempo de execução não consegue ler o keytab montado, ou nenhum principal pôde ser analisado a partir dele (um keytab vazio ou malformado). | Verifique se o keytab pode ser lido dentro do contêiner de tempo de execução e se contém pelo menos um principal:
. |
| Uma falha criptográfica ou de GSSAPI no nível do sistema interrompeu o handshake. | Compare os tipos de criptografia no seu keytab de cliente (
lista o enctype de cada entrada) com o valor
configurado no seu KDC na etapa 3. Uma incompatibilidade entre o que o keytab oferece e o que o KDC aceita causa a maioria dessas falhas. |