Come faccio a configurare HTTPS per il mio ambiente Elastic Beanstalk?

8 minuti di lettura
0

Desidero configurare HTTPS per il mio ambiente AWS Elastic Beanstalk in modo da poter crittografare i dati dal mio sistema di bilanciamento del carico alla mia istanza Amazon Elastic Compute Cloud (Amazon EC2).

Breve descrizione

Se hai configurato un nome di dominio personalizzato per il tuo ambiente Elastic Beanstalk, puoi utilizzare HTTPS per consentire agli utenti di connettersi al tuo sito web in modo sicuro. Se non possiedi un nome di dominio, puoi comunque utilizzare HTTPS con un certificato autofirmato per scopi di test e sviluppo.

Per gli ambienti a istanza singola è necessario creare localmente la chiave privata e il certificato. Quindi, carica il certificato su AWS Identity and Access Management (IAM).

È consigliabile utilizzare Gestione certificati AWS (ACM) per fornire, gestire e distribuire in modo programmatico i certificati del server. Puoi anche utilizzare l'interfaccia della linea di comando AWS (AWS CLI) per caricare un certificato di terze parti o autofirmato e una chiave privata su IAM. Se ACM non è disponibile nella tua Regione AWS, utilizza l'interfaccia AWS CLI.

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta la sezione Risolvere gli errori AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Risoluzione

Prepara il tuo ambiente Elastic Beanstalk

  1. Per indirizzare il traffico verso il tuo ambiente Elastic Beanstalk, usa Amazon Route 53 per registrare un nuovo dominio oppure usa un altro provider di dominio.
  2. Se l'URL del tuo ambiente include una regione, crea un nome alias. Se, invece, l'URL del tuo ambiente non include una regione, crea un record CNAME.
    Importante: è possibile utilizzare i record CNAME per ambienti creati prima del 2016. Non puoi usare un record CNAME con un dominio apex di zona (anche noto come dominio root o dominio nudo). Per ulteriori informazioni, consulta la sezione Scelta tra record alias e non alias.
  3. Crea un certificato in ACM oppure carica un certificato di terze parti o autofirmato e una chiave privata su IAM.

Aggiungi ascoltatori ai sistemi di bilanciamento del carico

  1. Apri la console Elastic Beanstalk, quindi seleziona il tuo ambiente.
  2. Nel pannello di navigazione, scegli Configurazione.
  3. Nella categoria Sistema di bilanciamento del carico, scegli Modifica.
  4. Per aggiungere l'ascoltatore per la porta 443, completa i passaggi per il sistema di bilanciamento del carico presente nell'ambiente Elastic Beanstalk.

Classic Load Balancer

Completa i seguenti passaggi:

  1. Scegli Aggiungi listener.
  2. In Porta, inserisci la porta del traffico in entrata (in genere 443).
  3. In Protocollo, seleziona HTTPS.
  4. In Porta dell'istanza, inserisci 80.
  5. In Protocollo dell'istanza, scegli HTTP.
  6. In Certificato SSL, scegli il tuo certificato, quindi scegli la policy SSL dal menu a tendina.
  7. Scegli Aggiungi, quindi scegli Applica.

Application Load Balancer

Completa i seguenti passaggi:

  1. Scegli Aggiungi listener.
  2. In Porta, inserisci la porta del traffico in entrata (in genere 443).
  3. In Protocollo, scegli HTTPS.
  4. In Certificato SSL, scegli il tuo certificato, quindi scegli la policy SSL dal menu a discesa.
  5. Scegli Aggiungi, quindi scegli Applica.

Network Load Balancer

Completa i seguenti passaggi:

  1. Scegli Aggiungi listener.
  2. In Porta, inserisci la porta del traffico in entrata (in genere 443).
  3. Scegli Aggiungi, quindi scegli Applica.

Configura le tue istanze per interrompere le connessioni HTTPS

Per configurare le istanze in modo da interrompere le connessioni HTTPS, bisogna utilizzare i file di configurazione per modificare il software in esecuzione sulle istanze. È inoltre necessario utilizzare i file di configurazione per modificare i gruppi di sicurezza in modo che consentano connessioni sicure.

Importante: se utilizzi un ambiente a istanza singola, salta i passaggi seguenti. Completa i passaggi indicati nella sezione Terminare HTTPS sull'istanza (HTTPS end-to-end) in un ambiente a istanza singola.

  1. Aggiungi un ascoltatore sicuro al tuo sistema di bilanciamento del carico. Utilizza uno dei seguenti file di configurazione in base al tipo di sistema di bilanciamento del carico presente nel tuo ambiente Elastic Beanstalk.

    Per un Classic Load Balancer, utilizza il file .ebextensions/https-reencrypt-clb.config:

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

    Per un Application Load Balancer, utilizza il file .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

    Per un Network Load Balancer, utilizza il file .ebextensions/https-reencrypt-nlb.config:

    option_settings:
      aws:elbv2:listener:443:
        DefaultProcess: https
        ListenerEnabled: 'true'
      aws:elasticbeanstalk:environment:process:https:
    
  2. Aggiorna il sistema di bilanciamento del carico per ricevere il traffico sulla porta 443.

    Puoi creare un nuovo gruppo di sicurezza e quindi fare in modo che Elastic Beanstalk utilizzi quel gruppo di sicurezza per ricevere il traffico sulla porta 443. Ad esempio, il seguente file .ebextensions/https-lbsecuritygroup.config crea un gruppo di sicurezza e lo collega al sistema di bilanciamento del carico:

    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

    Nota: sostituisci VpcId con il valore per il tuo ambiente.

    L'esempio precedente include l'ingresso e l'uscita tramite la porta 80 per consentire le connessioni HTTPS. Per consentire solo connessioni sicure, rimuovi la configurazione per la porta 80 nella sezione SecurityGroupIngress.

  3. Aggiungi regole di ingresso e uscita che consentano la comunicazione tramite la porta 443 tra il gruppo di sicurezza del sistema di bilanciamento del carico e il gruppo di sicurezza delle istanze.

    Ad esempio, utilizza il seguente file .ebextensions/https-backendsecurity.config:

    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"]}

    A questo punto il sistema di bilanciamento del carico utilizza HTTPS per connettersi in modo sicuro alle tue istanze di backend. Il sistema di bilanciamento del carico accetta qualsiasi certificato dall'istanza, ad esempio un certificato autofirmato o rilasciato da un'autorità di certificazione attendibile.

    Nota: è possibile aggiungere policy al sistema di bilanciamento del carico che gli indichino di considerare attendibile solo un certificato specifico. Ad esempio, il seguente file .ebextensions/https-backendauth.config crea due policy. Una policy specifica un certificato pubblico e l'altra indica al sistema di bilanciamento del carico di considerare attendibile solo quel certificato pubblico per le connessioni alla porta 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. Configura il server proxy in esecuzione sull'istanza per terminare HTTPS.

    Nota: la configurazione varia a seconda dello stack di soluzioni. Il file .ebextensions per qualsiasi stack di soluzioni inserisce il valore della chiave privata e del certificato del server nel file .ebextensions. Per proteggere ulteriormente questi file, puoi caricare i contenuti su Amazon Simple Storage Service (Amazon S3) e trasferirli su Amazon EC2 utilizzando S3Auth.

  5. Per distribuire i file di configurazione nel tuo ambiente, aggiungi i file di configurazione a una directory denominata .ebextensions nella radice del pacchetto dell'applicazione. Quindi, distribuisci il codice sorgente che include questi file di configurazione.

Terminare HTTPS sull'istanza (HTTPS end-to-end) in un ambiente a istanza singola

  1. Consenti il traffico in entrata sulla porta 443 verso l'istanza su cui è in esecuzione l'applicazione Elastic Beanstalk.

    L'esempio seguente utilizza .ebextensions per consentire il traffico in entrata sulla porta 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. Configura il server proxy in esecuzione sull'istanza per terminare HTTPS.

    Nota: la configurazione varia a seconda dello stack di soluzioni. Il file .ebextensions per qualsiasi stack di soluzioni inserisce il valore della chiave privata e del certificato del server nel file .ebextensions. Per proteggere ulteriormente questi file, puoi caricare i contenuti su Amazon S3 e utilizzare S3Auth per trasferirli su Amazon EC2.

  3. Per distribuire i file di configurazione nel tuo ambiente, aggiungi i file di configurazione a una directory denominata .ebextensions nella radice del pacchetto dell'applicazione. Quindi, distribuisci il codice sorgente che include questi file di configurazione.

AWS UFFICIALE
AWS UFFICIALEAggiornata 4 mesi fa