Quand la métrique InvalidHostHeaderRequests est-elle enregistrée, et comment cette condition affecte-t-elle un domaine Amazon Elasticsearch Service ?

Date de la dernière mise à jour : 28/05/2020

Quand la métrique InvalidHostHeaderRequests est-elle enregistrée ? De plus, comment cette erreur affecte-t-elle un domaine Amazon Elasticsearch Service (Amazon ES) ?

Résolution

La métrique Amazon CloudWatch InvalidHostHeaderRequests est enregistrée lorsque la valeur d'en-tête d'hôte d'une demande est différente du nom de domaine entièrement qualifié (FQDN) du domaine.

Amazon ES rejette les demandes qui n'ont pas d'en-tête valide si l'une des conditions suivantes est également vraie :

  • Le domaine demandé est accessible publiquement.
  • Le domaine demandé utilise une stratégie d'accès AWS Identity and Access Management (IAM) ouvert, plutôt qu'une stratégie basée sur les ressources (par exemple, une stratégie basée sur l'IP).

Cela signifie que les demandes sont autorisées et que la métrique InvalidHostHeaderRequests n'est pas enregistrée si l'une des conditions suivantes est vraie :

  • La demande possède un en-tête d'hôte valide (l'en-tête d'hôte correspond au nom de domaine complet du domaine).
  • Le domaine demandé se trouve dans un Virtual Private Cloud (VPC). Pour plus d'informations, consultez Support VPC pour les domaines for Amazon Elasticsearch Service.
  • Le domaine demandé utilise une stratégie basée sur les ressources.

Exemples

Voici un exemple de politique d'accès ouvert :

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "es:*",
            "Resource": "arn:aws:es:Region:account-id:domain/es-domain-name/*"
        }
    ]
}

La commande suivante utilise domaine.com comme valeur d'en-tête d'hôte, qui n'est pas un en-tête valide pour le domaine es-domain-name. Lorsque cette demande est envoyée à un domaine accessible publiquement avec une stratégie d'accès ouvert, la métrique InvalidHostHeaderRequests est enregistrée et la demande est rejetée.

$ curl -H 'Host: domain.com' es-domain-name
User is not authorized to perform this action

Utilisez l'une des solutions suivantes, ou les deux, pour résoudre ce problème :

  • Définissez la valeur appropriée pour l'en-tête d'hôte.
  • Utilisez une stratégie d'accès basée sur l'adresse IP au lieu d'une stratégie d'accès ouverte.

Définir la valeur appropriée pour l'en-tête d'hôte

L'exemple de commande suivant spécifie le nom de domaine comme valeur d'en-tête d'hôte. Il s'agit d'une demande valide. Lorsque cette demande est envoyée à un domaine Amazon ES, la demande est acceptée et la métrique InvalidHostHeaderRequests n'est pas enregistrée.

$ curl -H 'Host: es-endpoint' es-endpoint

Voici un exemple qui utilise une URL de point de terminaison AWS :

curl -H 'Host: xxxxxx..es.amazonaws.com' https://xxxxxx..es.amazonaws.com

Utiliser une stratégie d'accès basée sur l'adresse IP

Au lieu d'utiliser une stratégie d'accès ouvert, utilisez une politique d'accès qui restreint les demandes à une adresse IP ou une plage d'adresses CIDR. Par exemple, la stratégie basée sur l'adresse IP suivante autorise les demandes dans la plage d'adresses CIDR 11.11.11.11/32. Les demandes aux domaines de cette plage sont autorisées et la métrique InvalidHostHeaderRequests n'est pas enregistrée, quelle que soit la valeur de l'en-tête de l'hôte.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "es:*",
            "Resource": "arn:aws:es:region:account-id:domain/es-domain-name/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "11.11.11.11/32"
                    ]
                }
            }
        }
    ]
}