Comment configurer HTTPS dans mon environnement Elastic Beanstalk ?

Dernière mise à jour : 18/12/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.

Remarque: si vous recevez des erreurs lors de l'exécution de commandes depuis l'interface de ligne de commande AWS (AWS CLI), assurez-vous d'utiliser la version la plus récente de l'interface de ligne de commande AWS CLI.

Ré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 comprend une région AWS. Ou, créez un enregistrement CNAME si l'URL de votre environnement n'inclut pas de région AWS.

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.

Ajouter des écouteurs à vos équilibreurs de charge

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

2.    Dans le panneaude 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, choisissez votre certificat, puis, dans la liste déroulante, 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.

Configurez vos instances pour mettre fin aux connexions HTTPS

Pour configurer vos instances afin de mettre fin aux connexions HTTPS, vous devez utiliser des fichiers de configuration pour modifier le logiciel exécuté sur les instances. Vous devez également utiliser des fichiers de configuration pour modifier les groupes de sécurité afin qu'ils autorisent des connexions sécurisées.

Important : si vous utilisez un environnement à instance unique, ignorez les étapes suivantes. Ensuite, suivez les étapes de la section Terminer les HTTP sur l'instance (HTTPS de bout en bout) dans une section d'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 Application Load Balancer 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 inclut l'entrée et la sortie sur le port 80 pour autoriser les connexions HTTP. Pour autoriser uniquement les connexions sécurisées, supprimez la configuration du port 80 dans la section SecurityGroupIngress.

3.    Ajoutez des règles d'entrée et de sortie qui permettent la communication via le port 443 entre le groupe de sécurité de l'équilibreur de charge et le groupe de sécurité 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 indiquent à cet équilibreur de charge de n'approuver qu'un certificat spécifique. Par exemple, le fichier .ebextensions/https-backendauth.config suivant permet de créer deux stratégies. Une stratégie spécifie un certificat public et l'autre stratégie indique à l'équilibreur de charge de n'approuver que ce certificat pour les connexions au port d'instance 443.

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 sur Amazon Simple Storage Service (Amazon S3) et les extraire vers Amazon EC2 à l'aide de S3Auth.

5.    Pour déployer des fichiers de configuration dans votre environnement, ajoutez les fichiers de configuration dans un répertoire nommé .ebextensions à la racine de votre ensemble d'applications. 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 vers S3 et les extraire vers Amazon EC2 à l'aide de S3Auth.

3.    Pour déployer des fichiers de configuration dans votre environnement, ajoutez les fichiers de configuration dans un répertoire nommé .ebextensions à la racine de votre ensemble d'applications. Ensuite, déployez le code source qui inclut ces fichiers de configuration. </ p


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


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