如何解决 Amazon OpenSearch Service 中主机标头缺失或无效的问题?

2 分钟阅读
0

由于 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 中的身份和访问管理

AWS 官方
AWS 官方已更新 3 年前