由于 Amazon OpenSearch Service 中的某个主机标头无效或缺失,出现了“未授权”错误。
简短描述
当请求的主机标头值与完全限定域名(FQDN)不同时,系统就会记录 Amazon CloudWatch 中的 InvalidHostHeaderRequests 指标。
在以下情况下,Amazon OpenSearch Service 会拒绝缺少有效标头的请求:
- 请求的域可以公开访问。
- 请求的域使用开放的 AWS Identity and Access Management (IAM)访问策略,而不是基于资源的策略(例如基于 IP 的策略)。
为了防止触发 InvalidHostHeaderRequests 指标计数器,请考虑按照以下方法解决问题:
否则将出现以下错误:
$ 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
要解决“用户无权执行此操作”错误,请考虑使用以下方法:
- 为主机标头设置相应的值。
- 使用 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 浏览器中访问公共端点时,可能会出现未授权错误。有关详细信息,请参阅关于 VPC 域上的访问策略。
当您创建具有 VPC 访问权限的域时,端点如下所示(类似于公共端点):
`https://vpc-domain-name-identifier.region.os.amazonaws.com`
提示 3: 使用基于资源的策略
使用基于资源的访问策略来代替开放访问策略,因为前者会指定 IAM 角色或将请求限制在 IP 地址或 CIDR 范围内。
例如,以下基于 IP 的策略允许 CIDR 范围在 11.11.11.11/32 之内的请求。无论主机标头值为何,都允许对此范围内的域的请求,并且不记录 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 Dashboards 多租户
- OpenSearch Service 和 OpenSearch Dashboards 的 HTTP 基础身份验证
由于 FGAC 基于角色,因此在对请求进行身份验证时会评估用户凭证。如果细粒度访问控制功能对用户进行身份验证,则不会记录 InvalidHostHeaderRequests 指标。有关 FGAC 的详细信息,请参阅宏观大局:精细访问控制和 OpenSearch Service 安全性。
相关信息
创建和管理 Amazon OpenSearch Service 域
如何解决使用 OpenSearch Dashboards 进行 Amazon Cognito 身份验证时出现的问题?
Amazon OpenSearch Service 中的身份和访问管理