Le Blog Amazon Web Services

Comment utiliser Amazon AppStream 2.0 pour réduire la surface d’attaque de votre bastion

Pour protéger leurs ressources, de nombreuses entreprises demandent à leurs administrateurs système de passer par un « bastion » (ou « rebond ») afin d’obtenir un accès administratif aux backends des systèmes dans des segments de réseau protégés ou sensibles.

Un bastion est une instance spéciale qui héberge un nombre minimal d’applications administratives, telles que RDP pour Windows ou Putty pour les distributions basées sur Linux. Tous les autres services non nécessaires sont supprimés. L’hôte est généralement placé dans un réseau séparé (ou « DMZ »), et est souvent protégé par une authentification multifactorielle (MFA) et monitoré à l’aide d’outils d’audit. Et la plupart des entreprises exigent que les traces des accès à l’hôte bastion soient auditables.

Dans cet article, nous illustrons l’utilisation d’Amazon AppStream 2.0 comme solution d’hôte bastion renforcée sur Windows et mise à l’échelle automatiquement en fournissant uniquement les outils nécessaires aux administrateurs système qui ont besoin d’accéder à un réseau protégé.

Prérequis

  • Un cloud privé virtuel (Amazon VPC) avec un sous-réseau dédié pour Amazon AppStream 2.0,
  • Un domaine Active Directory (AD) existant. Il peut s’agir d’un domaine local, d’un domaine hébergé sur AWS EC2 pour Windows ou d’un domaine de type AWS Directory Service pour Microsoft Active Directory utilisé comme annuaire d’utilisateurs,
  • Active Directory Federation Services (ADFS),
  • Une instance Linux ou Windows pour laquelle Amazon AppStream 2.0 agira comme hôte bastion.

Aperçu de la solution

Amazon AppStream 2.0 est un service de streaming d’applications entièrement géré qui permet aux utilisateurs d’accéder instantanément à leurs applications de bureau, où qu’ils soient, en utilisant un navigateur compatible HTML5. Lorsqu’un utilisateur demande l’accès à une application, Amazon AppStream 2.0 utilise une image de base pour déployer une instance de streaming et détruit l’instance après que l’utilisateur ait fermé sa session. Cela garantit la même expérience cohérente lors de chaque connexion.

Vous pouvez utiliser Amazon AppStream 2.0 comme solution de bastion pour permettre à vos administrateurs système de gérer leur environnement sans leur donner un hôte de bastion complet. Comme Amazon AppStream 2.0 crée de nouvelles instances chaque fois qu’un utilisateur demande un accès, une instance compromise ne durera que le temps d’une session utilisateur. Dès que l’utilisateur ferme sa session et que la période de déconnexion est atteinte, Amazon AppStream 2.0 met fin à l’instance et, avec elle, vous avez réduit vos risques de réutiliser (ou de conserver) des instances compromises.

Vous pourrez également réduire vos coûts car Amazon AppStream 2.0 est doté d’une fonction de mise à l’échelle automatique intégrée qui permet d’augmenter ou de réduire la capacité en fonction de la demande des utilisateurs. Elle vous permet de tirer parti du modèle de paiement en fonction de la consommation, où vous ne payez que ce que vous utilisez.

Architecture de haut niveau basée sur Amazon AppStream 2.0

Le diagramme ci-dessous illustre une architecture Amazon AppStream 2.0 de haut niveau utilisée comme hôte bastion pour les serveurs d’un autre VPC.

Trois VPC sont représentés : Le VPC Amazon AppStream 2.0, le VPC de l’hôte Bastion et le VPC de l’application. Le VPC Amazon AppStream 2.0 est un VPC appartenant à AWS où Amazon AppStream 2.0 maintient sa propre infrastructure. Les clients ne sont pas responsables de ce VPC et n’y ont pas accès. Amazon AppStream 2.0 construit chaque instance de streaming avec deux interfaces réseau élastiques (ENI) ; une dans le VPC Amazon AppStream 2.0 et une dans le VPC où vous choisissez de déployer vos instances Amazon AppStream 2.0. Le troisième VPC est le VPC de l’application dans lequel vous conservez généralement vos serveurs backend.

Le diagramme décrit également le processus d’accès de l’utilisateur final à l’environnement Amazon AppStream 2.0, qui fonctionne comme suit :

  1. En utilisant un navigateur compatible HTML5, l’utilisateur se connecte à une URL de connexion unique (Single Sign-On URL). L’utilisateur est ainsi authentifié par rapport à l’annuaire de l’entreprise en utilisant la fédération SAML 2.0 et avec une authentification multifactorielle (MFA) optionnelle,
  2. Après une authentification réussie, l’utilisateur verra la liste des applications mises à disposition,
  3. L’utilisateur peut lancer des applications, telles que RDP et Putty, qui ne sont visibles que dans le navigateur et avec le système d’exploitation sous-jacent caché. L’utilisateur peut alors se connecter aux systèmes backend via les ports qui ont été ouverts au niveau des groupes de sécurité. L’utilisateur se déconnecte et Amazon AppStream 2.0 détruit l’instance utilisée pour la session.

AppStream 2 - Bastion - Schéma architecture generale

Configurations étape par étape

Cette procédure suppose que vous avez créé les ressources suivantes comme conditions préalables.

  • Un VPC unique avec une plage CIDR de type /23 et deux sous-réseaux privés dans deux AZ. Note : Le terme sous-réseau « privé » désigne un sous-réseau auquel aucune passerelle Internet (IGW) n’est rattachée.
  • Sous-réseaux Bastion – utilisés pour les instances Amazon AppStream 2.0 qui hébergeront les applications des bastions.
  • Sous-réseaux Apps – utilisés pour les serveurs pour lesquels les instances Amazon AppStream 2.0 agiront en tant qu’hôte bastion.

AppStream 2 - Bastion - Configuration sous-réseaux

  • Une connexion d’appairage au VPC où réside l’Active Directory de l’entreprise, avec des tables de routage adaptées. Ceci n’est nécessaire que si votre Active Directory réside dans un autre VPC,
  • Deux instances EC2 avec des adresses IP privées dans le sous-réseau d’applications.

Phase 1 : Créer le jeu d’options DHCP

Pour que les instances Amazon AppStream 2.0 puissent se joindre au domaine d’entreprise, elles doivent avoir leurs entrées DNS qui pointent vers le(s) contrôleur(s) de domaine d’entreprise. Pour ce faire, vous devez créer un jeu d’options DHCP et l’attribuer au VPC :

  1. Connectez-vous à la console AWS, puis sélectionnez Tableau de bord du VPC > Jeux d’options DHCP > Créer un jeu d’options DHCP,
  2. Donnez un nom au jeu d’options DHCP, saisissez le nom de domaine et le(s) serveur(s) DNS de votre (vos) contrôleur(s) de domaine d’entreprise, puis sélectionnez Oui, Créer.
  3. Sélectionnez votre Tableau de bord du VPC > votre VPC > Actions > Modifier le jeu d’options DHCP.
  4. Sélectionnez le jeu d’options DHCP créé à l’étape précédente, puis sélectionnez Sauvegarder.

Phase 2 : Création de la stack Amazon AppStream 2.0

Une stack Amazon AppStream 2.0 se compose d’un parc, de stratégies d’accès utilisateur et d’une configuration de stockage. Pour créer une stack/pile, suivez les étapes suivantes :

  1. Connectez-vous à la console AWS et sélectionnez AppStream 2.0 > Stack > Create Stack,
  2. Donnez un nom à la stack, puis sélectionnez Next,
  3. Activez les dossiers personnels, si vous voulez un stockage persistant, puis sélectionnez Review
    AppStream 2 - Bastion - Confiugration AppStream Stack
  4. Sélectionnez Create.

Phase 3 : Créer la configuration de l’annuaire Amazon AppStream 2.0

Créez d’abord une configuration d’annuaire pour que vous puissiez joindre les instances d’AppStream 2.0 à une unité organisationnelle (OU) dans votre annuaire d’entreprise.

Note : Les instances d’Amazon AppStream 2.0 doivent être placées dans une OU et ne peuvent pas résider dans le conteneur Computer.

Pour créer une configuration d’annuaire, suivez ces étapes :

  1. Connectez-vous à la console de gestion AWS et sélectionnez AppStream 2.0 > Directory Configs > Create Directory Config.
  2. Saisissez les informations de configuration d’annuaire suivantes :
    1. Directory name : Le FQDN de votre domaine d’entreprise,
    2. Service Account Name : Le compte de service qu’AppStream 2.0 utilise pour joindre les instances au domaine de l’entreprise. Les privilèges requis pour le compte de service sont documentés ici,
    3. Organizational Unit (OU) : Les unités organisationnelles (OU) où AppStream 2.0 créera vos instances. Vous pouvez ajouter des OU supplémentaires en cliquant sur le signe plus (+).
  3. Sélectionnez Next, puis Create.

Créer les groupes de sécurité

Maintenant, créez les groupes de sécurité AWS pour vos instances AppStream 2.0 et vos serveurs backend.

Configuration pour le BastionHostSecurityGroup

Pour vos instances AppStream 2.0, vous devez associer un groupe nommé BastionHostSecurityGroup afin de communiquer avec les serveurs backend. Ce groupe de sécurité n’est utilisé comme « source » que par les groupes de sécurité auxquels les serveurs backend sont attachés et, par conséquent, ils n’ont pas besoin d’ouvrir de ports entrants. Pour créer un groupe de sécurité, suivez les étapes suivantes :

  • Connectez-vous à la console AWS et sélectionnez VPC > Groupes de sécurité > Créer un groupe de sécurité,
  • Nommez votre groupe de sécurité BastionHostSecurityGroup, sélectionnez le VPC où vous placerez les instances AppStream 2.0, puis sélectionnez Oui, Créer.

Configuration pour le BastionHostAccessSecurityGroup

Pour vos serveurs back-end, vous devez joindre un groupe nommé BastionHostAccessSecurityGroup qui autorise le trafic entrant de l’instance AppStream 2.0. Contrairement au BastionHostSecurityGroup, celui-ci nécessite des ports entrants ouverts.

  1. Connectez-vous à la console AWS et sélectionnez VPC > Groupes de sécurité > Créer un groupe de sécurité,
  2. Nommez votre groupe de sécurité BastionHostAccessSecurityGroup, sélectionnez le bon VPC, puis sélectionnez Oui, Créer,
  3. Dans la console Groupes de sécurité, sélectionnez le groupe de sécurité nouvellement créé, sélectionnez l’onglet Règles entrantes, puis sélectionnez Modifier,
  4. Ajoutez une règle pour ouvrir les ports 3389 et 22, utilisez le groupe de sécurité précédemment créé comme source, puis sélectionnez Sauvegarder.

Note : En plus des groupes de sécurité, vous pouvez placer des listes de contrôle d’accès au réseau (NACL) autour du sous-réseau que vous utilisez pour AppStream 2.0 comme couche de sécurité supplémentaire. Les principales différences entre les groupes de sécurité et les NACL sont que les groupes de sécurité sont obligatoires et que vous les appliquez au niveau de l’instance, tandis que les NACL sont facultatives au niveau du sous-réseau. Une autre différence qui mérite d’être soulignée est que les NACL sont « sans état » tandis que les groupes de sécurité sont « avec état ». Cela signifie que tout port autorisé à entrer via les NACL aura besoin d’une règle de sortie correspondante. Pour plus d’informations sur les NACL, veuillez vous référer à cette documentation.

Phase 4 : Construire l’image AppStream 2.0

Une image AppStream 2.0 contient des applications que vous pouvez diffuser en continu aux utilisateurs. AppStream 2.0 utilise cette image pour lancer des instances de streaming qui font partie d’un parc AppStream 2.0.

Une fois que vous avez créé la pile, créez une image personnalisée pour mettre des applications spécifiques à la disposition des utilisateurs :

  1. Connectez-vous à la console AWS et sélectionnez AppStream 2.0 > Images > Image Builder > Launch Image Builder,
  2. Choisissez l’image que vous souhaitez utiliser comme point de départ, puis sélectionnez Next. Pour cet exemple, j’ai choisi une image générique du catalogue General Purpose,
  3. Donnez un nom à votre image, choisissez la famille d’instances, puis sélectionnez Next,
  4. Choisissez le VPC et le sous-réseau dans lesquels vous souhaitez déployer les instances AppStream 2.0,
  5. Sélectionnez le groupe de sécurité que vous avez créé pour les instances AppStream 2.0,
  6. Sélectionnez la configuration d’annuaire que vous avez créée, l’OU dans laquelle vous voulez que vos instances d’AppStream 2.0 se situent, puis sélectionnez Review,
  7. Sélectionnez Launch,
  8. Une fois l’image construite et en cours d’exécution, sélectionnez l’image, puis sélectionnez Connect. Cela ouvrira un nouvel onglet de navigateur où vous pourrez vous connecter à l’image et l’administrer,
  9. Sélectionnez Administrator et connectez-vous.
    AppStream 2 - Bastion - Image Builder Admin connection
  10. Une fois connecté en tant qu’administrateur, sélectionnez le raccourci Image Assistant sur le bureau.
    AppStream 2 - Bastion - Image Builder Image Assistant
  11. Ajoutez toutes les applications que vous souhaitez mettre à la disposition de vos utilisateurs, puis sélectionnez Next.
    Note : Si vous devez télécharger des fichiers d’installation ou de configuration, vous pouvez utiliser l’option My Files dans le menu Control. Tous les fichiers téléchargés par cette méthode apparaîtront sous le lecteur X: de l’image.
    AppStream 2 - Bastion - Image Assistant Menu Controle
  12. Si vous souhaitez tester les applications en tant qu’utilisateur sans privilèges, suivez les instructions à l’écran pour changer d’utilisateur. Sinon, sélectionnez Next.
    AppStream 2 - Bastion - Image Assistant test
  13. Sélectionnez Launch pour que l’assistant optimise les applications.
  14. Donnez un nom à l’image, puis sélectionnez Next.
  15. Sélectionnez Disconnect and Create Image.
  16. Retournez à la console AppStream 2.0 et attendez que le processus de « snapshotting » soit terminé et que l’image soit disponible avant de passer à l’étape suivante.

Phase 5 : Créer le parc AppStream 2.0

Une fois que vous avez créé votre stack et votre image, vous devez créer un parc et l’associer à votre stack.

Les parcs AppStream 2.0 sont constitués d’instances de streaming qui utilisent l’image que vous spécifiez. Le type de parc détermine quand vos instances fonctionnent et comment vous les payez. Vous pouvez spécifier un type de parc lorsque vous créez un parc, et vous ne pouvez pas le modifier une fois qu’il a été créé.

Pour créer un parc, suivez les étapes suivantes :

  1. Connectez-vous à la console AWS et sélectionnez AppStream 2.0 > Fleets > Create Fleet.
  2. Donnez un nom à votre parc, puis sélectionnez Next.
  3. Sélectionnez l’image nouvellement créée, puis sélectionnez Next.
  4. Choisissez vos paramètres personnalisés, puis sélectionnez Next.
    Important : Portez une attention particulière à la valeur de la capacité du parc. La capacité du parc détermine le nombre d’instances en cours à un moment donné, et elle a une incidence sur vos coûts.
    AppStream 2 - Bastion - Configuration Parc
  5. Sélectionnez votre VPC, sous-réseau(x), groupe(s) de sécurité, paramètres Active Directory, puis sélectionnez Next.
  6. Passez en revue les informations, puis sélectionnez Create.
    AppStream 2 - Bastion - Configuration Parc Creation

Associer le parc à la stack en suivant ces étapes :

  1. Connectez-vous à la console AWS et sélectionnez AppStream 2.0 > Stacks,
  2. Sélectionnez la pile, sélectionnez Actions, puis sélectionnez Associate Fleet,
  3. Sélectionnez le parc, puis Associate.

Phase 6: Configurer l’ADFS pour Amazon AppStream 2.0

Pour que les utilisateurs s’authentifient par rapport à l’annuaire de l’entreprise avant d’accéder à Amazon AppStream 2.0, utilisez une solution de connexion unique (Single Sign-On). Pour cette démo, j’utilise ADFS. Si vous choisissez une autre solution, suivez les instructions fournies avec celle-ci. Pour obtenir de l’aide sur la configuration de ADFS avec AmazonAppStream 2.0, consultez Enabling Identify Federation with ADSF and Amazon Appstream 2.0.

Note : Si vous utilisez AWS Directory Service pour Microsoft AD (AWS Managed Microsoft AD) comme annuaire d’utilisateurs, vous pouvez utiliser ADFS en suivant les instructions de configuration ADFS dans l’article How to Enable Your Users to Access Office 365 with AWS Managed Microsoft AD Credentials.

Expérience utilisateur

Cette section vous montre à quoi ressemble l’expérience de l’utilisateur final d’Amazon AppStream 2.0 lorsqu’il se connecte aux instances backend sous Windows et Linux.

Note : Assurez-vous que vous avez des serveurs backend auxquels vous pouvez vous connecter, comme indiqué dans les pré-requis.

  1. Accédez à l’URL ADFS que vous avez créée dans le cadre de la configuration ADFS.
  2. Connectez-vous à l’aide de vos identifiants d’entreprise.
  3. Sélectionnez Remote Desktop dans la liste des applications.
  4. Saisissez vos identifiants d’entreprise.
  5. Saisissez l’adresse IP privée de l’instance backend sous Windows à laquelle vous souhaitez vous connecter à distance.
    AppStream 2 - Bastion - Utilisation RDP
    Vous êtes maintenant connecté à l’instance backend sous Windows via Amazon AppStream 2.0.
  6. Pour tester sous Linux, ouvrez putty. Sélectionnez l’icône Launch app dans le menu Control , puis sélectionnez putty.
    AppStream 2 - Bastion - Utilisation Putty
  7. Indiquez l’adresse IP privée d’une instance backend sous Linux à laquelle vous souhaitez vous connecter, puis sélectionnez Open.
    Note: Pour que Putty puisse se connecter à une instance Linux sur AWS, vous devrez fournir une paire de clés (KeyPair). Pour savoir comment configurer putty et les paires de clés, reportez-vous à cette documentation.
  8. Vous êtes maintenant connecté à une instance backend sous Linux via Amazon AppStream 2.0.

Monitoring

Par défaut, vous pouvez surveiller l’utilisation d’Amazon AppStream 2.0 avec les services de surveillance AWS suivants :

  • Amazon CloudWatch est un service de surveillance des ressources du cloud AWS. Vous pouvez utiliser Amazon CloudWatch pour collecter et suivre des mesures, collecter et surveiller des fichiers journaux, définir des alarmes et réagir automatiquement aux changements dans vos ressources AWS. Voici un exemple de mesure CloudWatch montrant que la capacité en service était de 100 % à 14h30, ce qui indique que la capacité du parc peut avoir besoin d’être ajustée.
    AppStream 2 - Bastion - CloudWatch
  • AWS CloudTrail est un service qui permet la gouvernance, la conformité, l’audit opérationnel et l’audit des risques de votre compte AWS. Grâce à AWS CloudTrail, vous pouvez enregistrer, surveiller en permanence et conserver l’activité du compte liée aux actions menées dans votre infrastructure AWS. Voici un exemple d’événement CloudTrail. Par exemple, à partir de cet événement, vous pouvez voir que l’utilisateur Bob s’est connecté à Amazon AppStream 2.0 le 4 mars 2018, et vous pouvez voir son IP source.
    AppStream 2 - Bastion - CloudTrail

Synthèse

Amazon AppStream 2.0 est un moyen économique de fournir aux administrateurs une méthode sûre et auditable pour accéder à leurs environnements backend.

La fonction de mise à l’échelle automatique intégrée d’Amazon AppStream 2.0 offre un modèle de paiement en fonction de la consommation, où le nombre d’instances en cours d’exécution est basé sur la demande des utilisateurs. Cela vous permet de réduire les coûts sans compromettre la disponibilité du service. Un autre avantage économique d’Amazon AppStream 2.0 est que son infrastructure sous-jacente est gérée et maintenue par AWS, ce qui vous permet de déployer Amazon AppStream 2.0 avec un minimum d’efforts.

Amazon AppStream 2.0 vous permet de mettre à disposition des applications à partir d’AWS en toute sécurité sous forme de trames de pixels chiffrées vers un poste utilisateur final. Par défaut, Amazon AppStream 2.0 permet aux applications que vous sélectionnez dans votre image de lancer d’autres applications et fichiers exécutables sur l’instance. Cela garantit que les applications ayant des dépendances avec d’autres applications (par exemple, une application qui lance le navigateur pour accéder au site web d’un produit) fonctionnent comme prévu. Veillez à configurer vos contrôles administratifs, groupes de sécurité et autres logiciels de sécurité de manière à accorder aux utilisateurs finaux les autorisations minimales requises pour accéder à leurs ressources et transférer des données entre leurs ordinateurs locaux et les instances du parc. Vous pouvez utiliser des logiciels de contrôle des applications, tels que Microsoft AppLocker, et des stratégies pour contrôler les applications et les fichiers que vos utilisateurs peuvent lancer. Les logiciels de contrôle des applications et les stratégies vous aident à contrôler les fichiers exécutables, les scripts, les fichiers d’installation pour Windows, les bibliothèques de liens dynamiques et les paquets d’applications que vos utilisateurs finaux peuvent faire tourner. Pour plus d’informations, voir Using Microsoft AppLocker to manage application experience on Amazon AppStream 2.0. Pour en savoir plus sur la manière de sécuriser vos instances de streaming, voir Sécurité dans Amazon AppStream 2.0.

Un autre avantage de sécurité d’Amazon AppStream 2.0 est qu’il détruit les instances de streaming après chaque utilisation, ce qui réduit les risques. Il s’agit d’une bonne stratégie de réduction des risques de compromission des instances, car la durée de vie d’une instance est limitée à la durée de la session d’un utilisateur.

La prise en charge de SAML par Amazon AppStream 2.0 offre une couche de sécurité supplémentaire, en vous permettant de restreindre l’accès aux URLs fédérées par SAML depuis les réseaux d’entreprise uniquement, ainsi que la possibilité de mettre en place une authentification multi-facteur (MFA).

Vous pouvez monitorer l’environnement Amazon AppStream 2.0 grâce à l’utilisation de AWS CloudTrail et Amazon CloudWatch, ce qui vous permet de contrôler et de suivre l’utilisation d’Amazon AppStream 2.0.

Pour toutes ces raisons, AmazonAppStream 2.0 constitue une solution d’hébergement de bastion unique et attrayante.

Article original contribué par Chaim Landau et adapté en français par Jérome Gras, Solutions Architect dans les équipes AWS France.