Passer au contenu

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, utilisez le protocole HTTPS afin de permettre aux utilisateurs de se connecter en toute sécurité à votre site Web. Si vous n'avez pas de nom de domaine, utilisez le protocole HTTPS avec un certificat auto-signé à 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 sur Gestion des identités et des accès AWS (AWS IAM).

Il est recommandé d'utiliser des équilibreurs de charge avec 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 auto-signé et une clé privée dans IAM. Si ACM n'est pas disponible dans votre région AWS, utilisez l'AWS CLI.

Résolution

Préparer votre environnement Elastic Beanstalk

Utilisez Amazon Route 53 pour enregistrer un nouveau domaine ou un autre fournisseur de domaine pour acheminer le trafic vers votre environnement Elastic Beanstalk.

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 plus d'informations, consultez la section Comparaison des enregistrements d’alias et CNAME.

Puis, créez un certificat dans ACM ou chargez un certificat tiers ou auto-signé et une clé privée dans IAM.

Ajouter des écouteurs à vos équilibreurs de charge

Procédez comme suit :

  1. Ouvrez la console Elastic Beanstalk.
  2. Sélectionnez votre environnement.
  3. Dans le volet de navigation, choisissez Configuration.
  4. Dans la catégorie Équilibreur de charge, choisissez Modifier.
  5. Pour ajouter l'écouteur pour le port 443, suivez les instructions relatives à l'équilibreur de charge dans votre environnement Elastic Beanstalk.
    Remarque : Il est recommandé d'utiliser un Application Load Balancer ou un Network Load Balancer.

Pour un Application Load Balancer

Procédez comme suit :

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

Pour un Network Load Balancer

Procédez comme suit :

  1. Choisissez Ajouter un écouteur.
  2. Dans Port, saisissez le port du trafic entrant. Par exemple, 443.
  3. Choisissez Ajouter, puis Appliquer.

Pour un Classic Load Balancer

Procédez comme suit :

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

Configurer vos instances pour arrêter les connexions HTTPS

Pour configurer vos instances afin d'arrêter les connexions HTTPS, utilisez le fichier de configuration .ebextensions pour modifier le logiciel qui s'exécute sur les instances. Pour plus d'informations, consultez la section Résiliation du protocole HTTPS sur les instances Amazon EC2 exécutant .NET Core sous Linux. Vous pouvez également utiliser 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 de la section Arrêter le protocole HTTPS sur l'instance (HTTPS de bout en bout) dans un environnement à instance unique.

Pour configurer vos instances afin d'arrêter les connexions HTTPS, procédez comme suit :

  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:
        Port: '443'
  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 l'entrée et la sortie via 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 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"]}
    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"]}
  4. Ajoutez l'extrait suivant à votre fichier de configuration, puis enregistrez-le dans le répertoire .ebextensions :

    files:
      /etc/pki/tls/certs/server.crt:
        content: |
          -----BEGIN CERTIFICATE-----
          certificate file contents
          -----END CERTIFICATE-----
    
      /etc/pki/tls/certs/server.key:
        content: |      
          -----BEGIN RSA PRIVATE KEY-----
          private key contents
          -----END RSA PRIVATE KEY-----

    Remarque : Remplacez contenu du fichier de certificat par le contenu de votre fichier de certificat et contenu de la clé privée par le contenu de votre clé privée.

    La configuration de résiliation HTTPS 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, chargez le contenu des fichiers dans Amazon Simple Storage Service (Amazon S3), puis utilisez S3Auth pour les transférer vers Amazon EC2.

  5. Utilisez la clé de fichiers pour créer les fichiers suivants sur l'instance /etc/pki/tls/certs/server.crt.

  6. Utilisez le fichier de certificat suivant pour créer le fichier de certificat sur l'instance :

         -----BEGIN CERTIFICATE-----
      certificate file contents
      -----END CERTIFICATE-----
      -----BEGIN CERTIFICATE-----
      first intermediate certificate
      -----END CERTIFICATE-----
      -----BEGIN CERTIFICATE-----
      second intermediate certificate
      -----END CERTIFICATE-----

    Remarque : Remplacez contenu du fichier de certificat par le contenu de votre certificat. Si vous disposez de certificats intermédiaires, incluez-les dans server.crt après le certificat de votre site.

  7. Utilisez /etc/pki/tls/certs/server.key pour créer le fichier de clé privée sur l'instance.
    Remarque : Remplacez contenu de la clé privée par le contenu de la clé privée utilisée pour créer la demande de certificat ou le certificat auto-signé.

  8. Configurez le serveur proxy qui s'exécute sur l'instance pour résilier le protocole HTTPS. Toutes les plateformes démarrent la configuration du serveur proxy de manière uniforme.

  9. Ajoutez les fichiers de configuration à un répertoire nommé .ebextensions à la racine de votre ensemble d'applications pour déployer des fichiers de configuration dans votre environnement.

  10. Déployez le code source qui inclut les fichiers de configuration.

Arrêter le protocole HTTPS sur l'instance (HTTPS de bout en bout) dans un environnement à instance unique

Utilisez le fichier .ebextensions pour autoriser le trafic entrant sur le port 443 vers l'instance sur laquelle s'exécute votre application Elastic Beanstalk.

Exemple :

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

Puis, configurez le serveur proxy qui s'exécute sur l'instance pour résilier le protocole HTTPS.

Remarque : La configuration de résiliation HTTPS 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, chargez le contenu des fichiers dans Amazon Simple Storage Service (Amazon S3) et utilisez S3Auth pour les transférer vers Amazon EC2.

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

AWS OFFICIELA mis à jour il y a un an