Une fois que vous avez importé manuellement un disque virtuel dans Compute Engine, vous devez optimiser ces images afin qu'elles puissent utiliser les fonctionnalités propres à l'environnement Compute Engine.
Sommaire
Installer l'environnement invité Compute Engine
Vous devez installer l'environnement invité pour pouvoir utiliser les principales fonctionnalités de Compute Engine. Si vous devez installer manuellement l'environnement invité, consultez la section Installer ou mettre à jour manuellement l'environnement invité.
Installez l'environnement invité sur l'instance de VM en cours d'exécution que vous avez créée après avoir importé manuellement l'image existante. Pour effectuer l'installation, accédez à l'instance de VM via SSH avec un compte utilisateur créé avant l'importation ou en interagissant avec la console série.
Configurer une image importée pour Compute Engine
Vous pouvez exécuter votre image de disque de démarrage dans Compute Engine sans apporter de modifications supplémentaires. Toutefois, il est également possible d'optimiser l'image afin qu'elle s'exécute au mieux dans Compute Engine et qu'elle ait accès à toutes les fonctionnalités de cette plate-forme.
Modifiez le fichier
ntp.conf
pour n'inclure que l'entrée de serveur NTP Googleserver metadata.google.internal iburst
.Définissez le fuseau horaire sur "UTC" :
sudo ln -sf /usr/share/zoneinfo/UTC /etc/localtime
Afin de garantir des performances réseau élevées, utilisez les configurations réseau recommandées présentées ci-dessous.
- Utilisez le client DHCP ISC.
- Définissez le MTU DHCP sur le MTU réseau. Le serveur DHCP Compute Engine diffuse ce paramètre en tant qu'option
interface-mtu
, ce que la plupart des clients respectent. Pour en savoir plus sur les MTU réseau, consultez la présentation des unités de transmission maximales. - Si vous ne prévoyez pas de configurer des adresses IPv6, désactivez IPv6.
Supprimez les règles de réseau persistantes pour empêcher l'instance de mémoriser les adresses MAC. Exemple :
rm -f /etc/udev/rules.d/70-persistent-net.rules
Désactivez le pare-feu du système d'exploitation, sauf si vous avez des besoins spécifiques qui ne sont pas couverts par les règles de pare-feu de la plate-forme Compute Engine. Cette dernière fournit un pare-feu pour le trafic entrant et sortant. Pour en savoir plus sur les pare-feu, consultez la page Présentation des règles de pare-feu.
Pour garantir des performances élevées au niveau du réseau et de la capacité des disques, désactivez ou supprimez le daemon
irqbalance
. Ce daemon n'équilibre pas correctement les requêtes IRQ pour les systèmes d'exploitation invités sur les instances de machine virtuelle (VM). Utilisez plutôt les scripts de l'environnement invité pour équilibrer de façon appropriée les paramètres IRQ des processeurs virtuels.Configurez l'accès SSH à l'image de base en procédant comme suit :
- Désactivez les connexions avec le compte racine via SSH.
- Désactivez l'authentification par mot de passe.
- Désactivez l'authentification basée sur l'hôte.
- Activez la vérification stricte de la clé de l'hôte.
- Utilisez
ServerAliveInterval
pour que les connexions restent ouvertes. Supprimez les clés SSH de votre image afin que les autres utilisateurs ne puissent pas accéder aux clés publiques ou privées associées à cette image. Utilisez plutôt Compute Engine pour gérer l'accès aux instances.
Modifiez le fichier
/etc/ssh/ssh_config
pour utiliser la configuration suivante :Host * Protocol 2 ForwardAgent no ForwardX11 no HostbasedAuthentication no StrictHostKeyChecking no Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc Tunnel no # Compute Engine times out connections after 10 minutes of inactivity. # Keep alive ssh connections by sending a packet every 7 minutes. ServerAliveInterval 420
Modifiez le fichier
/etc/ssh/sshd_config
pour utiliser la configuration suivante :# Disable PasswordAuthentication because ssh keys are more secure. PasswordAuthentication no # Disable root login. Using sudo provides better auditing. PermitRootLogin no PermitTunnel no AllowTcpForwarding yes X11Forwarding no # Compute Engine times out connections after 10 minutes of inactivity. # Keep alive ssh connections by sending a packet every 7 minutes. ClientAliveInterval 420
Après avoir configuré et optimisé votre disque de démarrage sur Compute Engine, créez une image à partir de ce disque de démarrage afin de pouvoir créer des instances à partir d'une version entièrement optimisée, plutôt que de devoir configurer chaque instance à sa création.
Définir les bonnes pratiques de sécurité
Vous devez veiller à toujours sécuriser l'environnement de votre système d'exploitation. Toutefois, il peut être difficile de trouver un équilibre entre sécurité et accessibilité. Les machines virtuelles vulnérables aux attaques peuvent consommer des ressources coûteuses. Google vous recommande vivement de vous assurer que vos images respectent les bonnes pratiques de sécurité suivantes :
- Réduisez le nombre de logiciels installés par défaut. Par exemple, vous pouvez effectuer une installation minimale de l'OS.
- Activez les mises à jour automatiques.
- Par défaut, désactivez tous les services réseau, sauf SSH, DHCP et NTPD. Vous pouvez autoriser un serveur de messagerie, tel que Postfix, à s'exécuter s'il n'accepte que les connexions de "localhost".
- N'autorisez pas les ports d'écoute externes, sauf pour sshd.
- Installez le package denyhosts pour empêcher les tentatives de connexion par force brute SSH.
- Supprimez tous les comptes non utilisateur inutiles de la version d'installation par défaut.
- Dans
/etc/passwd
, définissez l'interface système de tous les comptes non utilisateur sur/sbin/nologin
ou/usr/sbin/nologin
(selon l'emplacement où l'OS a installé "nologin"). - Dans
/etc/shadow
, configurez l'OS afin d'utiliser l'algorithme SHA512 salé pour les mots de passe. - Installez et configurez pam_cracklib pour les mots de passe sécurisés.
- Installez et configurez pam_tally pour verrouiller les comptes pendant cinq minutes après trois échecs.
Dans
/etc/shadow
, configurez le compte racine pour qu'il soit verrouillé par défaut. Exécutez la commande suivante pour le verrouiller :usermod -L root
Dans
/etc/ssh/sshd_config
, refusez les connexions avec le compte racine en ajoutant la ligne suivante :PermitRootLogin no
Créez des profils AppArmor ou SELinux pour tous les services réseau qui s'exécutent par défaut.
Utilisez les fonctionnalités du système de fichiers dans la mesure du possible pour ne pas avoir recours au bit S*ID et bénéficier d'un contrôle plus précis.
Activez les protections empêchant l'exploitation des failles des compilateurs et des environnements d'exécution lors de la compilation des logiciels réseau. À titre d'exemple, certaines des protections offertes par le système GNU Compiler Collection (GCC) et la procédure à suivre pour les activer sont présentées ci-dessous :
- Protection contre la destruction de pile : activez-la avec
-fstack-protector
. Par défaut, cette option protège les fonctions avec un tampon alloué à la pile de plus de huit octets. Pour améliorer la protection en couvrant les fonctions avec des tampons d'au moins quatre octets, ajoutez--param=ssp-buffer-size=4
. - Randomisation de la disposition de l'espace d'adressage (ASLR, Address Space Layout Randomization) : activez cette protection en créant un fichier exécutable indépendant de la position avec
-fPIC -pie
. - Protections Glibc : activez-les avec
-D_FORTIFY_SOURCE=2
. - Protection GOT (Global Offset Table) : activez cette fonctionnalité du chargeur d'environnement d'exécution avec
-Wl,-z,relro,-z,now
. - Erreurs de compilation pour les chaînes de format manquantes :
-Wformat -Wformat-security -Werror=format-security
- Protection contre la destruction de pile : activez-la avec
Désactivez
CAP_SYS_MODULE
, ce qui permet le chargement et le déchargement des modules du noyau. Pour désactiver cette fonctionnalité, modifiez le fichier/etc/sysctl.conf
et incluez le paramètre suivant :kernel.modules_disabled = 1
Supprimez la table des symboles du noyau en exécutant la commande suivante :
sudo rm /boot/System.map
Étape suivante
- Une fois que votre image est prête pour la production, créez une version finale de cette image personnalisée et incluez-la dans une famille d'images. Vous pourrez ainsi gérer facilement les versions mises à jour de l'image personnalisée.
- Découvrez comment démarrer une instance à partir d'une image.