Comment résoudre un en-tête d'hôte non valide ou manquant dans Amazon Elasticsearch Service ?

Date de la dernière mise à jour : 01/07/2021

Je reçois une erreur Non autorisé en raison d'un en-tête d'hôte non valide ou manquant dans Amazon Elasticsearch Service (Amazon ES). Comment résoudre ce problème ?

Brève description

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

Pour les conditions suivantes, Amazon ES rejette les demandes dont les en-têtes valides sont manquants :

  • 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).

Pour éviter que le compteur de métriques InvalidHostHeaderRequests ne soit déclenché, envisagez les approches suivantes :

Sinon, vous recevez l'erreur suivante :

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

Résolution

Exemple

Voici un exemple de stratégie 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

Pour résoudre l'erreur « L'utilisateur n'est pas autorisé à effectuer cette action », envisagez les approches suivantes :

  • Définissez la valeur appropriée pour l'en-tête d'hôte.
  • Lancez votre domaine Amazon ES à l'aide d'un VPC.
  • Utilisez une stratégie d'accès basée sur l'adresse IP au lieu d'une stratégie d'accès ouverte.
  • Utilisez le Contrôle précis des accès (FGAC).

Conseil 1 : Définissez 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 :

$ 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

Conseil 2 : Lancez votre domaine Amazon ES à l'aide d'un VPC

L'utilisation d'un VPC pour lancer votre domaine Amazon ES offre une couche de sécurité supplémentaire. Un VPC vous permet également de gérer l'accès au domaine via des groupes de sécurité. Par conséquent, il est recommandé d'éviter d'utiliser un point de terminaison public pour lancer votre domaine. Bien que votre demande atteigne le domaine Amazon ES, vous pouvez recevoir une erreur Non autorisé lorsque vous accédez au point de terminaison public dans un navigateur Web. Pour plus d'informations, consultez la section À propos des politiques d'accès sur les domaines VPC.

Lorsque vous créez un domaine avec accès au VPC, le point de terminaison ressemble à ceci (similaire à un point de terminaison public) :

https://vpc-domain-name-identifier.region.es.amazonaws.com

Conseil 3 : Utilisez une stratégie basée sur les ressources

Au lieu d'une stratégie d'accès ouvert, utilisez une stratégie d'accès basée sur les ressources qui spécifie les rôles IAM ou 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"
                    ]
                }
            }
        }
    ]
}

Conseil 4 : Utilisez le Contrôle précis des accès (FGAC)

Outre les stratégies d'accès basées sur les ressources, vous pouvez utiliser FGAC pour gérer l'accès aux données de votre domaine Amazon ES. Le contrôle précis des accès offre les avantages suivants :

  • Contrôle d'accès basé sur les rôles
  • Sécurité au niveau de l'index, du document et du champ
  • Multilocataire Kibana
  • Authentification HTTP de base pour Elasticsearch et Kibana

Étant donné que FGAC est basé sur des rôles, les informations d'identification des utilisateurs sont évaluées lors de l'authentification d'une demande. Si un contrôle précis des accès authentifie l'utilisateur, la métrique InvalidHostHeaderRequests n'est pas enregistrée. Pour plus d'informations sur FGAC, consultez La situation dans son ensemble : contrôle précis des accès et sécurité Amazon ES.