2 votes

Séparation du composant CA du maître de marionnettes

Nous mettons à l'échelle notre infrastructure puppet et aimerions séparer le composant CA du serveur maître puppet vers un autre serveur. Une partie du changement implique un changement de nom de serveur pour le maître puppet aussi.

Je rencontre un problème où je n'arrive pas à faire fonctionner correctement la directive ca_server dans la section [main] ou [agent]. Elle ne prend simplement pas effet. Ainsi, lorsque je change server= vers le nouveau nom de serveur, cela casse la capacité de l'agent à se connecter car le nom de serveur a changé et ne correspond plus au certificat.

Je ne suis pas un expert en puppet mais ce que je pense devoir faire est de créer un certificat SAN avec les anciens et nouveaux noms (pour plus de sécurité), puis de resigner tous les nœuds agents à nouveau, ce qui sera une véritable corvée.

Y a-t-il un moyen plus rapide/intelligent de procéder ? Nous avons déjà des centaines de nœuds agents là-bas et les resigner individuellement sera une tâche laborieuse.

0 votes

Hm, êtes-vous sûr que le problème est que ca_server ne fonctionne pas? Il me semble que votre Puppet master n'a pas de certificat qui inclut son nouveau nom comme nom alternatif, mais peut-être que je comprends mal la description du problème. Vous devrez certainement émettre un nouveau certificat pour le Puppet master qui inclut les deux noms.

4voto

Felix Points 910

Nous avons abordé cela d'une manière différente, qui semble être plus flexible et fiable à long terme.

Nous avons créé un serveur apache frontend, exécutant mod_proxy et mod_balancer. Cela identifie ensuite la demande URL entrante et dirige les demandes liées à CA vers un serveur CA local, et les demandes de puppetmaster vers un pool de puppetmasters. Cela présente l'avantage supplémentaire que nous pouvons avoir un ou plusieurs serveurs différents gérant différents environnements.

Les puppetmasters doivent être configurés pour accepter les informations d'authentification du serveur frontend.

Définir le balancer (remarque, le délai de 600 est important) :

  BalancerMember http://pupappprd01.its.auckland.ac.nz:18140 timeout=600
  BalancerMember http://pupappprd02.its.auckland.ac.nz:18140 timeout=600
  BalancerMember http://pupappprd03.its.auckland.ac.nz:18140 timeout=600

# CA, facts and filebucket server

  BalancerMember http://puprepprd01.its.auckland.ac.nz:18140

Maintenant définir le frontend :

Listen 8140

  SSLEngine on
  SSLProtocol -ALL +SSLv3 +TLSv1
  SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:-LOW:-SSLv2:-EXP
  SSLCertificateKeyFile /var/lib/puppet/ssl/private_keys/puppet.auckland.ac.nz.pem
  SSLCertificateFile /var/lib/puppet/ssl/certs/puppet.auckland.ac.nz.pem
  SSLCACertificateFile /var/lib/puppet/ssl/ca/ca_crt.pem
  SSLCertificateChainFile /var/lib/puppet/ssl/ca/ca_crt.pem
  SSLCARevocationFile     /var/lib/puppet/ssl/ca/ca_crl.pem
  SSLVerifyClient optional
  SSLVerifyDepth  1
  SSLOptions +StdEnvVars

  # Envoyer les infos aux travailleurs en aval
  RequestHeader set X-SSL-Subject %{SSL_CLIENT_S_DN}e
  RequestHeader set X-Client-DN %{SSL_CLIENT_S_DN}e
  RequestHeader set X-Client-Verify %{SSL_CLIENT_VERIFY}e

    SetHandler balancer-manager
    Order allow,deny
    Allow from all

  # Le manifeste peut prendre jusqu'à 10 minutes pour se construire (le délai par défaut est de 2 minutes)
  Timeout 600
  ProxyTimeout 600
  # Ceci est nécessaire pour éviter une condition de course qui pourrait provoquer
  # le blocage de l'agent puppet
  SetEnv proxy-nokeepalive 1
  SetEnv proxy-initial-not-pooled 1

  ProxyPreserveHost On

  # CA - centraliser l'authentification
  # les membres du cluster puppetmasterca vont synchroniser les magasins de certificats
  ProxyPassMatch   ^(/.*?)/(certificate.*?)/(.*)$ balancer://puppetmasterca
  ProxyPassReverse ^(/.*?)/(certificate.*?)/(.*)$ balancer://puppetmasterca

  # Filebucket - cela doit être sur le serveur central pour minimiser la duplication
  # les membres du cluster puppetmasterca vont synchroniser le file bucket
  ProxyPassMatch   ^(/.*?)/file_bucket_file/(.*)$ balancer://puppetmasterca
  ProxyPassReverse ^(/.*?)/file_bucket_file/(.*)$ balancer://puppetmasterca

  # Toutes les mises à jour de rapport sont gérées par les serveurs centraux
  # Ceux-ci vont ensuite téléverser les rapports au tableau de bord, en fonction des paramètres
  # dans le puppet.conf pour cet environnement
  ProxyPassMatch   ^(/.*?)/report/(.*)$ balancer://puppetmasterca
  ProxyPassReverse ^(/.*?)/report/(.*)$ balancer://puppetmasterca

  # Serveurs de production - catalogue, cache, facts, métadonnées de fichiers et fetch
  # Ces serveurs se synchronisent tous les 15 minutes avec subversion
  # Il faut un délai prolongé car certaines générations de manifeste peuvent être lentes.
  5 minutes devraient être suffisantes.
  ProxyPassMatch   ^/production/ balancer://puppetmaster timeout=600
  ProxyPassReverse ^/production/ balancer://puppetmaster timeout=600

Maintenant, nous pouvons définir le puppetmaster gérant les demandes sur le serveur CA et sur le Puppetmaster. Notez comment nous transmettons les infos d'authentification dans les champs d'en-tête supplémentaires :

Listen 18140

  SSLEngine off

  # Obtenir des informations d'authentification des en-têtes de demande du client
  SetEnvIf X-Client-Verify "(.*)" SSL_CLIENT_VERIFY=$1
  SetEnvIf X-Client-DN "(.*)" SSL_CLIENT_S_DN=$1

  RackAutoDetect On
  DocumentRoot /usr/share/puppet/rack/puppetmasterd/public

      Options None
      AllowOverride None
      Order allow,deny
      allow from 127.0.0.1
      allow from puprepprd01.its.auckland.ac.nz
      deny from all

    LogLevel warn
    ErrorLog /var/log/httpd/puppetmaster_error.log
    CustomLog /var/log/httpd/puppetmaster_access.log combined

Dans le puppet.conf, vous avez besoin de quelques lignes supplémentaires pour extraire les informations d'authentification de l'environnement :

[master]
    ssl_client_header = HTTP_X_CLIENT_DN
    ssl_client_verify_header = HTTP_X_CLIENT_VERIFY

C'est plus complexe, mais cela nous permet de nous étendre horizontalement et de séparer les environnements sur nos propres serveurs puppetmaster autant que nous le voulons. Un serveur séparé contient le frontend du rapport et CA (bien que cela puisse être divisé en plusieurs backends CA si vous mettez en place une sorte de réplication de certificat).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X