Une machine qu'on configure à la main après son démarrage est une machine qu'on ne saura pas recréer. Cette leçon montre comment préparer une instance au moment où elle démarre, avec une image système et un fichier de configuration, puis comment elle obtient ses identifiants sans qu'aucun secret n'ait été stocké dessus.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Préparer une machine au démarrage avec cloud-init, sans y toucher ensuite.
- Distinguer ce qui appartient à l'image de ce qui appartient au démarrage.
- Comprendre le service de métadonnées, qui donne à la machine son identité.
- Protéger ce service, cible d'une classe d'attaques bien connue.
L'image, et la préparation au démarrage
Section intitulée « L'image, et la préparation au démarrage »Une image est le disque de départ de votre machine. Trois façons de faire cohabitent, et le choix a des conséquences sur la sécurité comme sur le temps de démarrage.
| Approche | Comment | Ce qu'elle coûte |
|---|---|---|
| Image officielle plus configuration au démarrage | cloud-init installe et configure | démarrage plus long, dépendances externes |
| Image préparée par vous | construite en amont, prête à l'emploi | un travail de fabrication, et un cycle de mise à jour |
| Image officielle plus configuration manuelle | quelqu'un se connecte et installe | à éviter : rien n'est reproductible |
La troisième ligne mérite son avertissement. Une machine configurée à la main est une machine que personne ne saura recréer à l'identique, y compris celui qui l'a faite. Le jour où elle tombe, l'incident dure le temps de retrouver ce qui avait été installé.
cloud-init est le mécanisme standard, présent sur pratiquement toutes les images Linux officielles, quel que soit le fournisseur. Il lit une configuration que vous fournissez à la création et l'applique au premier démarrage.
#cloud-configpackage_update: truepackages: - nginxusers: - name: appli groups: [sudo] shell: /bin/bash ssh_authorized_keys: - ssh-ed25519 AAAA... votre-clewrite_files: - path: /etc/nginx/conf.d/app.conf content: | server { listen 8080; root /var/www/app; }runcmd: - systemctl enable --now nginxLe service de métadonnées : ce que votre machine sait d'elle-même
Section intitulée « Le service de métadonnées : ce que votre machine sait d'elle-même »Chaque machine du cloud peut interroger une adresse locale spéciale qui lui répond sur sa propre configuration, et, surtout, lui remet des identifiants temporaires. C'est le mécanisme qui rend possible l'identité attachée à la ressource décrite dans le principe API-first : la machine n'a aucun secret stocké, elle demande un jeton au moment de s'en servir.
Cette adresse est locale au serveur physique : elle n'est pas routée, elle ne répond qu'aux processus de la machine elle-même, et la réponse est propre à cette machine.