Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Accédez à un hôte bastion à l'aide du gestionnaire de session et d'Amazon EC2 Instance Connect
Créée par Piotr Chotkowski (AWS) et Witold Kowalik (AWS)
Récapitulatif
Un hôte bastion, parfois appelé boîte de saut, est un serveur qui fournit un point d'accès unique depuis un réseau externe aux ressources situées sur un réseau privé. Un serveur exposé à un réseau public externe, tel qu'Internet, présente un risque de sécurité potentiel en cas d'accès non autorisé. Il est important de sécuriser et de contrôler l'accès à ces serveurs.
Ce modèle décrit comment vous pouvez utiliser Session Manager et Amazon EC2 Instance Connect pour vous connecter en toute sécurité à un hôte bastion Amazon Elastic Compute Cloud (Amazon EC2) déployé sur votre compte AWS. Le gestionnaire de session est une fonctionnalité d'AWS Systems Manager. Les avantages de ce modèle incluent :
L'hôte bastion déployé ne possède aucun port entrant ouvert exposé à l'Internet public. Cela réduit la surface d'attaque potentielle.
Vous n'avez pas besoin de stocker et de gérer des clés Secure Shell (SSH) à long terme dans votre compte AWS. Au lieu de cela, chaque utilisateur génère une nouvelle paire de clés SSH chaque fois qu'il se connecte à l'hôte Bastion. Les politiques AWS Identity and Access Management (IAM) associées aux informations d'identification AWS de l'utilisateur contrôlent l'accès à l'hôte Bastion.
Public visé
Ce modèle est destiné aux lecteurs ayant une connaissance de base d'Amazon EC2, d'Amazon Virtual Private Cloud (VPC) et de Hashicorp Terraform.
Conditions préalables et limitations
Prérequis
Un compte AWS actif
Interface de ligne de commande AWS (AWS CLI) version 2, installée et configurée
Plug-in Session Manager pour l'AWS CLI, installé
Stockage pour l'état
Terraform, tel qu'un bucket Amazon Simple Storage Service (Amazon S3) et une table Amazon DynamoDB servant de backend distant pour stocker l'état Terraform. Pour plus d'informations sur l'utilisation de backends distants pour l'état Terraform, consultez S3 Backends (documentation Terraform). Pour un exemple de code qui configure la gestion de l'état à distance avec un backend S3, voir remote-state-s3-backend (Terraform Registry). Notez les critères suivants : Le compartiment S3 et la table DynamoDB doivent se trouver dans la même région AWS.
Lors de la création de la table DynamoDB, la clé de partition doit
LockID
être (distinguez majuscules et minuscules) et le type de clé de partition doit l'être.String
Tous les autres paramètres du tableau doivent être à leurs valeurs par défaut. Pour plus d'informations, reportez-vous aux sections À propos des clés primaires et Création d'une table dans la documentation DynamoDB.
Un client SSH, installé
Limites
Ce modèle est conçu comme une preuve de concept (PoC) ou comme base pour un développement ultérieur. Il ne doit pas être utilisé sous sa forme actuelle dans les environnements de production. Avant le déploiement, ajustez l'exemple de code dans le référentiel en fonction de vos besoins et de votre cas d'utilisation.
Ce modèle suppose que l'hôte bastion cible utilise Amazon Linux 2 comme système d'exploitation. Bien qu'il soit possible d'utiliser d'autres Amazon Machine Images (AMIs), ce modèle ne s'applique pas aux autres systèmes d'exploitation.
Note
Le support d'Amazon Linux 2 touche à sa fin. Pour plus d'informations, consultez Amazon Linux 2 FAQs
. Dans ce modèle, l'hôte bastion est situé dans un sous-réseau privé sans passerelle NAT ni passerelle Internet. Cette conception isole l' EC2 instance de l'Internet public. Vous pouvez ajouter une configuration réseau spécifique qui lui permet de communiquer avec Internet. Pour plus d'informations, consultez Connecter votre cloud privé virtuel (VPC) à d'autres réseaux dans la documentation Amazon VPC. De même, conformément au principe du moindre privilège, l'hôte du bastion n'a accès à aucune autre ressource de votre compte AWS, sauf si vous lui accordez explicitement des autorisations. Pour plus d'informations, consultez la section Politiques basées sur les ressources dans la documentation IAM.
Versions du produit
Version 2 de l'interface de ligne de commande AWS
Terraform version 1.3.9
Architecture
Pile technologique cible
Un VPC avec un seul sous-réseau privé
Les points de terminaison VPC d'interface suivants :
amazonaws.<region>.ssm
: point de terminaison pour le service Systems Manager.amazonaws.<region>.ec2messages
— Systems Manager utilise ce point de terminaison pour passer des appels depuis l'agent SSM vers le service Systems Manager.amazonaws.<region>.ssmmessages
— Le gestionnaire de session utilise ce point de terminaison pour se connecter à votre EC2 instance via un canal de données sécurisé.
Une
t3.nano
EC2 instance exécutant Amazon Linux 2Rôle IAM et profil d'instance
Groupes de sécurité Amazon VPC et règles de groupe de sécurité pour les points de terminaison et l'instance EC2
Architecture cible

Le schéma montre le processus suivant :
L'utilisateur assume un rôle IAM autorisé à effectuer les opérations suivantes :
Authentifier, autoriser et se connecter à l'instance EC2
Démarrer une session avec le gestionnaire de session
L'utilisateur lance une session SSH via le gestionnaire de session.
Le gestionnaire de session authentifie l'utilisateur, vérifie les autorisations dans les politiques IAM associées, vérifie les paramètres de configuration et envoie un message à l'agent SSM pour ouvrir une connexion bidirectionnelle.
L'utilisateur transmet la clé publique SSH à l'hôte Bastion via les métadonnées Amazon. EC2 Cela doit être fait avant chaque connexion. La clé publique SSH reste disponible pendant 60 secondes.
L'hôte Bastion communique avec les points de terminaison VPC de l'interface pour Systems Manager et Amazon. EC2
L'utilisateur accède à l'hôte Bastion via le gestionnaire de session en utilisant un canal de communication bidirectionnel crypté TLS 1.2.
Automatisation et mise à l'échelle
Les options suivantes sont disponibles pour automatiser le déploiement ou faire évoluer cette architecture :
Vous pouvez déployer l'architecture par le biais d'un pipeline d'intégration et de livraison continues (CI/CD).
Vous pouvez modifier le code pour changer le type d'instance de l'hôte Bastion.
Vous pouvez modifier le code pour déployer plusieurs hôtes bastions. Dans le
bastion-host/main.tf
fichier, dans le bloc deaws_instance
ressources, ajoutez lecount
méta-argument. Pour plus d'informations, consultez la documentation Terraform.
Outils
Services AWS
L'interface de ligne de commande AWS (AWS CLI) est un outil open source qui vous permet d'interagir avec les services AWS par le biais de commandes dans votre shell de ligne de commande.
Amazon Elastic Compute Cloud (Amazon EC2) fournit une capacité de calcul évolutive dans le cloud AWS. Vous pouvez lancer autant de serveurs virtuels que vous le souhaitez et les augmenter ou les diminuer rapidement.
AWS Identity and Access Management (IAM) vous aide à gérer en toute sécurité l'accès à vos ressources AWS en contrôlant qui est authentifié et autorisé à les utiliser.
AWS Systems Manager vous aide à gérer vos applications et votre infrastructure exécutées dans le cloud AWS. Il simplifie la gestion des applications et des ressources, réduit le délai de détection et de résolution des problèmes opérationnels et vous aide à gérer vos ressources AWS en toute sécurité à grande échelle. Ce modèle utilise Session Manager, une fonctionnalité de Systems Manager.
Amazon Virtual Private Cloud (Amazon VPC) vous aide à lancer des ressources AWS dans un réseau virtuel que vous avez défini. Ce réseau virtuel ressemble à un réseau traditionnel que vous exploiteriez dans votre propre centre de données, avec les avantages liés à l'utilisation de l'infrastructure évolutive d'AWS.
Autres outils
HashiCorp Terraform
est un outil open source d'infrastructure sous forme de code (IaC) qui vous aide à utiliser le code pour provisionner et gérer l'infrastructure et les ressources du cloud. Ce modèle utilise la CLI Terraform .
Référentiel de code
Le code de ce modèle est disponible dans l'hôte GitHub Access a bastion à l'aide du gestionnaire de session et du référentiel Amazon EC2 Instance Connect
Bonnes pratiques
Nous vous recommandons d'utiliser des outils d'analyse de code automatisés pour améliorer la sécurité et la qualité du code. Ce modèle a été scanné à l'aide de Checkov
, un outil d'analyse de code statique pour IaC. Nous vous recommandons au minimum d'effectuer des contrôles de validation et de formatage de base à l'aide des commandes terraform validate
etterraform fmt -check -recursive
Terraform.Il est recommandé d'ajouter des tests automatisés pour IaC. Pour plus d'informations sur les différentes approches pour tester le code Terraform, consultez Testing HashiCorp Terraform (article de blog Terraform
). Lors du déploiement, Terraform utilise l' EC2 instance de remplacement chaque fois qu'une nouvelle version de l'AMI Amazon Linux 2 est détectée
. Cela déploie la nouvelle version du système d'exploitation, y compris les correctifs et les mises à niveau. Si le calendrier de déploiement est peu fréquent, cela peut présenter un risque de sécurité car l'instance ne dispose pas des derniers correctifs. Il est important de mettre à jour et d'appliquer fréquemment des correctifs de sécurité aux EC2 instances déployées. Pour plus d'informations, consultez la section Gestion des mises à jour sur Amazon EC2. Ce modèle étant une preuve de concept, il utilise des politiques gérées par AWS, telles que
AmazonSSMManagedInstanceCore
. Les politiques gérées par AWS couvrent les cas d'utilisation courants, mais n'accordent pas d'autorisations de moindre privilège. Selon les besoins de votre cas d'utilisation, nous vous recommandons de créer des politiques personnalisées qui accordent des autorisations de moindre privilège pour les ressources déployées dans cette architecture. Pour plus d'informations, consultez Commencer avec les politiques gérées par AWS et passer aux autorisations du moindre privilège.Utilisez un mot de passe pour protéger l'accès aux clés SSH et stockez les clés dans un emplacement sécurisé.
Configurez la journalisation et la surveillance pour l'hôte du bastion. La journalisation et la surveillance sont des éléments importants de la maintenance des systèmes, tant du point de vue de l'exploitation que de la sécurité. Il existe plusieurs manières de surveiller les connexions et l'activité dans votre hôte Bastion. Pour plus d'informations, consultez les rubriques suivantes dans la documentation de Systems Manager :
Épopées
Tâche | Description | Compétences requises |
---|---|---|
Clonez le référentiel de code. |
| DevOps ingénieur, développeur |
Initialisez le répertoire de travail Terraform. | Cette étape n'est nécessaire que pour le premier déploiement. Si vous redéployez le modèle, passez à l'étape suivante. Dans le répertoire racine du dépôt cloné, entrez la commande suivante, où :
NoteVous pouvez également ouvrir le fichier config.tf et, dans la | DevOps ingénieur, Développeur, Terraform |
Déployez les ressources. |
| DevOps ingénieur, Développeur, Terraform |
Tâche | Description | Compétences requises |
---|---|---|
Configurez la connexion SSH. | Mettez à jour le fichier de configuration SSH pour autoriser les connexions SSH via le gestionnaire de session. Pour obtenir des instructions, consultez Autoriser les connexions SSH pour le gestionnaire de session. Cela permet aux utilisateurs autorisés de saisir une commande proxy qui démarre une session du gestionnaire de session et transfère toutes les données via une connexion bidirectionnelle. | DevOps ingénieur |
Générez les clés SSH. | Entrez la commande suivante pour générer une paire de clés SSH privées et publiques locales. Vous utilisez cette paire de clés pour vous connecter à l'hôte Bastion.
| DevOps ingénieur, développeur |
Tâche | Description | Compétences requises |
---|---|---|
Obtenez l'ID de l'instance. |
| AWS général |
Envoyez la clé publique SSH. | NoteDans cette section, vous allez télécharger la clé publique vers les métadonnées de l'instance de l'hôte Bastion. Une fois la clé téléchargée, vous avez 60 secondes pour établir une connexion avec l'hôte du bastion. Au bout de 60 secondes, la clé publique est supprimée. Pour plus d'informations, consultez la section Dépannage de ce modèle. Effectuez rapidement les étapes suivantes pour éviter que la clé ne soit supprimée avant de vous connecter à l'hôte Bastion.
| AWS général |
Connectez-vous à l'hôte Bastion. |
NoteIl existe d'autres options pour ouvrir une connexion SSH avec l'hôte Bastion. Pour plus d'informations, consultez la section Autres approches pour établir une connexion SSH avec l'hôte Bastion dans la section Informations supplémentaires de ce modèle. | AWS général |
Tâche | Description | Compétences requises |
---|---|---|
Supprimez les ressources déployées. |
| DevOps ingénieur, Développeur, Terraform |
Résolution des problèmes
Problème | Solution |
---|---|
|
|
| Une fois la clé publique téléchargée sur l'hôte du bastion, vous n'avez que 60 secondes pour établir la connexion. Après 60 secondes, la clé est automatiquement supprimée et vous ne pouvez pas l'utiliser pour vous connecter à l'instance. Dans ce cas, vous pouvez répéter l'étape pour renvoyer la clé à l'instance. |
Ressources connexes
Documentation AWS
Gestionnaire de session AWS Systems Manager (documentation du gestionnaire de systèmes)
Installez le plug-in Session Manager pour l'AWS CLI (documentation Systems Manager)
Autoriser les connexions SSH pour Session Manager (documentation Systems Manager)
À propos de l'utilisation d' EC2 Instance Connect ( EC2 documentation Amazon)
Connectez-vous à l'aide d' EC2 Instance Connect ( EC2 documentation Amazon)
Gestion des identités et des accès pour Amazon EC2 ( EC2 documentation Amazon)
Utilisation d'un rôle IAM pour accorder des autorisations aux applications exécutées sur des EC2 instances Amazon (documentation IAM)
Bonnes pratiques de sécurité dans l'IAM (documentation IAM)
Contrôlez le trafic vers les ressources à l'aide de groupes de sécurité (documentation Amazon VPC)
Autres ressources
Commande : valider
(documentation Terraform) Commande : fmt (documentation
Terraform) Tester HashiCorp Terraform
(HashiCorp article de blog)
Informations supplémentaires
Autres approches pour établir une connexion SSH avec l'hôte Bastion
Réacheminement de port
Vous pouvez utiliser -D 8888
cette option pour ouvrir une connexion SSH avec une redirection de port dynamique. Pour plus d'informations, consultez ces instructions
ssh -i $PRIVATE_KEY_FILE -D 8888 ec2-user@$INSTANCE_ID
Ce type de connexion ouvre un proxy SOCKS qui peut transférer le trafic depuis votre navigateur local via l'hôte Bastion. Si vous utilisez Linux ou macOS, pour voir toutes les options, entrezman ssh
. Cela affiche le manuel de référence SSH.
En utilisant le script fourni
Au lieu d'exécuter manuellement les étapes décrites dans Connect to the bastion host by using Session Manager dans la section Epics, vous pouvez utiliser le script connect.sh inclus dans le référentiel de code. Ce script génère la paire de clés SSH, envoie la clé publique à l' EC2 instance et établit une connexion avec l'hôte bastion. Lorsque vous exécutez le script, vous transmettez le tag et le nom de la clé en tant qu'arguments. Voici un exemple de commande permettant d'exécuter le script.
./connect.sh sandbox-dev-bastion-host my_key