Pourquoi vous avez besoin de certificats dans SSH ?

Introduction

Lorsque vous travaillez dans le cloud, sécuriser l’accès aux serveurs Linux de production est essentiel car votre charge de travail est confrontée à Internet. Les grandes entreprises jonglent avec les besoins critiques : maintenir un contrôle strict, appliquer un accès granulaire et garantir le plus haut niveau de sécurité.

Les clés SSH traditionnelles, bien qu’elles constituent la pierre angulaire de l’accès à distance, peuvent présenter des défis dans ces domaines. Cet article de blog explique pourquoi les certificats SSH, en combinant la puissance de Vault, offrent une alternative intéressante aux clés SSH traditionnelles.

Nous aborderons les aspects cruciaux de la gestion de l’accès aux environnements de production :

En mettant en œuvre des certificats SSH, les entreprises peuvent gagner un avantage significatif dans la sécurisation de leurs environnements de production.

Les périls des clés privées : pourquoi le partage ou une mauvaise gestion est risqué

Il existe plusieurs raisons pour lesquelles les utilisateurs/Administrateurs peuvent conserver leurs clés privées SSH sur leur ordinateur.

Mais:

La mise en œuvre et la gestion des certificats SSH, en particulier pour ceux qui ne les connaissent pas, peuvent sembler une étape supplémentaire complexe par rapport à la simplicité d’utilisation d’une clé privée. Cependant, l’utilisation d’outils de fournisseurs cloud tels que AWS SSM Connect ou GCP oslogin peut être une solution. Mais l’utilisation de certificats SSH offre l’avantage d’être nativement compatible multi-cloud, offrant une approche unifiée dans différents environnements cloud.

💡💡💡 ** Nous avons donc besoin d’un outil pour nous aider ** 💡💡💡

Cas d’utilisation : accès SRE et développeur SSH avec Hashicorp Vault

Une équipe de développement a besoin d’accéder à un serveur de production à des fins de dépannage et de débogage. L’équipe SRE est responsable de la gestion de l’accès et de la sécurité du serveur.

image

Générer et distribuer un certificat SSH

Prérequis:

Activez le “SSH Secrets Engine”:

Avant de plonger dans la configuration, il est essentiel de comprendre ce que fait le moteur de secrets SSH. Il fournit un moyen sécurisé de gérer les informations d’identification SSH, offrant des fonctionnalités telles que :

Pour activer le moteur de secrets SSH, vous utiliserez la CLI Vault. Voici la commande :

vault secrets enable -path=ssh ssh

Cette commande monte le moteur de secrets SSH sur le chemin /ssh. Vous pouvez personnaliser le chemin si nécessaire.

Créer une autorité de certification pour le coffre-fort hashicorp

Nous disposons de deux méthodes pour établir une autorité de certification (CA) : l’interface de ligne de commande (CLI) et Terraform.

vault write ssh/config/ca generate_signing_key=true
resource "vault_mount" "ssh_signer" {
  path        = "ssh-client-signer"
  type        = "ssh"
  description = "Sign ssh public keys"
}

resource "vault_ssh_secret_backend_ca" "user" {
  backend              = vault_mount.ssh_signer.path
  generate_signing_key = true
}
output "pub_key" {
  value = vault_ssh_secret_backend_ca.user.public_key
}

Ajout d’une autorisation de rôles pour les développeurs dans Hashicorp Vault

Pour gérer efficacement l’accès des développeurs aux certificats SSH dans Hashicorp Vault, nous devons configurer les autorisations SSH pour signer les demandes des développeurs.

resource "vault_ssh_secret_backend_role" "user" {
  name                    = "mgoulin"
  backend                 = vault_mount.ssh_signer.path
  key_type                = "ca"
  allow_user_certificates = true
  default_extensions = {
    "permit-agent-forwarding" = ""
    "permit-pty"              = ""
    "permit-port-forwarding"  = ""
  }
  ttl = "1h"
}

Étape 0 : Injection de l’autorité de certification dans les serveurs AWS, Azure et GCP

L’injection de clés publiques SSH dans des instances cloud est une pratique courante pour permettre un accès SSH sécurisé. Voici comment procéder en tant que SRE sur AWS, Azure et GCP.

AWS

Ajoutez la clé publique à un objet paire de clés dans le service EC2 à l’aide de la commande aws ec2 import-key-pair.

echo "cert-authority $(vault read -field public_key ssh-client-signer/config/ca)" > /tmp/authorized_keys.txt
aws ec2 import-key-pair --key-name "dev-key" --public-key-material fileb:///tmp/authorized_keys.txt

GCP

Ajoutez la clé publique aux métadonnées de l’instance à l’aide de la commande gcloud compute project-info add-metadata.

export USERNAME=dev
echo "$USERNAME:cert-authority $(terraform output -r pub_key)" > /tmp/authorized_keys.txt
cloud compute project-info add-metadata --metadata-from-file=ssh-keys=authorized_keys.txt

Azure

Ajoutez la clé publique aux métadonnées de l’instance à l’aide de la commande az sshkey.

echo "cert-authority $(vault read -field public_key ssh-client-signer/config/ca)" > /tmp/authorized_keys.txt
az sshkey create --name "dev-key" --public-key "@/tmp/authorized_keys.txt" --resource-group "myResourceGroup"

Custom OnPrem Instances

Ajoutez la clé publique à l’instance en tant que root en ajoutant la ligne suivante au fichier /home/$USERNAME/authorized_keys.

export USERNAME=dev
echo "cert-authority $(vault read -field public_key ssh-client-signer/config/ca)" >> /home/$USERNAME/authorized_keys

Comment les développeurs peuvent se connecter avec des certificats signés SSH

Traditionnellement, les connexions SSH reposaient sur des paires de clés publiques et privées pour l’authentification. Bien qu’efficace, cette méthode présente des défis en termes de gestion des clés, de révocation et de contrôle d’accès. Avec Certificate-Authority et HashicorpVautl, les certificats lient l’identité d’un utilisateur à sa clé publique, permettant une authentification plus forte et un contrôle d’accès granulaire.

Avec les certificats SSH, les développeurs peuvent se connecter en toute sécurité aux serveurs distants sans avoir besoin de gérer directement les clés privées. Le processus implique :

Étape 1 : Demander un certificat : En tant que développeur, je souhaite signer mes clés ssh

Les développeurs demandent un certificat SSH à une autorité centralisée, souvent via un portail en libre-service ou en appelant l’API Vault.

Cela peut être fait avec la commande vault suivante. Lors de la requête, les développeurs fournissent leur clé publique, généralement stockée sous id_rsa.pub.

vault write -field=signed_key ssh/sign/dev \ 
    public_key=@$HOME/.ssh/id_rsa.pub > signed-cert.pub

Étape 2 : Connexion SSH : En tant que développeur, je souhaite me connecter sur mes instances via ssh

Les développeurs utilisent le certificat signé précédemment émis : signed-cert.pub, souvent appelé certificat client, pour s’authentifier auprès du serveur cible. Ce certificat, généralement au format PEM, contient la clé publique du développeur signée par l’autorité de certification (CA) de confiance, qui dans ce cas est Vault.

Lors de la connexion au serveur, le client SSH présente le certificat signé. Le serveur vérifie ensuite l’authenticité et la validité du certificat par rapport à la clé publique de l’autorité de certification. En cas de succès, la connexion est établie et le développeur accède au serveur.

ssh -i ./signed-cert.pub -v -i ~/.ssh/id_rsa dev@<target_server>

Conclusion

En adoptant les certificats SSH et en tirant parti d’un outil de gestion de l’autorité de certification centralisée tel que Hashicorp Vault, les organisations peuvent améliorer considérablement leur posture de sécurité SSH. Cette approche offre une solution robuste aux défis posés par la gestion traditionnelle des clés SSH, offrant un contrôle granulaire, une auditabilité améliorée et une gestion rationalisée des accès.

En passant aux certificats SSH, les organisations peuvent atténuer les risques associés aux clés compromises, faciliter la rotation des clés et appliquer des politiques d’accès strictes. Cela conduit finalement à une infrastructure SSH plus sécurisée et efficace.

Même si la mise en œuvre de certificats SSH nécessite une planification et une configuration minutieuses, les avantages à long terme en termes de sécurité et de facilité de gestion dépassent de loin l’investissement initial.

En suivant les directives décrites dans cet article, les organisations peuvent déployer avec succès des certificats SSH et récolter les fruits d’un environnement SSH plus sécurisé et contrôlé.

Liens :