何时记录 InvalidHostHeaderRequests 指标,以及此条件会如何影响 Amazon Elasticsearch Service 域?

上次更新时间:2020 年 5 月 28 日

InvalidHostHeaderRequests 指标是何时记录的? 此外,此条件如何影响 Amazon Elasticsearch Service (Amazon ES) 域?

解决方法

当请求的主机标头值和域的完全限定域名 (FQDN) 不同时,则会记录 InvalidHostHeaderRequests Amazon CloudWatch 指标。

若满足以下其中一个条件,则 Amazon ES 会拒绝无有效标头的请求:

  • 请求的域可公开访问。
  • 请求的域使用的是开放的 AWS Identity and Access Management (IAM) 访问策略,而非基于资源的策略(如基于 IP 的策略)。

这意味着,如果满足以下任何一个条件,则允许请求且不记录 InvalidHostHeaderRequests

  • 该请求具有有效的主机标头(主机标头与域的 FQDN 匹配)。
  • 请求的域位于 Virtual Private Cloud (VPC) 中。有关更多信息,请参阅对 Amazon Elasticsearch Service 域的 VPC 支持
  • 请求的域使用基于资源的策略。

示例

以下是开放访问策略的示例:

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