为什么 AWS-SDK API 请求不断返回缺少身份验证令牌?

Why do AWS-SDK API requests keep returning Missing Authentication Token?

我正在使用我的 EC2 中的 AWS-SDK、运行 发出 Node.js API 请求。但他们不断返回错误 403:

{"message":"Missing Authentication Token"}

我正在尝试访问 Amazon SES 端点。我在 IAM 中设置了一个用户,其中添加了一个策略。它的策略名称是 AmazonSESFullAccess。此用户的密钥和秘密存储在 ~/.aws/credentials.

这应该足以验证和授权我的请求:https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/loading-node-credentials-shared.html

我还使用推荐的 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 变量将它们添加到我项目的 .env 文件中。

这也应该成功验证和授权我的调用:https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/loading-node-credentials-environment.html

根据这些,如果我使用 AWS-SDK 发送我的请求,我不需要在 headers 或查询参数中签名:https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html

代码如下:


test: async () => {

    /**
     * Call AWS SES API
     * Returns information about the account
     * https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_GetAccount.html
     */

    return new Promise(resolve => {

        axios
            .get("https://email.us-east-1.amazonaws.com/v2/email/account")
            .then(res => {
                console.log(res);
                resolve(res);
            })
            .catch(error => {
                console.error(error)
            });
    });

}

为什么我无法访问任何资源?我能做些什么来修复它?

您没有使用 NodeJS AWS SDK。您只是使用 axios 发送一个“正常”的 HTTP 请求。您发送的请求根本不知道任何 AWS 身份验证凭据。

这就是您发出未经身份验证的请求并收到相应错误“缺少身份验证令牌”的原因。

您应该使用 AWS SDK 与 AWS“对话”API:

var sesv2 = new AWS.SESV2();
var params = {};
sesv2.getAccount(params, function(err, data) {
  if (err) console.log(err, err.stack); 
  else     console.log(data);           
});

参见:https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SESV2.html#getAccount-property

AWS 开发工具包将读取凭证并处理验证请求。