Restreindre l'accès aux équilibreurs de charge des applications - 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.

Restreindre l'accès aux équilibreurs de charge des applications

Dans le cas d'une application Web ou d'un autre contenu diffusé par un Application Load Balancer connecté à Internet CloudFront , Elastic Load Balancing peut mettre en cache des objets et les diffuser directement aux utilisateurs (spectateurs), réduisant ainsi la charge sur votre Application Load Balancer. Un équilibreur de charge connecté à Internet possède un nom DNS pouvant être résolu publiquement et achemine les demandes des clients vers des cibles via Internet.

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

Configurer 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 provenaient 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 Mettre à jour une distribution et Créer une distribution.

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

Dans un AWS CloudFormation modèle, utilisez la OriginCustomHeaders propriété, comme indiqué 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 plus d’informations, consultez En-têtes personnalisés qui ne CloudFront peuvent pas être ajoutés aux demandes d'origine.

Configurer 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. Ajoutez une nouvelle règle. Suivez les instructions de la section Ajouter une règle, avec les modifications suivantes :

    • Ajoutez la règle à l'équilibreur de charge qui est à l'origine de votre CloudFront distribution.

    • Pour Ajouter une condition, choisissez l'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.

    • Pour Ajouter une action, choisissez Transférer vers. Choisissez le groupe cible dans lequel vous souhaitez transférer les demandes.

  2. Modifiez la règle par défaut dans l'écouteur de votre équilibreur de charge. Suivez les instructions de la section Modifier une règle, avec les modifications suivantes :

    • Modifiez la règle par défaut de l'équilibreur de charge à l'origine de votre CloudFront distribution.

    • Supprimez l'action par défaut, puis pour Ajouter une action, choisissez Renvoyer une réponse fixe.

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

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

Une fois ces étapes terminées, votre écouteur d'équilibreur de charge applique deux règles. Une règle transmet les demandes contenant l'en-tête HTTP (demandes provenant de CloudFront). L'autre règle envoie une réponse fixe à toutes les autres demandes (demandes qui ne proviennent pas de CloudFront).

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 plus d’informations, consultez Protocole (origines personnalisées uniquement).

Ce qui suit s'applique également lorsque vous configurez CloudFront l'utilisation du protocole HTTPS pour les demandes d'origine :

  • Vous devez configurer CloudFront pour transmettre l'Hosten-tête à l'origine avec la politique de demande d'origine. Vous pouvez utiliser la politique de AllViewer gestion des demandes d'origine.

  • Assurez-vous que votre Application Load Balancer possède un écouteur HTTPS (comme indiqué dans la section précédente). Pour plus d'informations, consultez la section Création d'un écouteur HTTPS dans le guide de l’utilisateur pour les Application Load Balancers. L'utilisation d'un écouteur HTTPS nécessite que vous disposiez d'un certificat SSL/TLS correspondant au nom de domaine acheminé vers votre Application Load Balancer.

  • Les certificats SSL/TLS pour ne CloudFront peuvent être demandés (ou importés) que us-east-1 Région AWS dans AWS Certificate Manager (ACM). Comme il CloudFront s'agit d'un service mondial, il distribue automatiquement le certificat de la us-east-1 région à toutes les régions associées à votre CloudFront distribution.

    • Par exemple, si vous avez un Application Load Balancer (ALB) dans la ap-southeast-2 région, vous devez configurer les certificats SSL/TLS à la fois dans la ap-southeast-2 région (pour utiliser le protocole HTTPS entre CloudFront et l'origine de l'ALB) et dans la us-east-1 région (pour utiliser le protocole HTTPS entre les utilisateurs et). CloudFront Les deux certificats doivent correspondre au nom de domaine qui est acheminé vers votre Application Load Balancer. Pour plus d’informations, consultez Région AWS pour AWS Certificate Manager.

  • 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 plus d’informations, consultez 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.

(Facultatif) Limitez l'accès à l'origine en utilisant la liste de AWS préfixes -managed pour CloudFront

Pour restreindre davantage l'accès à votre Application Load Balancer, vous pouvez configurer le groupe de sécurité associé à l'Application Load Balancer afin qu'il n'accepte que le trafic CloudFront provenant de pays où le service utilise AWS une liste de préfixes gérée. Cela empêche le trafic qui ne CloudFront provient pas d'atteindre votre Application Load Balancer au niveau de la couche réseau (couche 3) ou de la couche transport (couche 4).

Pour plus d'informations, consultez le billet de CloudFront blog Limiter l'accès à vos origines à l'aide de la liste de préfixes AWS-managed pour Amazon.