【发布时间】:2016-11-30 16:28:36
【问题描述】:
我有一个 lambda 函数,它正在将一些数据写入我也通过 AWS 设置的 Elasticsearch 域。目前我域的访问策略只是允许我自己的 IP 地址与域一起使用
{"Version": "2012-10-17", "Statement": [{
"Effect": "Allow", "Principal": {"AWS": "*"},
"Action": "es:*",
"Resource": "arn:aws:es:us-east-1:$ACCOUNT:domain/DOMAIN/*",
"Condition": { "IpAddress": { "aws:SourceIp": $MYIP } }
}]}
我找到了用于签署 http 请求的 aws4 library。我就是这样使用它的:
axios(aws4.sign({
host: process.env.ES_ENDPOINT,
method: "post",
url: `https://${process.env.ES_ENDPOINT}/foobot/foobot`,
data,
}))
这实际上在没有aws4.sign 的情况下工作,因为我已经完全打开了 ES 域,但现在我已经应用了上面的 IP 地址策略。
现在,我不断收到这样的错误响应:
我们计算的请求签名与您提供的签名不匹配。检查您的 AWS 秘密访问密钥和签名方法。有关详细信息,请参阅服务文档。
我还需要做些什么来正确签署请求吗?
【问题讨论】:
标签: node.js amazon-web-services elasticsearch aws-sdk aws-lambda