【发布时间】:2020-01-04 17:39:11
【问题描述】:
在我的 Node.js 项目中,我需要使用 AWS IAM 角色在 S3 中获取签名的 url。获取url的部分是这样的
url = s3.getSignedUrl('getObject', {
Bucket: myBucket,
Key: myKey,
Expires: signedUrlExpireSeconds
})
我设置了这样的值
var AWS = require('aws-sdk');
AWS.config.update({signatureVersion: 'v4',
region: 'us-east-1'});
AWS.config.credentials = new AWS.EC2MetadataCredentials();
var s3 = new AWS.S3();
当我运行这个时,我得到的网址总是https://s3.amazonaws.com/
但是如果我像这样设置硬编码的凭据,而不是使用AWS.config.credentials = new AWS.EC2MetadataCredentials();,那么它会返回正确的 url
s3.config.update({
accessKeyId: 'xxx',
secretAccessKey: 'yyy',
});
据此,https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/loading-node-credentials-iam.html 它应该自动获取凭据,而无需像上面那样设置。 你能告诉我我做错了什么吗?为什么不直接在代码中提供 accesskey 和 secrectkey 就不能工作。
在我们的 Java 项目中,它也可以在不指定这些键的情况下正常工作。但它在 Node.js 中不起作用。
【问题讨论】:
-
我从来不需要这样做
AWS.config.credentials = new AWS.EC2MetadataCredentials()它只是从 IAM 角色工作 -
@ArunK 谢谢。所以你所做的就像我给的一样?我错过了什么吗?
-
我会发一个nodejs代码来生成签名,看看对你有没有用
-
发布了我的代码,它对我有用
-
@ArunK 非常感谢。我会试试的,然后告诉你。
标签: node.js amazon-s3 amazon-ec2 aws-sdk amazon-iam