Comment puis-je configurer le protocole HTTPS pour mon environnement Elastic Beanstalk ?

Lecture de 8 minute(s)
0

Je souhaite configurer le protocole HTTPS pour mon environnement AWS Elastic Beanstalk afin de chiffrer les données de mon équilibreur de charge vers mon instance Amazon Elastic Compute Cloud (Amazon EC2).

Brève description

Si vous avez configuré un nom de domaine personnalisé pour votre environnement Elastic Beanstalk, vous pouvez utiliser le protocole HTTPS pour permettre aux utilisateurs de se connecter en toute sécurité à votre site Web. Si vous n'avez pas de nom de domaine, vous pouvez utiliser le protocole HTTPS avec un certificat autosigné à des fins de développement et de test.

Pour les environnements à instance unique, vous devez créer la clé privée et le certificat en local. Chargez ensuite le certificat Gestion des identités et des accès AWS (AWS IAM).

Il est recommandé d'utiliser AWS Certificate Manager (ACM) pour provisionner, gérer et déployer vos certificats de serveur par programmation. Vous pouvez également utiliser l'interface de la ligne de commande AWS (AWS CLI) pour charger un certificat tiers ou autosigné et une clé privée dans IAM. Si ACM n'est pas disponible dans votre région AWS, utilisez l'interface AWS CLI.

Remarque : si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), reportez-vous à Résolution des erreurs liées à AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'interface AWS CLI.

Résolution

Préparer votre environnement Elastic Beanstalk

  1. Pour pouvoir acheminer le trafic vers votre environnement Elastic Beanstalk, vous devez utiliser Amazon Route 53 pour enregistrer un nouveau domaine ou un autre fournisseur de domaine.
  2. Si l'URL de votre environnement inclut une région, créez un nom d'alias. Si l'URL de votre environnement n'inclut pas de région, créez un enregistrement CNAME.
    Important : vous pouvez utiliser des enregistrements CNAME pour des environnements créés avant 2016. Vous ne pouvez pas utiliser un enregistrement CNAME avec un domaine de zone apex, également connu sous le nom de domaine racine ou domaine nu. Pour en savoir plus, reportez-vous à Choix entre des enregistrements avec ou sans alias.
  3. Créez un certificat dans ACM ou chargez un certificat tiers ou autosigné et une clé privée dans IAM.

Ajouter des écouteurs à vos équilibreurs de charge

  1. Ouvrez la console Elastic Beanstalk, puis choisissez votre environnement.
  2. Dans le volet de navigation, choisissez Configuration.
  3. Dans la catégorie Équilibreur de charge, choisissez Modifier.
  4. Pour ajouter l'écouteur pour le port 443, suivez les instructions relatives à l'équilibreur de charge qui se trouve dans votre environnement Elastic Beanstalk.

Classic Load Balancer

Procédez comme suit :

  1. Choisissez Ajouter un écouteur.
  2. Dans le champ Port, saisissez le port du trafic entrant, généralement 443.
  3. Dans le champ Protocole, sélectionnez HTTPS.
  4. Dans le champ Port de l'instance, saisissez 80.
  5. Dans le champ Protocole de l'instance, choisissez HTTP.
  6. Dans le champ Certificat SSL, choisissez votre certificat, puis choisissez la Stratégie SSL dans la liste déroulante.
  7. Choisissez Ajouter, puis Appliquer.

Application Load Balancer

Procédez comme suit :

  1. Choisissez Ajouter un écouteur.
  2. Dans le champ Port, saisissez le port du trafic entrant, généralement 443.
  3. Dans le champ Protocole, sélectionnez HTTPS.
  4. Dans le champ Certificat SSL, choisissez votre certificat, puis choisissez la Stratégie SSL dans la liste déroulante.
  5. Choisissez Ajouter, puis Appliquer.

Network Load Balancer

Procédez comme suit :

  1. Choisissez Ajouter un écouteur.
  2. Dans le champ Port, saisissez le port du trafic entrant, généralement 443.
  3. Choisissez Ajouter, puis Appliquer.

Configurer vos instances pour mettre fin aux connexions HTTPS

Pour configurer vos instances afin de mettre fin aux connexions HTTPS, utilisez les fichiers de configuration pour modifier le logiciel qui s'exécute sur les instances. Utilisez également les 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 instructions suivantes. Suivez les étapes indiquées dans la section Mettre fin au protocole HTTPS sur l'instance (HTTPS de bout en bout) dans un environnement à instance unique.

  1. Ajoutez un écouteur sécurisé à votre équilibreur de charge. Utilisez l'un des fichiers de configuration suivants en fonction du type d'équilibreur de charge qui se trouve dans votre environnement Elastic Beanstalk.

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

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

    Pour un Application Load Balancer, utilisez le fichier .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

    Pour un Network Load Balancer, utilisez le fichier .ebextensions/https-reencrypt-nlb.config :

    option_settings:
      aws:elbv2:listener:443:
        DefaultProcess: https
        ListenerEnabled: 'true'
      aws:elasticbeanstalk:environment:process:https:
    
  2. Mettez à jour l'équilibreur de charge pour recevoir le trafic sur le port 443.

    Vous pouvez créer un nouveau groupe de sécurité, puis demander à Elastic Beanstalk de l'utiliser pour recevoir du trafic sur le port 443. Par exemple, le fichier .ebextensions/https-lbsecuritygroup.config ci-dessous 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

    Remarque : remplacez VpcId par la valeur correspondant à votre environnement.

    L'exemple précédent inclut les entrées et sorties via le port 80 pour autoriser les connexions HTTPS. 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 autorisent 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, utilisez 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"]}

    L'équilibreur de charge utilise désormais le protocole HTTPS pour se connecter en toute sécurité à vos instances principales. L'équilibreur de charge accepte n'importe quel certificat provenant de l'instance, tel qu'un certificat autosigné ou un certificat émis par une autorité de certification de confiance.

    Remarque : vous pouvez ajouter des stratégies à l'équilibreur de charge afin de lui indiquer de ne faire confiance qu'à un certificat spécifique. Par exemple, le fichier .ebextensions/https-backendauth.config suivant permet de créer deux stratégies. L'une des stratégies spécifie un certificat public, tandis que l'autre indique à l'équilibreur de charge que seul le certificat public doit être approuvé pour les connexions au port 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 sur l'instance pour mettre fin au protocole HTTPS.

    Remarque : la configuration varie en fonction de votre pile de solutions. Les .ebextensions de n'importe quelle pile de solutions codent en dur la valeur de la clé privée et du certificat de serveur dans les .ebextensions. Pour sécuriser davantage ces fichiers, vous pouvez charger leurs contenus dans Amazon Simple Storage Service (Amazon S3) et utiliser S3Auth pour les transférer vers Amazon EC2.

  5. Pour déployer des fichiers de configuration dans votre environnement, ajoutez-les au répertoire .ebextensions qui se trouve à la racine de votre ensemble d'applications. Déployez ensuite le code source qui inclut les fichiers de configuration.

Mettre fin au protocole HTTPS sur l'instance (HTTPS de bout en bout) dans un environnement à instance unique

  1. Autorisez le trafic entrant sur le port 443 vers l'instance sur laquelle s'exécute votre application Elastic Beanstalk.

    L'exemple suivant utilise les .ebextensions pour autoriser le trafic entrant sur le 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 sur l'instance pour mettre fin au protocole HTTPS.

    Remarque : la configuration varie en fonction de votre pile de solutions. Les .ebextensions de n'importe quelle pile de solutions codent en dur la valeur de la clé privée et du certificat de serveur dans les .ebextensions. Pour sécuriser davantage ces fichiers, vous pouvez charger leurs contenus dans Amazon S3 et utiliser S3Auth pour les transférer vers Amazon EC2.

  3. Pour déployer des fichiers de configuration dans votre environnement, ajoutez-les au répertoire .ebextensions qui se trouve à la racine de votre ensemble d'applications. Déployez ensuite le code source qui inclut les fichiers de configuration.

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 5 mois