【发布时间】:2020-08-01 10:22:12
【问题描述】:
我正在使用 aws-sdk 的 nodejs/createPresignedPost 方法创建预签名的 url。它全部通过我本地的无服务器离线插件工作,因为我的个人访问密钥具有所有访问权限。但是当我通过无服务器框架部署它时,它会出现 HTTP 403 错误,并且浏览器中的错误如下所示
The AWS Access Key Id you provided does not exist in our records.
钥匙以ASIA开头ASIAQDGRI5OSPEXMAPLE
我已向目标存储桶上的 lambda 授予所有操作权限。
我的 Api 网关和返回签名 url 的 lambda 位于“us-east-1”区域,存储桶位于“ap-south-1”区域。
我确定我缺少一些 IAM 权限,但我想不通。有人可以帮我吗?
这是我的函数,它返回一个关于获取预签名帖子网址的承诺
function getSignedUploadUrl() {
const params = {
Expires: 600,
Bucket: process.env.AWS_S3_BUCKET_NAME,
Fields: {
key: s3FilePathKey,
acl: acl,
"content-type": contentType,
},
conditions: [
{ acl: acl },
{ "content-type": contentType },
["content-length-range", 1000000, 75000000],
],
};
return new Promise((resolve, reject) => {
const s3 = new S3({
region: AWS_REGION
});
s3.createPresignedPost(params, (err, data) => {
if (err) {
console.log(err);
reject({
message: "Something went wrong",
});
}
resolve(data);
});
});
}
【问题讨论】:
-
能贴出相关的代码吗?
-
@jellycsc 已将其添加到问题中
-
我面临一个非常相似的问题。我将
createPresignedPost返回的值放在form中,我的lambda、api 网关和S3 存储桶都在同一个eu-west-1区域中。如果相关,我获得的访问密钥 ID 也以ASIA开头。 -
即使我的问题没有解决,我最终还是将我所有的 AWS 资源转移到了 us-east-1 区域 lambda、S3 存储桶等。@MarcelloRomani 它对我有用。
-
感谢您的回复。最终我意识到我犯了两个错误:1)我将
createPresignedPost的返回值手动放入form,这会导致错误。当我以编程方式(使用一些简单的模板)进行操作时,这些就消失了。 2) 在测试 lambda 函数的 URL outside 时,我使用了错误的 AWS_PROFILE。
标签: amazon-s3 serverless-framework pre-signed-url