从 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 域并用主用户重新创建了它。
我正在尝试从 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 端点在数据库上设置密码,但也失败了。
在 aws elasticsearch 域的向导设置过程中,我没有创建主用户。创建域后,似乎无法创建主用户。我删除了 elasticseach 域并用主用户重新创建了它。