[Node JS AWS SDK]承担 IAM 角色上传到 S3 时缺少凭据
[Node JS AWS SDK]Missing credentials on Upload to S3 assuming IAM Role
我正在尝试将一些文件上传到 S3 存储桶,它使用硬编码凭据,但我想通过使用 IAM 角色来进一步提高安全性。
这是我所做的:
- 创建 IAM 角色以启用对特定 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 和 ~/.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
我正在尝试将一些文件上传到 S3 存储桶,它使用硬编码凭据,但我想通过使用 IAM 角色来进一步提高安全性。
这是我所做的:
- 创建 IAM 角色以启用对特定 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 和 ~/.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