首页 > 解决方案 > 从 Nextjs 无服务器函数安全地连接到 AWS Elasticsearch

问题描述

我正在尝试从 Nextjs 中的无服务器功能安全地连接到我的 ES 服务。无服务器功能没有固定的 IP 地址或 IP 地址范围,因此我无法以这种方式保护它。我已经尝试创建一个 IAM 用户并使用访问密钥 ID 和秘密访问密钥来创建这样的基本授权标头。

const auth = btoa(`${accessKey}:${accessSecret}`);

然后我用它作为这样的授权头。

`Authorization: Basic ${auth}`

该请求返回以下错误。

{
    "message": "Authorization header requires 'Credential' parameter. Authorization header requires 'Signature' parameter. Authorization header requires 'SignedHeaders' parameter. Authorization header requires existence of either a 'X-Amz-Date' or a 'Date' header. Authorization=Basic XXXXXXXXXXXXXXXXXXXXXXXXXX"
}

我已通过访问策略授予 IAM 用户权限。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::XXXXXXXXX:user/elasticsearch"
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:us-east-2:XXXXXXXX:domain/team-up/*"
    }
  ]
}

这是保护与数据库的连接的正确方法吗?我尝试使用 POST /_security/user/_password 端点在数据库上设置密码,但这也失败了。

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 亚马逊声称支持基本授权。 https://aws.amazon.com/elasticsearch-service/faqs/

标签: amazon-web-serviceselasticsearchbasic-authenticationaws-elasticsearch

解决方案


在 aws elasticsearch 域的向导设置过程中,我没有创建主用户。创建域后,似乎无法创建主用户。我删除了 elasticseach 域并使用主用户重新创建它。

我遵循了本指南。 https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/fgac.html#fgac-walkthrough-basic


推荐阅读