我试图在S3桶上上传一些文件,它与硬编码凭据一起工作,但我想通过使用IAM角色来进一步提高安全性。
我是这样做的:
- 创建IAM Role,允许对指定S3桶的完全访问
- 将角色添加到运行我的应用程序的EC2实例
- 使用AWS SDK进行呼叫,但未指定凭据(假设角色)
- 出现错误
下面是我用于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和~/。(我还在我的.bashrc文件中将AWS_SDK_LOAD_CONFIG设置为1,并设置配置文件路径)。
。aws/配置:
[default]
region=myregion
role_arn=myrolearn
还尝试了文件中的凭据,以便至少它不会出现在代码中。
我错过了什么吗?
Thanks in advance
你的脚步第一眼就很好&您的应用程序将从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