如何解析 Amazon OpenSearch Service 中缺失或无效的主机标头?
上次更新日期:2021 年 7 月 23 日
由于 Amazon OpenSearch Service(Amazon Elasticsearch Service 的后继者)中的主机标头无效或缺失,我收到了未授权错误。如何解决此问题?
简短描述
当请求的主机标头值和完全限定域名 (FQDN) 不同时,则会记录 Amazon CloudWatch 中的 InvalidHostHeaderRequests 指标。
对于下面的情况,Amazon OpenSearch Service 拒绝缺失有效标头的请求:
- 请求的域可公开访问。
- 请求的域使用的是开放的 AWS Identity and Access Management (IAM) 访问策略,而非基于资源的策略(如基于 IP 的策略)。
为了防止触发 InvalidHostHeaderRequests 指标计数器,请考虑以下方法:
- 使用有效的主机标头(主机标头必须与您的 OpenSearch Service 域的 FQDN 匹配)。
- 使用 Virtual Private Cloud (VPC) 启动您的 OpenSearch Service 域。
- 使用基于资源的策略(限制 IP 地址或指定 IAM 角色)。
- 启用精细访问控制 (FGAC)。
否则,您将会遇到以下错误:
$ curl -H 'Host: domain.com' domain-endpoint-name
User is not authorized to perform this action
解决方法
示例
以下是开放访问策略的示例:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "es:*",
"Resource": "arn:aws:es:Region:account-id:domain/os-domain-name/*"
}
]
}
以下命令使用 domain.com 作为主机标头值,而该值并非 os-domain-name 域的有效标头。当向具有开放访问策略的可公开访问域提交该请求时,会记录 InvalidHostHeaderRequests 指标且拒绝该请求。
$ curl -H 'Host: domain.com' os-domain-name
User is not authorized to perform this action
要解决“User is not authorized to perform this action”(用户无权执行此操作)错误,请考虑以下方法:
- 设置适当的主机标头值。
- 使用 VPC 启动您的 OpenSearch Service 域。
- 使用基于 IP 的访问策略而非开放访问策略。
- 使用精细访问控制 (FGAC)。
提示 1:设置适当的主机标头值
以下示例命令指定域名作为主机标头值:
$ curl -H 'Host: os-endpoint' os-endpoint
以下使用使用的是 AWS 终端节点 URL:
curl -H 'Host: xxxxxx..os.amazonaws.com' https://xxxxxx..os.amazonaws.com
提示 2:使用 VPC 启动您的 OpenSearch Service 域
使用 VPC 启动您的 OpenSearch Service 域可提供额外的安全层。VPC 还允许您通过安全组管理对域的访问。因此,避免使用公有终端节点启动域可作为最佳实践。尽管您的请求到达了 OpenSearch Service 域,但在 Web 浏览器中访问公有终端节点时,您可能会收到 Not authorized(未授权)错误。有关更多信息,请参阅关于 VPC 域上的访问策略。
当您创建具有 VPC 访问权限的域时,终端节点如下所示(类似于公有终端节点):
https://vpc-domain-name-identifier.region.os.amazonaws.com
提示 3:使用基于资源的策略
使用可指定 IAM 角色或者限制对 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/os-domain-name/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"11.11.11.11/32"
]
}
}
}
]
}
提示 4:使用精细访问控制 (FGAC)
除了基于资源的访问策略外,您还可以使用 FGAC 管理对 OpenSearch Service 域的数据访问。精细访问控制具有以下优势:
- 基于角色的访问控制
- 索引、文档和字段级别的安全
- OpenSearch 控制面板多租户
- OpenSearch Service 和 OpenSearch 控制面板的 HTTP 基本身份验证
由于 FGAC 基于角色,因此在对请求进行身份验证时会评估用户凭据。如果精细访问控制对用户进行身份验证,则不会记录 InvalidHostHeaderRequests 指标。有关 FGAC 的更多信息,请参阅宏观大局:精细访问控制和 OpenSearch Service 安全性。