Salta al contenuto

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 l'ambiente Elastic Beanstalk, utilizza HTTPS per consentire agli utenti di connettersi in modo sicuro al sito web. Se non possiedi un nome di dominio, utilizza HTTPS con un certificato autofirmato per scopi di sviluppo e test.

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

È consigliabile utilizzare bilanciatori del carico con 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 nella Regione AWS ACM non è disponibile, utilizza AWS CLI.

Risoluzione

Prepara l'ambiente Elastic Beanstalk

Per indirizzare il traffico verso l'ambiente Elastic Beanstalk, registra un nuovo dominio con Amazon Route 53 oppure utilizza un altro provider di dominio.

Se l'URL dell'ambiente include una Regione, crea un nome alias. Se invece l'URL dell'ambiente non include una Regione, crea un record CNAME.

Importante: puoi 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 Confronto tra record alias e CNAME.

Quindi crea un certificato in ACM oppure carica un certificato di terze parti o autofirmato e una chiave privata su IAM.

Aggiungi listener ai bilanciatori del carico

Completa i seguenti passaggi:

  1. Apri la console Elastic Beanstalk.
  2. Seleziona l'ambiente.
  3. Nel pannello di navigazione, scegli Configurazione.
  4. Nella categoria Sistema di bilanciamento del carico, scegli Modifica.
  5. Per aggiungere il listener per la porta 443, completa i passaggi per il bilanciatore del carico presente nell'ambiente Elastic Beanstalk.
    Nota: è consigliabile utilizzare un Application Load Balancer o un Network Load Balancer.

Per un Application Load Balancer

Completa i seguenti passaggi:

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

Per un Network Load Balancer

Completa i seguenti passaggi:

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

Per un Classic Load Balancer

Completa i seguenti passaggi:

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

Configura le istanze per interrompere le connessioni HTTPS

Per configurare le istanze in modo da interrompere le connessioni HTTPS, utilizza il file di configurazione .ebextensions per modificare il software in esecuzione nelle istanze. Per ulteriori informazioni, consulta Terminazione di HTTPS su EC2 istanze Amazon che eseguono.NET Core su Linux. Inoltre, puoi utilizzare i file di configurazione per modificare i gruppi di sicurezza e consentire connessioni sicure.

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

Per configurare le istanze in modo da arrestare le connessioni HTTPS, completa i seguenti passaggi:

  1. Aggiungi un listener sicuro al bilanciatore del carico. Utilizza uno dei seguenti file di configurazione in base al tipo di bilanciatore del carico presente nell'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:
        Port: '443'
  2. Aggiorna il bilanciatore del carico per ricevere il traffico sulla porta 443.
    Puoi creare un nuovo gruppo di sicurezza e fare in modo che Elastic Beanstalk utilizzi quel gruppo 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 input e output sulla porta 80 per consentire le connessioni HTTP. Per consentire solo connessioni sicure, rimuovi la configurazione per la porta 80 nella sezione SecurityGroupIngress.

  3. Aggiungi regole in ingresso e in uscita che consentano la comunicazione tramite la porta 443 tra il gruppo di sicurezza del bilanciatore 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"]}
    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. Aggiungi il seguente frammento al file di configurazione, quindi salvalo nella directory .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-----

    Nota: sostituisci certificate file contents con il contenuto del file del tuo certificato e private key contents con il contenuto della tua chiave privata.

    La configurazione della terminazione di HTTPS 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, carica i contenuti su Amazon Simple Storage Service (Amazon S3), quindi trasferiscili su Amazon EC2 utilizzando S3Auth.

  5. Utilizza la chiave files per creare i seguenti file nell'istanza /etc/pki/tls/certs/server.crt.

  6. Utilizza il seguente file del certificato per creare il file del certificato nell'istanza:

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

    Nota: sostituisci certificate file contents con il contenuto del tuo certificato.Se hai certificati intermedi, includili in server.crtdopo il certificato del sito.

  7. Utilizza /etc/pki/tls/certs/server.key per creare il file della chiave privata nell'istanza.
    Nota: sostituisci private key contents con il contenuto della chiave privata utilizzata per creare la richiesta di certificato o il certificato autofirmato.

  8. Configura il server proxy in esecuzione nell'istanza per terminare HTTPS. Tutte le piattaforme avviano la configurazione del server proxy in modo uniforme.

  9. Aggiungi i file di configurazione a una directory denominata .ebextensions nella root del pacchetto dell'applicazione per distribuire i file di configurazione nell'ambiente.

  10. Quindi distribuisci il codice sorgente che include questi file di configurazione.

Arresta HTTPS nell'istanza (HTTPS end-to-end) in un ambiente a istanza singola

Utilizza il file .ebextensions per consentire il traffico in entrata sulla porta 443 verso l'istanza su cui viene eseguita l'applicazione Elastic Beanstalk.

Esempio:

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

Quindi configura il server proxy in esecuzione nell'istanza per terminare HTTPS.

Nota: la configurazione della terminazione di HTTPS 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, carica i contenuti su Amazon Simple Storage Service (Amazon S3) e trasferiscili su Amazon EC2 utilizzando S3Auth.

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