Comment puis-je résoudre le problème d'en-tête d'hôte manquant ou non valide dans Amazon OpenSearch Service ?

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

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

Brève description

La métrique InvalidHostHeaderRequests dans 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 entièrement qualifié (FQDN).

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

  • Le domaine demandé est à accès public.
  • Le domaine demandé utilise une stratégie d'accès AWS Identity and Access Management (IAM) ouverte, 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' domain-endpoint-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/os-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 OS-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' os-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 OpenSearch Service à 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 d'accès sélectif (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: os-endpoint' os-endpoint

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

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

Conseil 2 : lancez votre domaine OpenSearch Service à l'aide d'un VPC

L'utilisation d'un VPC pour lancer votre domaine OpenSearch Service 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, une bonne pratique consiste à éviter d'utiliser un point de terminaison public pour lancer votre domaine. Bien que votre demande atteigne le domaine OpenSearch Service, vous pouvez recevoir un message d'erreur Non autorisée lorsque vous accédez au point de terminaison public dans un navigateur web. Pour plus d'informations, veuillez consulter la rubrique À 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.os.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/os-domain-name/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "11.11.11.11/32"
                    ]
                }
            }
        }
    ]
}

Conseil 4 : utilisez le contrôle d'accès sélectif (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 OpenSearch Service. Le contrôle sélectif 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
  • Tableaux de bord OpenSearch mutualisé
  • Authentification HTTP de base pour OpenSearch Service et les tableaux de bord OpenSearch

É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 Le tableau d'ensemble : contrôle d'accès affiné et sécurité OpenSearch Service.