跳至内容

如何对连接到 OpenSearch 无服务器集群或控制面板时收到的 403 或 401 错误进行故障排除?

2 分钟阅读
0

当我对我的 Amazon OpenSearch 无服务器集群运行 OpenSearch API 命令或尝试访问控制面板时,收到 403 或 401 错误。

解决方案

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

403 禁止访问错误

403 Forbidden(403 禁止访问)错误消息通常在 AWS Identity and Access Management (IAM) 身份没有正确的权限或者请求签名不正确时出现。

当您在客户端中开启详细日志记录或选择 IAM 控制台上的 Network(网络)选项卡时,您可能会看到错误消息“x-aoss-response-hint': 'X01:gw-helper-deny”。

对于 OpenSearch Dashboards 和 OpenSearch Serverless 数据面板 API 的访问权限,请在 IAM 身份权限策略中包括 aoss:DashboardsAccessAllaoss:APIAccessAll 操作。要查看策略示例,请参阅使用 OpenSearch API 操作

对于 OpenSearch Serverless 数据面板 API 的访问权限,签名不正确的请求也可能导致 403 Forbidden(403 禁止访问)错误。确认您的 IAM 权限正确后,请查看您的客户端如何与 OpenSearch API 进行交互。

要编写代码的简单版本,请参阅将数据引入 Amazon OpenSearch 无服务器集合

使用 curl 从 Amazon Elastic Compute Cloud (Amazon EC2) 实例测试您的端点。

将记录引入索引的 curl 命令示例:

curl -XPOST \
    —user "$AWS_ACCESS_KEY_ID":"$AWS_SECRET_ACCESS_KEY" \
    —aws-sigv4 "aws:amz:us-east-1:aoss" \
    —header "x-amz-content-sha256: $REQUEST_PAYLOAD_SHA_HASH" \
    —header "x-amz-security-token: $AWS_SESSION_TOKEN" \
    "https://my-collection-endpoint.us-east-1.aoss.amazonaws.com/movies-index/_doc" \
    -H "Content-Type: application/json" -d '{"title": "Shawshank Redemption"}'

**注意:**将示例访问密钥 ID、私有密钥和会话令牌替换为您的值。要获取这些值,请运行 get-session-token AWS CLI 命令。

如果您发送有效载荷,请运行以下命令以生成有效载荷的安全哈希算法 256 位 (SHA-256) 作为标头的一部分:

echo -n '{"title": "Shawshank Redemption"}' | shasum -a 256

您也可以在 GitHub 网站上使用 awscurlawscurl 使用您的默认凭证,例如 EC2 实例配置文件,因此您无需将有效载荷哈希作为标头。

awscurl 请求示例:

awscurl --service aoss --region us-east-1 -XPOST \
    "https://my-collection-endpoint.us-east-1.aoss.amazonaws.com/movies-index/_doc" \
    -H "Content-Type: application/json" -d '{"title": "Shawshank Redemption"}'
awscurl --service aoss --region us-east-1 -XGET \
    "https://my-collection-endpoint.us-east-1.aoss.amazonaws.com/_cat/indices"

**注意:**将 us-east-1 替换为您的 AWS 区域,将端点示例替换为您的端点。

使用详细日志记录来确认前面的标头是发送到服务的请求的一部分。由于标头值不正确,签名不正确。您还可以使用详细日志记录来确认您的收集端点、区域和服务是否正确。

其他 403 错误

根据您执行的操作,您可能会收到不同的 403 错误消息。

对于索引特定引入操作,您可能会看到类似于“Authorization failure for the following indices: [index/collectionname/indexname]”(以下索引的授权失败:[索引/集合名称/索引名称])的错误消息。

对于搜索请求,您可能会看到错误消息,例如“all shards failed”(所有分片均失败)或“Bad Authorization”(授权错误)。

对于非索引特定操作,您可能会看到类似于“User does not have permissions for the requested resource”(用户不具有访问所请求资源的权限)的错误消息。

要解决这些错误,请确保集合的数据访问策略包含对集合和索引资源的正确权限。此外,请确保该策略在 Principal(主体)部分包含正确的 IAM 身份。

有关数据访问策略语法的详细信息,请参阅策略语法

401 未授权错误

当网络策略拒绝访问 OpenSearch 无服务器 API 或控制面板时,通常会出现 401 错误消息。

当您在客户端开启详细日志记录或查看浏览器开发者控制台的 Network(网络)选项卡时,您可能会看到错误消息“x-aoss-response-hint': 'X01:network-policy-deny”。

要从公共互联网访问 OpenSearch 无服务器 API 和控制面板,请在网络策略中开启公共访问权限。

JSON 格式的网络策略示例:

[
  {
    "Rules": [
      {
        "Resource": [
          "collection/collectionname"
        ],
        "ResourceType": "dashboard"
      },
      {
        "Resource": [
          "collection/collectionname"
        ],
        "ResourceType": "collection"
      }
    ],
    "AllowFromPublic": true
  }
]

**注意:**将 collectionname 替换为您的集合名称。

要私密访问 API 和控制面板,请在客户端 VPC 中为 OpenSearch 无服务器创建 VPC 端点。

JSON 格式的网络策略示例:

[
  {
    "Rules": [
      {
        "Resource": [
          "collection/collectionname"
        ],
        "ResourceType": "dashboard"
      },
      {
        "Resource": [
          "collection/collectionname"
        ],
        "ResourceType": "collection"
      }
    ],
    "AllowFromPublic": false,
    "SourceVPCEs": [
      "vpce-0c9xxxxxxxxxxa680"
    ]
  }
]

**注意:**将 collectionname 替换为您的集合名称。

有关网络策略的其他示例,请参阅 Amazon OpenSearch 无服务器的网络访问权限

要从另一个 VPC 访问任何 OpenSearch 无服务器域,请在 VPC 中创建 OpenSearch 无服务器 VPC 端点。有关详细信息,请参阅使用接口端点 (AWS PrivateLink) 访问 Amazon OpenSearch 无服务器

**注意:**您可以选择让您的客户端从 VPC 调用 OpenSearch 无服务器 API 端点。您可以通过使用公共互联网的浏览器访问控制面板。

要从您的公司网络私密访问控制面板,请使用入站 DNS 解析器端点。DNS 查询返回正确的私有 IP 地址。有关详细信息,请参阅使用 VPC 端点访问 Amazon OpenSearch 无服务器集合

相关信息

如何对访问 OpenSearch 无服务器控制面板以查看我的集合时出现的问题进行故障排除?

AWS 官方已更新 7 个月前