Ce document décrit comment configurer le gestionnaire de tâches Synthetics (SJM) pour exécuter des moniteurs avec la prise en charge de l’authentification Kerberos. Il inclut également un guide facultatif pour configurer un centre de distribution de clés (KDC) Kerberos, et une application web protégée par SPNEGO sur une instance Amazon Linux 2023 EC2, afin que vous puissiez valider la configuration avant de diriger le gestionnaire de tâches vers votre propre domaine.
Valeurs d’espace réservé
Avant de commencer, identifiez les valeurs suivantes pour votre environnement. Remplacez chaque espace réservé par votre propre valeur partout où il apparaît dans ce document.
Espace réservé | Description | Exemple |
|---|---|---|
| Domaine Kerberos (doit être en majuscules) |
|
| Adresse IPv4 privée de l'instance EC2 |
|
| Nom de domaine entièrement qualifié (FQDN) de l’application web |
|
| Identité Kerberos attribuée aux workers Synthetics |
|
| Chemin complet sur l'hôte où le keytab client est stocké |
|
| Clé de site privé New Relic |
|
Exigences et compatibilité
L’authentification Kerberos dépend de l’accès réseau direct à votre centre de distribution de clés (KDC), de la résolution DNS interne, et d’horloges étroitement synchronisées. Ces contraintes limitent les endroits où vous pouvez l’exécuter, passez donc en revue les exigences suivantes avant de commencer.
Nous prenons en charge l’authentification Kerberos dans ces environnements :
- Sites privés qui exécutent le gestionnaire de tâches Synthetics dans un environnement de conteneur Docker
- Sites privés qui exécutent le gestionnaire de tâches Synthetics dans un environnement de conteneur Podman
Nous ne prenons pas en charge l’authentification Kerberos dans ces environnements :
- Emplacements publics, qui n’ont aucune route réseau vers votre KDC interne
- Environnements de gestionnaire de tâches Kubernetes, et OpenShift
Le gestionnaire de jobs fournit des identifiants Kerberos uniquement aux jobs pour monitorer le navigateur. Les moniteurs d’API scriptés, et les moniteurs de ping s’exécutent sans authentification Kerberos.
Chaque conteneur d’exécution de navigateur acquiert son propre ticket Kerberos (via kinit, avant le lancement de Chrome), votre site privé doit donc également répondre à ces exigences :
- Accédez à votre KDC sur le port TCP et UDP 88 depuis l’intérieur des conteneurs d’exécution.
- Résolvez votre KDC et les noms d’hôte de l’application cible depuis l’intérieur des conteneurs d’exécution. Sur les déploiements Docker, si le DNS interne ne les résout pas, mappez-les avec
RUNTIME_EXTRA_HOSTS(cette variable est spécifique à Docker). Les déploiements Podman dépendent du DNS interne. - Maintenez l’horloge de l’hôte du site privé à moins de 5 minutes de l’horloge du KDC, en utilisant un service tel que
chrony. Les conteneurs d’exécution partagent l’horloge du noyau de l’hôte, il suffit donc de synchroniser l’hôte.
Partie 1 : configurer un laboratoire de test Kerberos (facultatif)
Conseil
La partie 1 crée un domaine Kerberos autonome, et une application de test protégée, afin que vous puissiez valider la configuration du gestionnaire de tâches de bout en bout. Il ne s’agit pas du chemin de production, et New Relic ne gère pas votre KDC. Si vous exécutez déjà un KDC Kerberos, ou un domaine Active Directory, obtenez le nom du domaine, l’adresse du KDC, et un keytab client auprès de la personne qui l’administre, puis passez à la partie 2.
Partie 2 : configurer le gestionnaire de tâches Synthetics pour Kerberos
Pour permettre aux conteneurs d'exécuteur de navigateur Synthetics de résoudre automatiquement le KDC, d'acquérir des tickets Kerberos, et de s'authentifier auprès des points de terminaison protégés, ajoutez les variables d'environnement Kerberos et le montage de volume keytab suivants à la commande qui démarre votre gestionnaire de tâches.
Prudence
Lorsque vous activez Kerberos sur un site privé, chaque tâche de monitoring de navigateur sur ce site reçoit le montage du keytab et les variables d’environnement Kerberos. Le gestionnaire de tâches ne filtre pas les identifiants par moniteur, ni par URL. Chrome décide quels hôtes reçoivent un ticket Kerberos en se basant uniquement sur KERBEROS_HOST_ALLOWLIST; gardez donc cette liste d’autorisation aussi restreinte que possible.
Important
Définissez les quatre variables KERBEROS_*, ou n’en définissez aucune. Si vous n’en définissez que certaines, le gestionnaire de jobs Synthetics ne parvient pas à démarrer, et enregistre une erreur de configuration Kerberos incomplète dans les logs.
Commande standard (sans 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-managerCommande requise (avec la prise en charge de Kerberos activée)
Ajoutez les quatre variables d’environnement KERBEROS_* (-e) et le montage du volume keytab (-v) à la commande que vous utilisez déjà pour démarrer le gestionnaire de tâches.
Partie 3 : dépanner l’authentification Kerberos
Si l’initialisation de Kerberos échoue à l’intérieur du conteneur d’exécution, le pipeline de démarrage du conteneur procède tout de même au lancement du navigateur, et exécute votre moniteur. Le moniteur échoue ensuite contre un point de terminaison protégé avec un challenge HTTP 401, ou un délai de navigation dépassé, et nous ajoutons un tag au résultat avec une cause racine KerberosInitWarning. Comme l’échec ressemble à un dépassement de délai ordinaire, vérifiez vos logs de tâches pour trouver les codes d’erreur suivants avant d’enquêter sur le script du moniteur.
Ces codes sont distincts de la validation de démarrage de la Partie 2 — si vous ne définissez que certaines des variables KERBEROS_*, le gestionnaire de jobs ne démarre tout simplement pas, et aucun de ces codes n’apparaîtra jamais dans les logs d’un job.
Code d’erreur | Cause | Que faire |
|---|---|---|
| Le conteneur d’exécution ne peut pas atteindre le KDC sur le réseau. | Vérifiez les règles du pare-feu pour le port TCP, et UDP 88 entre l’hôte de votre site privé, et le KDC. |
| Le principal ne correspond pas au keytab, ou le keytab est endommagé. | Vérifiez le keytab sur l’hôte en exécutant
. |
| L’horloge de l’hôte diffère de l’horloge du KDC de plus de 5 minutes. | Synchronisez l’horloge de l’hôte avec NTP, en utilisant un service tel que
. |
| Le conteneur ne peut pas résoudre le nom d’hôte du KDC, ou le domaine. | Vérifiez les paramètres du résolveur DNS interne pour votre conteneur de gestionnaire de jobs, ou mappez les hôtes avec
. |
| Le conteneur d’exécution ne peut pas lire le keytab monté, ou aucun principal n’a pu en être extrait (un keytab vide, ou malformé). | Vérifiez que le keytab est lisible à l’intérieur du conteneur d’exécution et contient au moins un principal :
. |
| Une défaillance cryptographique, ou GSSAPI au niveau du système a interrompu la négociation. | Comparez les types de chiffrement dans votre keytab client (
répertorie le type de chiffrement de chaque entrée) avec la valeur
configurée sur votre KDC à l’étape 3. Une inadéquation entre ce que le keytab propose, et ce que le KDC accepte provoque la plupart de ces échecs. |