如何解決在 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 指標計數器,請考慮以下方法:

否則,您會收到以下錯誤:

$ 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 型政策會允許在 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 Dashboards 多重租用
  • OpenSearch Service 和 OpenSearch Dashboards 的 HTTP 基本身分驗證

由於 FGAC 是依角色而定,因此在對請求進行身分驗證時會評估使用者憑證。如果更精細的存取控制權會對使用者進行身分驗證,則系統不會記錄 InvalidHostHeaderRequests 指標。如需有關 FGAC 的詳細資訊,請參閱 更加總體的情況:更精細的存取控制權和 OpenSearch Service 安全性