[Node JS AWS SDK]承担 IAM 角色上传到 S3 时缺少凭据

[Node JS AWS SDK]Missing credentials on Upload to S3 assuming IAM Role

我正在尝试将一些文件上传到 S3 存储桶,它使用硬编码凭据,但我想通过使用 IAM 角色来进一步提高安全性。

这是我所做的:

这是我用于 S3 交互的代码

const AWS = require('aws-sdk');
const s3 = new AWS.S3();

const options = {
                    Bucket: BUCKET_NAME,
                    Key: /my/key/
                    Body: mybody,
                    ContentType: somecontent,
                    ACL: 'public-read'
                };

return s3.upload(options, (err, data) => {
    if (err) {
        return reject(err);
    }
    //code continue
});

这就是我得到的:

CredentialsError: Missing credentials in config, if using AWS_CONFIG_FILE, set AWS_SDK_LOAD_CONFIG=1

所以我尝试在 ~/.aws/config 和 ~/.aws/credentials 使用配置文件(我还在我的 .bashrc 文件中将 AWS_SDK_LOAD_CONFIG 设置为一个并设置配置文件路径)。

.aws/config :

[default]
region=myregion
role_arn=myrolearn

还尝试使用文件中的凭据,这样至少它不会出现在代码本身中。

我是不是漏掉了什么?

提前致谢

乍一看您的步骤没有问题,您的应用程序将从 EC2 实例元数据接管安全凭证是完全正确的。除此之外你不需要配置任何东西。

首先,这里有一些调试建议:

  • 您确定您正确附加了您的角色吗?当您通过 SSH 与 aws sts get-caller-identity.
  • 连接时,尝试通过 AWS-CLI 检查承担的角色
  • 您的 S3 存储桶是在与 运行 EC2 相同的区域中创建的吗?
  • AWS_SDK_LOAD_CONFIG 真的导出为 true 吗?尝试通过 process.env.AWS_SDK_LOAD_CONFIG.
  • 在您的应用中将其注销

编辑:你能尝试编辑你的~/.aws/config吗:

[default]
credential_source=Ec2InstanceMetadata