从 Nextjs 无服务器函数安全地连接到 AWS Elasticsearch

Securely Connect to AWS Elasticsearch from Nextjs Serverless Functions

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

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

然后我像这样使用它作为授权header。

`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/

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

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