InvalidHostHeaderRequests メトリクスはどのようなときに記録されますか? また、この状態は Amazon Elasticsearch Service ドメインにどう影響を与えますか?

最終更新日: 2020 年 5 月 28 日

InvalidHostHeaderRequests メトリクスはいつ記録されますか? また、この状態は Amazon Elasticsearch Service (Amazon ES) ドメインにどのように影響しますか?

解決方法

Amazon CloudWatch メトリクスの InvalidHostHeaderRequests は、リクエストのホストヘッダー値がドメインの完全修飾ドメイン名 (FQDN) と異なる場合に記録されます。

Amazon ES では、次のいずれかに該当する場合、有効なヘッダーを持たないリクエストを拒否します。

  • パブリックアクセス可能なドメインがリクエストされたとき。
  • リクエストされたドメインが、リソースベースのポリシー (IP ベースの ポリシーなど) ではなく、オープンな AWS Identity and Access Management (IAM) アクセスポリシーを使用しているとき。

従って、以下の条件のいずれかが該当するリクエストは許可され、InvalidHostHeaderRequests は記録されないことになります。

  • リクエストが有効なホストヘッダーを持っている (ホストヘッダーがドメインの FQDN と一致する) とき。
  • リクエストされたドメインが Virtual Private Cloud (VPC) にあるとき。詳細については「VPC Support for Amazon Elasticsearch Service Domains」をご参照ください。
  • リクエストされたドメインが、リソースベースのポリシーを使用しているとき。

オープンアクセスポリシーの例を次に示します。

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

次のコマンドでは、ホストヘッダー値として domain.com を使用しています。これは、es-domain-name ドメインの有効なヘッダーではありません。このリクエストが、オープンアクセスポリシーを使用して、パブリックにアクセス可能なドメインに対し送信された場合は拒否され、InvalidHostHeaderRequests メトリクスが記録されます。

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

この問題を解決するには、次の解決策のどちらか、もしくは両方を使用します。

  • ホストヘッダーに適切な値を設定する。
  • オープンアクセスポリシーではなく、 IP ベースのアクセスポリシーを使用する。

ホストヘッダーに適切な値を設定する

次の例に示すコマンドでは、ホストヘッダー値にドメイン名を指定しています。これは有効なリクエストです。Amazon ES ドメインに送信されたこのリクエストは許可され、InvalidHostHeaderRequests メトリクスは記録されません。

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

AWS エンドポイント URL を使用する例を次に示します。

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

IP ベースのアクセスポリシーを使用する

オープンアクセスポリシーではなく、リクエストを IP アドレスまたは CIDR 範囲に制限するアクセスポリシーを使用します。たとえば、次の IP ベースのポリシーでは、11.11.11.11/32 の CIDR 範囲でリクエストが許可されます。この範囲にあるドメインへのリクエストはホストヘッダーの値がどのような場合でも受け付けられ、InvalidHostHeaderRequests メトリクスは記録されません。

{
    "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"
                    ]
                }
            }
        }
    ]
}