何时记录 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"
]
}
}
}
]
}