Restriction de l'accès aux Application Load Balancers - Amazon CloudFront

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Restriction de l'accès aux Application Load Balancers

Pour une application Web ou un autre contenu diffusé par un Application Load Balancer dans Elastic Load Balancing, CloudFront vous pouvez mettre en cache des objets et les diffuser directement aux utilisateurs (spectateurs), réduisant ainsi la charge sur votre Application Load Balancer. CloudFrontpeut également contribuer à réduire la latence et même à absorber certaines attaques par déni de service distribué (DDoS). Toutefois, si les utilisateurs peuvent contourner CloudFront et accéder directement à votre Application Load Balancer, vous ne bénéficierez pas de ces avantages. Mais vous pouvez configurer Amazon CloudFront et votre Application Load Balancer pour empêcher les utilisateurs d'accéder directement à l'Application Load Balancer. Cela permet aux utilisateurs d'accéder à l'Application Load Balancer uniquement par le biais de celui-ci CloudFront, ce qui vous permet de bénéficier des avantages de son utilisation. CloudFront

Pour empêcher les utilisateurs d'accéder directement à un Application Load Balancer et autoriser l'accès uniquement par ce biais CloudFront, procédez comme suit :

  1. Configurez CloudFront pour ajouter un en-tête HTTP personnalisé aux demandes qu'il envoie à l'Application Load Balancer.

  2. Configurez l'Application Load Balancer pour transférer uniquement les demandes contenant l'en-tête HTTP personnalisé.

  3. (Facultatif) HTTPS est requis pour améliorer la sécurité de cette solution.

Pour plus d’informations, consultez les rubriques suivantes. Une fois ces étapes effectuées, les utilisateurs ne peuvent accéder à votre Application Load Balancer que via. CloudFront

Configuration CloudFront pour ajouter un en-tête HTTP personnalisé aux demandes

Vous pouvez configurer CloudFront pour ajouter un en-tête HTTP personnalisé aux requêtes qu'il envoie à votre origine (dans ce cas, un Application Load Balancer).

Important

Ce cas d'utilisation repose sur le fait de garder secrets le nom et la valeur de l'en-tête personnalisé. Si le nom et la valeur d'en-tête ne sont pas secrets, d'autres clients HTTP peuvent potentiellement les inclure dans les demandes qu'ils envoient directement à l'Application Load Balancer. Cela peut faire en sorte que l'Application Load Balancer se comporte comme si les demandes venaient d'une CloudFront autre source. Pour éviter cela, gardez le nom et la valeur de l'en-tête personnalisé secrets.

Vous pouvez configurer CloudFront pour ajouter un en-tête HTTP personnalisé aux demandes d'origine à l'aide de la CloudFront console ou de l' CloudFront API. AWS CloudFormation

Pour ajouter un en-tête HTTP personnalisé (CloudFront console)

Dans la CloudFront console, utilisez le paramètre Origin Custom Headers dans les paramètres d'Origin. Saisissez le nom de l'en-tête et sa valeur, comme illustré dans l'exemple suivant.

Note

Le nom et la valeur de l'en-tête dans cet exemple n’existent qu'à des fins de démonstration. En production, utilisez des valeurs générées aléatoirement. Traitez le nom et la valeur de l'en-tête en tant qu’informations d'identification sécurisées, comme un nom d'utilisateur et un mot de passe.


                            Champs d'en-têtes personnalisés Origin dans la  CloudFront console.

Vous pouvez modifier le paramètre Origin Custom Headers lorsque vous créez ou modifiez l'origine d'une CloudFront distribution existante et lorsque vous créez une nouvelle distribution. Pour plus d’informations, consultez Mise à jour d’une distribution et Création d’une distribution.

Pour ajouter un en-tête HTTP personnalisé (AWS CloudFormation)

Dans un modèle AWS CloudFormation, utilisez la propriété OriginCustomHeaders, comme illustré dans l'exemple suivant.

Note

Le nom et la valeur de l'en-tête dans cet exemple n’existent qu'à des fins de démonstration. En production, utilisez des valeurs générées aléatoirement. Traitez le nom et la valeur de l'en-tête en tant qu’informations d'identification sécurisées, comme un nom d'utilisateur et un mot de passe.

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'

Pour plus d'informations, consultez l'origine et les OriginCustomHeaderpropriétés dans le guide de AWS CloudFormation l'utilisateur.

Pour ajouter un en-tête HTTP personnalisé (CloudFront API)

Dans l' CloudFront API, utilisez l'CustomHeadersobjet qu'il contientOrigin. Pour plus d'informations, consultez CreateDistributionUpdateDistributionla référence des CloudFront API Amazon et la documentation de votre SDK ou de tout autre client d'API.

Il existe certains noms d'en-tête que vous ne pouvez pas spécifier en tant qu'en-têtes personnalisés d'origine. Pour de plus amples informations, veuillez consulter En-têtes personnalisés qui ne CloudFront peuvent pas être ajoutés aux demandes d'origine.

Configuration d'un Application Load Balancer pour transférer uniquement les demandes contenant un en-tête spécifique

Après avoir configuré CloudFront pour ajouter un en-tête HTTP personnalisé aux demandes qu'il envoie à votre Application Load Balancer (voir la section précédente), vous pouvez configurer l'équilibreur de charge pour ne transférer que les demandes contenant cet en-tête personnalisé. Pour ce faire, ajoutez une nouvelle règle et modifiez la règle par défaut dans l’écouteur de votre équilibreur de charge.

Prérequis

Pour utiliser les procédures suivantes, vous avez besoin d'un Application Load Balancer avec au moins un écouteur. Si vous n'en avez pas encore créé, reportez-vous à la section Créer un Application Load Balancer dans le guide de l'utilisateur pour les Application Load Balancers.

Les procédures suivantes modifient un écouteur HTTPS. Vous pouvez utiliser le même processus pour modifier un écouteur HTTP.

Pour mettre à jour les règles dans un écouteur d'Application Load Balancer
  1. Ouvrez la pageÉquilibreurs de chargedans la console Amazon EC2.

  2. Choisissez l'équilibreur de charge à l'origine de votre CloudFront distribution, puis cliquez sur l'onglet Listeners.

  3. Pour l’écouteur que vous modifiez, choisissez Afficher/Modifier les règles.

    
                        Lien pour afficher/modifier les règles d'un équilibreur de charge dans la console Amazon EC2.
  4. Choisissez l'icône pour ajouter des règles.

    
                        Ajoutez des règles à un équilibreur de charge dans la console Amazon EC2.
  5. Choisissez Insert Rule.

    
                        Insérez une règle dans un équilibreur de charge dans la console Amazon EC2.
  6. Pour la nouvelle règle, procédez comme suit :

    1. Choisissez Ajouter une condition, puis En-tête Http. Spécifiez le nom et la valeur de l'en-tête HTTP que vous avez ajoutés en tant qu'en-tête personnalisé d'origine CloudFront.

    2. Choisissez Ajouter une action, puis Transférer à. Choisissez le groupe cible dans lequel vous souhaitez transférer les demandes.

    3. Choisissez Enregistrer pour créer la nouvelle règle.

    
                        La nouvelle règle dans un équilibreur de charge dans la console Amazon EC2.
  7. Choisissez l'icône pour modifier les règles.

    
                        Modifier les règles d'un équilibreur de charge dans la console Amazon EC2.
  8. Choisissez l'icône de modification de la règle par défaut.

    
                        Modifier la règle par défaut d'un équilibreur de charge dans la console Amazon EC2.
  9. Pour la règle par défaut, procédez comme suit :

    1. Supprimez l'action par défaut.

      
                                Supprimer la règle par défaut pour un équilibreur de charge dans la console Amazon EC2.
    2. Choisissez Ajouter une action, puis Renvoyer une réponse fixe.

    3. Pour le Code de réponse, saisissez 403.

    4. Pour Corps de réponse, saisissez Access denied.

    5. Choisissez Mettre à jour pour mettre à jour la règle par défaut.

    
                        Mettre à jour la règle par défaut pour un équilibreur de charge dans la console Amazon EC2.

Après avoir terminé ces étapes, votre écouteur d'équilibreur de charge dispose de deux règles, comme illustré dans l'image suivante. La première règle transmet les demandes contenant l'en-tête HTTP (demandes provenant de CloudFront). La deuxième règle envoie une réponse fixe à toutes les autres demandes (demandes qui ne proviennent pas de CloudFront).


                Règles mises à jour pour un équilibreur de charge dans la console Amazon EC2.

Vous pouvez vérifier que la solution fonctionne en envoyant une demande à votre CloudFront distribution et une autre à votre Application Load Balancer. La demande de CloudFront renvoi de votre application Web ou de votre contenu, et celle envoyée directement à votre Application Load Balancer, renvoient une 403 réponse avec le message en texte brut. Access denied

(Facultatif) Améliorer la sécurité de cette solution

Pour améliorer la sécurité de cette solution, vous pouvez configurer votre CloudFront distribution pour qu'elle utilise toujours le protocole HTTPS lorsque vous envoyez des demandes à votre Application Load Balancer. N'oubliez pas que cette solution ne fonctionne que si vous gardez le nom et la valeur de l'en-tête personnalisé secrètes. L'utilisation de HTTPS peut aider à empêcher un compte-écoute de découvrir le nom et la valeur de l'en-tête. Nous vous recommandons également de faire changer périodiquement le nom et la valeur de l'en-tête.

Utiliser HTTPS pour les demandes d'origine

CloudFront Pour configurer l'utilisation du protocole HTTPS pour les demandes d'origine, définissez le paramètre Origin Protocol Policy sur HTTPS uniquement. Ce paramètre est disponible dans la CloudFront console et dans l' CloudFront API. AWS CloudFormation Pour de plus amples informations, veuillez consulter Protocole (origines personnalisées uniquement).

Lorsque vous configurez CloudFront l'utilisation du protocole HTTPS pour les demandes d'origine, vous devez vous assurer que votre Application Load Balancer dispose d'un écouteur HTTPS (comme indiqué dans la section précédente). Pour cela, vous devez disposer d'un certificat SSL/TLS qui correspond au nom de domaine qui est routé vers votre Application Load Balancer. Pour plus d'informations, consultez la section Création d'un écouteur HTTPS dans le guide de l’utilisateur pour les Application Load Balancers.

Si les utilisateurs finaux (également appelés spectateurs ou clients) de votre application Web peuvent utiliser le protocole HTTPS, vous pouvez également le configurer de manière CloudFront à préférer (voire à exiger) des connexions HTTPS de la part des utilisateurs finaux. Pour ce faire, utilisez le paramètre Stratégie de protocole d'utilisateur. Vous pouvez le définir pour rediriger les utilisateurs finaux de HTTP vers HTTPS ou pour rejeter les demandes utilisant HTTP. Ce paramètre est disponible dans la CloudFront console et dans l' CloudFront API. AWS CloudFormation Pour de plus amples informations, veuillez consulter Viewer Protocol Policy.

Changer le nom et la valeur de l'en-tête

En plus d'utiliser HTTPS, nous vous recommandons également de changer périodiquement le nom et la valeur de l'en-tête. Les étapes de haut niveau pour ce faire sont les suivantes :

  1. Configurez CloudFront pour ajouter un en-tête HTTP personnalisé supplémentaire aux demandes qu'il envoie à l'Application Load Balancer.

  2. Mettez à jour la règle de l’écouteur de l'Application Load Balancer pour transférer les demandes contenant cet en-tête HTTP personnalisé supplémentaire.

  3. Configurez CloudFront pour arrêter d'ajouter l'en-tête HTTP personnalisé d'origine aux demandes qu'il envoie à l'Application Load Balancer.

  4. Mettez à jour la règle de l'écouteur de l'Application Load Balancer pour arrêter le transfert des demandes contenant l'en-tête HTTP personnalisé d'origine.

Pour plus d'informations sur la réalisation de ces étapes, consultez les sections précédentes.