Comment configurer HTTPS dans mon environnement Elastic Beanstalk ?

Dernière mise à jour : 20/08/2020

Je souhaite configurer HTTPS dans mon environnement AWS Elastic Beanstalk, afin de pouvoir chiffrer les données de mon équilibreur de charge dans mon instance Amazon Elastic Compute Cloud (Amazon EC2).

Brève description

Si vous avez acheté et configuré un nom de domaine personnalisé pour votre environnement Elastic Beanstalk, vous pouvez utiliser HTTPS pour permettre aux utilisateurs de se connecter à votre site Web en toute sécurité. Si vous ne possédez pas de nom de domaine, vous avez toujours la possibilité d'utiliser HTTPS avec un certificat auto-signé à des fins de développement et de tests.

AWS Certificate Manager (ACM) est l'outil recommandé pour allouer, gérer et déployer vos certificats serveur par programmation. Vous pouvez également utiliser l'interface de ligne de commande AWS (CLI AWS). Si ACM n'est pas disponible dans votre région AWS, vous pouvez charger un certificat tiers ou auto-signé et une clé privée dans AWS Identity and Access Management (IAM) en utilisant l'interface de ligne de commande (CLI) AWS.

Solution

Configuration préalable de votre environnement Elastic Beanstalk

1.    Pour router le trafic vers votre environnement Elastic Beanstalk, enregistrez un nouveau domaine en utilisant Amazon Route 53.

2.    Créez un nom d'alias si l'URL de votre environnement contient une région AWS, ou un enregistrement CNAME si ce n'est pas le cas.

Important : vous utilisez des enregistrements CNAME avec les environnements créés avant 2016. Vous ne pouvez le faire avec un domaine impliquant un domaine de zone apex (également appelé « domaine racine » ou « domaine nu »). Pour plus d'informations, consultez Choix entre les enregistrements alias et non-alias.

3.    Créez un certificat dans ACM ou chargez un certificat tiers ou auto-signé, ainsi qu'une clé privée, dans IAM.

Désactivation du protocole HTTPS au niveau de l'équilibreur de charge

1.    Ouvrez la console Elastic Beanstalk, puis sélectionnez votre environnement.

2.    Dans le volet de navigation, choisissez Configuration.

3.    Dans la catégorie Équilibreur de charge, sélectionnez Modifier.

4.    Pour ajouter l'écouteur du port 443, effectuez l'une des procédures suivantes en fonction du type d'équilibreur de charge dans votre environnement Elastic Beanstalk.

Pour ajouter un écouteur pour un Classic Load Balancer :

1.    Sélectionnez Ajouter un écouteur.

2.    Dans la section Port, saisissez le numéro du port associé au trafic entrant (il s'agit généralement du port 443).

3.    Dans la section Protocole, sélectionnez HTTPS.

4.    Dans la section Port d'instance, saisissez 80.

5.    Dans la section Protocole d'instance, sélectionnez HTTP.

6.    Dans la section Certificat SSL, sélectionnez votre certificat, puis, dans le menu déroulant, la stratégie SSL que vous souhaitez utiliser.

7.    Sélectionnez Ajouter, puis Appliquer.

Pour ajouter un écouteur à un équilibreur de charge d'application :

1.    Sélectionnez Ajouter un écouteur.

2.    Dans la section Port, saisissez le numéro du port associé au trafic entrant (il s'agit généralement du port 443).

3.    Dans la section Protocole, sélectionnez HTTPS.

4.    Dans la section Certificat SSL, sélectionnez votre certificat, puis, dans le menu déroulant, la stratégie SSL que vous souhaitez utiliser.

5.    Sélectionnez Ajouter, puis Appliquer.

Pour ajouter un écouteur à un Network Load Balancer :

1.    Sélectionnez Ajouter un écouteur.

2.    Dans la section Port, saisissez le numéro du port associé au trafic entrant (il s'agit généralement du port 443).

3.    Sélectionnez Ajouter, puis Appliquer.

Désactivation du protocole HTTPS au niveau de l'instance dans un environnement à charge équilibrée

Pour paramétrer vos instances de manière à ce que le protocole HTTPS soit désactivé, vous devez utiliser les fichiers de configuration afin de modifier le logiciel s'exécutant sur les instances, ainsi que les groupes de sécurité. Les connexions sécurisées seront ainsi autorisées.

Important : si vous utilisez un environnement à instance unique, ignorez les étapes suivantes et effectuez celles de la section Désactivation du protocole HTTPS au niveau de l'instance dans un environnement à instance unique.

1.    Pour ajouter un écouteur sécurisé à votre équilibreur de charge, utilisez l'un des fichiers de configuration suivants, en fonction de l'équilibreur dans votre environnement Elastic Beanstalk.

Pour un Classic Load Balancer, utilisez un fichier .ebextensions/https-reencrypt-clb.config :

option_settings:
  aws:elb:listener:443:
    InstancePort: 443
    InstanceProtocol: HTTPS
  aws:elasticbeanstalk:application:
    Application Healthcheck URL: HTTPS:443/

En cas d'équilibreur de charge d'application, utilisez un fichier de type .ebextensions/https-reencrypt-alb.config :

option_settings:
  aws:elbv2:listener:443:
    DefaultProcess: https
    ListenerEnabled: 'true'
    Protocol: HTTPS
  aws:elasticbeanstalk:environment:process:https:
    Port: '443'
    Protocol: HTTPS

S'il s'agit d'un Network Load Balancer, utilisez un fichier .ebextensions/https-reencrypt-nlb.config :

option_settings:
  aws:elbv2:listener:443:
    DefaultProcess: https
    ListenerEnabled: 'true'
  aws:elasticbeanstalk:environment:process:https:
    Port: '443'

2.    Modifiez les paramètres de l'équilibreur de charge de manière à ce que le trafic soit réceptionné au niveau du port 443.

Vous pouvez créer un nouveau groupe de sécurité, puis faire en sorte qu'Elastic Beanstalk utilise ce dernier pour réceptionner le trafic sur le port 443. Par exemple, le fichier .ebextensions/https-lbsecuritygroup.config suivant permet de créer un groupe de sécurité et de l'associer à l'équilibreur de charge.

option_settings:
  # Use the custom security group for the load balancer
  aws:elb:loadbalancer:
    SecurityGroups: '`{ "Ref" : "loadbalancersg" }`'
    ManagedSecurityGroup: '`{ "Ref" : "loadbalancersg" }`'
Resources:
  loadbalancersg:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: load balancer security group
      VpcId: vpc-#######
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 443
          ToPort: 443
          CidrIp: 0.0.0.0/0
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0
      SecurityGroupEgress:
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0

Dans le fichier de configuration précédent, remplacez la valeur VpcId par celle applicable à votre environnement.

Remarque : l'exemple précédent fait référence au trafic entrant et sortant via le port 80. Pour autoriser uniquement les connexions sécurisées, supprimez la configuration du port 80 dans la section SecurityGroupIngress.

3.    Ajoutez des règles applicables au trafic entrant et sortant, et permettant la communication via le port 443, entre le groupe de sécurité de l'équilibreur de charge et celui des instances.

Par exemple, vous pouvez utiliser le fichier .ebextensions/https-backendsecurity.config suivant :

Resources:
  # Add 443-inbound to instance security group (AWSEBSecurityGroup)
  httpsFromLoadBalancerSG: 
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
      IpProtocol: tcp
      ToPort: 443
      FromPort: 443
      SourceSecurityGroupId: {"Fn::GetAtt" : ["loadbalancersg", "GroupId"]}
  # Add 443-outbound to load balancer security group (loadbalancersg)
  httpsToBackendInstances: 
    Type: AWS::EC2::SecurityGroupEgress
    Properties:
      GroupId: {"Fn::GetAtt" : ["loadbalancersg", "GroupId"]}
      IpProtocol: tcp
      ToPort: 443
      FromPort: 443
      DestinationSecurityGroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}

Maintenant, l'équilibreur de charge se connecte en toute sécurité à vos instances back-end à l'aide de HTTPS. L'équilibreur de charge accepte n'importe quel certificat de l'instance, auto-signé ou émis par une autorité de certification reconnue.

Remarque : vous pouvez ajouter des stratégies à l'équilibreur de charge qui lui indique d'accepter uniquement un certificat spécifique. Par exemple, le fichier .ebextensions/https-backendauth.config suivant permet de créer deux stratégies. Une stratégie définit un certificat public, et l'autre stratégie indique à l'équilibreur de charge de n'accepter que ce certificat pour les connexions au port 443 de l'instance.

option_settings:
  # Backend Encryption Policy
  aws:elb:policies:backendencryption:
    PublicKeyPolicyNames: backendkey
    InstancePorts:  443
  # Public Key Policy
  aws:elb:policies:backendkey:
    PublicKey: |
      -----BEGIN CERTIFICATE-----
      ################################################################
      ################################################################
      ################################################################
      ################################################################
      ################################################
      -----END CERTIFICATE-----

4.    Configurez le serveur proxy qui s'exécute au niveau de l'instance afin de désactiver le protocole HTTPS.

Remarque : la configuration varie en fonction de la pile logicielle. Le fichier de configuration .ebextensions d'une pile logicielle code en dur la valeur de la clé privée et du certificat serveur dans le dossier .ebextensions. Pour sécuriser davantage ces fichiers, vous pouvez télécharger le contenu dans Amazon Simple Storage Service (Amazon S3) et les extraire vers Amazon EC2 à l'aide de S3Auth.

5.    Pour déployer les fichiers de configuration dans votre environnement, ajoutez-les à un répertoire nommé .ebextensions, à la racine du bundle de votre application. Ensuite, déployez le code source qui inclut ces fichiers de configuration.

Désactivation du protocole HTTPS au niveau de l'instance dans un environnement à instance unique

1.    Autorisez le trafic entrant au niveau du port 443 et en direction de l'instance EC2 sur laquelle votre application Elastic Beanstalk s'exécute.

Dans l'exemple suivant, la mention .ebextensions permet d'autoriser le trafic entrant au niveau du port 443 :

Resources:
  sslSecurityGroupIngress: 
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
      IpProtocol: tcp
      ToPort: 443
      FromPort: 443
      CidrIp: 0.0.0.0/0

2.    Configurez le serveur proxy qui s'exécute au niveau de l'instance afin de désactiver le protocole HTTPS.

Remarque : la configuration varie en fonction de la pile logicielle. Le fichier de configuration .ebextensions d'une pile logicielle code en dur la valeur de la clé privée et du certificat serveur dans le dossier .ebextensions. Pour sécuriser davantage ces fichiers, vous pouvez télécharger le contenu dans S3 et les extraire vers Amazon EC2 à l'aide de S3Auth.

3.    Pour déployer les fichiers de configuration dans votre environnement, ajoutez-les à un répertoire nommé .ebextensions, à la racine du bundle de votre application. Ensuite, déployez le code source qui inclut ces fichiers de configuration.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?