Configurer manuellement les disques importés


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.

Contenu

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 Google server 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
  • 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