Limitazione dell'accesso ai servizi di Application Load Balancers - Amazon CloudFront

Limitazione dell'accesso ai servizi di Application Load Balancers

Per un'applicazione Web o altro contenuto distribuito da un Application Load Balancer in Elastic Load Balancing, CloudFront può memorizzare nella cache gli oggetti e servirli direttamente agli utenti (visualizzatori), riducendo il carico sull'Application Load Balancer. CloudFront può anche contribuire a ridurre la latenza e persino ad assorbire alcuni attacchi DDoS (Distributed Denial of Service). Tuttavia, se gli utenti possono ignorare CloudFront e accedere direttamente al tuo Application Load Balancer, non otterrai questi vantaggi. Tuttavia, puoi configurare Amazon CloudFront e il tuo Application Load Balancer per impedire agli utenti di accedere direttamente all'Application Load Balancer. Ciò consente agli utenti di accedere all'Application Load Balancer solo tramite CloudFront, assicurando loro di ottenere i vantaggi derivanti dall'utilizzo di CloudFront.

Per impedire agli utenti di accedere direttamente a un Application Load Balancer e consentire l'accesso solo tramite CloudFront, completa questi passaggi di alto livello:

  1. Configura CloudFront per aggiungere un'intestazione HTTP personalizzata alle richieste inviate a Application Load Balancer.

  2. Configura Application Load Balancer per inoltrare solo le richieste che contengono l'intestazione HTTP personalizzata.

  3. (Facoltativo) Richiedi HTTPS per migliorare la sicurezza di questa soluzione.

Per ulteriori informazioni, consulta i seguenti argomenti. Dopo aver completato questi passaggi, gli utenti possono accedere al servizio Application Load Balancer solo tramite CloudFront.

Configurazione di CloudFront per aggiungere un'intestazione HTTP personalizzata alle richieste

È possibile configurare CloudFront per aggiungere un'intestazione HTTP personalizzata alle richieste inviate all'origine (in questo caso, un Application Load Balancer).

Importante

Questo caso d'uso si basa sul mantenere segreti il nome dell'intestazione e il valore personalizzati. Se il nome e il valore dell'intestazione non sono segreti, altri client HTTP potrebbero potenzialmente includerli nelle richieste inviate direttamente a Application Load Balancer. Ciò può fare sì che Application Load Balancer si comporti come se le richieste provenissero da CloudFront quando non è così. Per evitare ciò, mantieni segreti il nome dell'intestazione e il valore personalizzati.

È possibile configurare CloudFront per aggiungere un'intestazione HTTP personalizzata alle richieste di origine con la console CloudFront, AWS CloudFormation o l'API CloudFront.

Aggiungere un'intestazione HTTP personalizzata (console CloudFront)

Nella console CloudFront, usa l'impostazione Intestazioni personalizzate Origin in Impostazioni Origin. Immetti il nome intestazione e il relativo valore, come illustrato nell'esempio seguente.

Nota

Il nome e il valore dell'intestazione in questo esempio sono solo per dimostrazione. In produzione, utilizza valori generati casualmente. Considera il nome e il valore dell'intestazione come credenziali protette, ad esempio un nome utente e una password.


                            Campi Intestazioni personalizzate Origin nella console CloudFront.

È possibile modificare l'impostazione delle intestazioni personalizzate di origine quando si crea o si modifica un'origine per una distribuzione CloudFront esistente e quando si crea una nuova distribuzione. Per ulteriori informazioni, consulta Aggiornare una distribuzione e Creazione di una distribuzione.

Come aggiungere un'intestazione HTTP personalizzata (AWS CloudFormation)

In un modello AWS CloudFormation utilizza la proprietà OriginCustomHeaders, come illustrato nell'esempio seguente.

Nota

Il nome e il valore dell'intestazione in questo esempio sono solo per dimostrazione. In produzione, utilizza valori generati casualmente. Considera il nome e il valore dell'intestazione come credenziali protette, ad esempio un nome utente e una password.

AWSTemplateFormatVersion: '2010-09-09' Resources: TestDistribution: Type: 'AWS::CloudFront::Distribution' Properties: DistributionConfig: Origins: - DomainName: app-load-balancer.example.com Id: Example-ALB CustomOriginConfig: OriginProtocolPolicy: https-only OriginSSLProtocols: - TLSv1.2 OriginCustomHeaders: - HeaderName: X-Custom-Header HeaderValue: random-value-1234567890 Enabled: 'true' DefaultCacheBehavior: TargetOriginId: Example-ALB ViewerProtocolPolicy: allow-all CachePolicyId: 658327ea-f89d-4fab-a63d-7e88639e58f6 PriceClass: PriceClass_All ViewerCertificate: CloudFrontDefaultCertificate: 'true'

Per ulteriori informazioni, consulta le proprietà Origin e OriginCustomHeader nella Guida per l’utente di AWS CloudFormation.

Aggiungere un'intestazione HTTP personalizzata (API CloudFront)

Nell'API CloudFront, utilizzare l'CustomHeadersoggetto all'internoOrigin. Per ulteriori informazioni, consulta CreateDistribution e UpdateDistribution nella Guida di riferimento dell'API Amazon CloudFronte la documentazione per il tuo SDK o altro client API.

Esistono alcuni nomi di intestazione che non è possibile specificare come intestazioni personalizzate di origine. Per ulteriori informazioni, consulta Intestazioni personalizzate che CloudFront non può aggiungere alle richieste di origine.

Configurazione di un Application Load Balancer per inoltrare solo le richieste che contengono un'intestazione specifica

Dopo aver configurato CloudFront per aggiungere un'intestazione HTTP personalizzata alle richieste inviate all'Application Load Balancer (vedere la sezione precedente), è possibile configurare il sistema di bilanciamento del carico in modo da inoltrare solo le richieste che contengono questa intestazione personalizzata. A tale scopo, aggiungere una nuova regola e modificando la regola predefinita nel listener del sistema di bilanciamento del carico.

Prerequisiti

Per utilizzare le procedure seguenti, è necessario un Application Load Balancer con almeno un listener. Se non ne hai ancora creato uno, vedere Creare un Application Load Balancer nella Guida dell'utente per Application Load Balancer.

Le procedure seguenti modificano un listener HTTPS. È possibile utilizzare lo stesso processo per modificare un listener HTTP.

Per aggiornare le regole in un listener di Application Load Balancer
  1. Apri la paginaLoad Balancers nella console Amazon EC2.

  2. Scegli il sistema di bilanciamento del carico che è l'origine della distribuzione CloudFront, quindi scegliere la scheda Listener .

  3. Per il listener che si sta modificando, scegli Visualizza/Modifica regole.

    
                        Visualizza/modifica link regole per un sistema di bilanciamento del carico nella console Amazon EC2.
  4. Scegli l'icona per aggiungere regole.

    
                        Aggiungere regole a un sistema di bilanciamento del carico nella console Amazon EC2.
  5. Scegliere Insert rule (Inserisci regola).

    
                        Inserire la regola in un sistema di bilanciamento del carico nella console Amazon EC2.
  6. Per la nuova regola, effettuare le seguenti operazioni:

    1. Scegliere Aggiungi condizione e quindi selezionare Header Http. Specificare il nome e il valore dell'intestazione HTTP aggiunti come intestazione personalizzata di origine in CloudFront.

    2. Scegliere Aggiungi azione, quindi Inoltra a. Scegliere il gruppo target in cui si desidera inoltrare le richieste.

    3. Scegliere Save (Salva) per creare la nuova regola.

    
                        Nuova regola in un sistema di bilanciamento del carico nella console Amazon EC2.
  7. Scegliere l'icona per modificare le regole.

    
                        Modificare le regole per un sistema di bilanciamento del carico nella console Amazon EC2.
  8. Scegliere l'icona di modifica per la regola predefinita.

    
                        Modificare la regola predefinita per un sistema di bilanciamento del carico nella console Amazon EC2.
  9. Per la regola predefinita, effettuare le seguenti operazioni:

    1. Eliminare l'azione predefinita.

      
                                Eliminare la regola predefinita per un sistema di bilanciamento del carico nella console Amazon EC2.
    2. Scegliere Aggiungi azione , quindi Restituisci risposta fissa.

    3. Per Codice risposta, immettere 403.

    4. Per Corpo risposta, immettere Access denied.

    5. Scegliere Aggiorna per aggiornare la regola predefinita.

    
                        Aggiorna la regola predefinita per un sistema di bilanciamento del carico nella console Amazon EC2.

Dopo aver completato questi passaggi, il listener del sistema di bilanciamento del carico dispone di due regole, come illustrato nell'immagine seguente. La prima regola inoltra le richieste che contengono l'intestazione HTTP (richieste provenienti da CloudFront). La seconda regola invia una risposta fissa a tutte le altre richieste (richieste che non provengono da CloudFront).


                Regole aggiornate per un sistema di bilanciamento del carico nella console Amazon EC2.

È possibile verificare che la soluzione funzioni inviando una richiesta alla distribuzione CloudFront e una all'Application Load Balancer. La richiesta a CloudFront restituisce l'applicazione Web o il contenuto e quello inviato direttamente all’Application Load Balancer restituisce una 403 risposta con il messaggio di testo normale Access denied.

(Facoltativo) Migliorare la sicurezza di questa soluzione

Per migliorare la sicurezza di questa soluzione, è possibile configurare la distribuzione CloudFront in modo che utilizzi sempre HTTPS quando si inviano richieste all'Application Load Balancer. Ricorda che questa soluzione funziona solo se si mantengono segreti il nome dell'intestazione e il valore personalizzati. L'utilizzo di HTTPS può aiutare a impedire a un intercettore di scoprire il nome e il valore dell'intestazione. Si consiglia inoltre di ruotare periodicamente il nome e il valore dell'intestazione.

Usa HTTPS per le richieste di origine

Per configurare CloudFront in modo che utilizzi HTTPS per le richieste di origine, impostare l'impostazione Origin Protocol Policy (Policy protocollo origine) solo su HTTPS. Questa impostazione è disponibile nella console CloudFront, in AWS CloudFormation e nell'API CloudFront. Per ulteriori informazioni, consulta Protocollo (solo origini personalizzate).

Quando si configura CloudFront per l'utilizzo di HTTPS per le richieste di origine è necessario assicurarsi che l'Application Load Balancer disponga di un listener HTTPS (come illustrato nella sezione precedente). Ciò richiede che si disponga di un certificato SSL/TLS che corrisponde al nome di dominio che viene instradato al Application Load Balancer. Per ulteriori informazioni, consulta la sezione relativa alla creazione di un listener nella Guida utente per Application Load Balancer.

Se gli utenti finali (noti anche come visualizzatorio client) dell'applicazione Web possono utilizzare HTTPS, è inoltre possibile configurare CloudFront in modo che preferisca (o addirittura richiedere) le connessioni HTTPS da parte degli utenti finali. A tale scopo, utilizzare l'impostazione del criterio del protocollo Viewer . È possibile impostarlo per reindirizzare gli utenti finali da HTTP a HTTPS o per rifiutare le richieste che utilizzano HTTP. Questa impostazione è disponibile nella console CloudFront, in AWS CloudFormation e nell'API CloudFront. Per ulteriori informazioni, consulta Viewer Protocol Policy (Policy protocollo visualizzatore).

Ruotare il nome e il valore dell'intestazione

Oltre a utilizzare HTTPS, si consiglia anche di ruotare periodicamente il nome e il valore dell'intestazione. I passaggi di alto livello per eseguire questa operazione sono i seguenti:

  1. Configurare CloudFront per aggiungere un'intestazione HTTP personalizzata aggiuntiva alle richieste inviate all'Application Load Balancer.

  2. Aggiornare la regola del listener Application Load Balancer per inoltrare le richieste che contengono questa intestazione HTTP personalizzata aggiuntiva.

  3. Configurare CloudFront per interrompere l'aggiunta dell'intestazione HTTP personalizzata originale alle richieste inviate all'Application Load Balancer.

  4. Aggiornare la regola del listener di Application Load Balancer per interrompere l'inoltro delle richieste contenenti l'intestazione HTTP personalizzata originale.

Per ulteriori informazioni sull'esecuzione di questi passaggi, vedere le sezioni precedenti.