【问题标题】:AWS s3 create pre signed post does not work on deployAWS s3 创建预签名帖子不适用于部署
【发布时间】: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


【解决方案1】:

要包含在表单数据中的字段根据代码运行的位置而有所不同,至少在我的问题中是这种情况。在 Elastic Beanstalk 环境中,有一个额外的 x-amz-security-token 字段(与 AWSAccessKeyIdkey 等一起),在本地环境中运行时 Boto3 create_presigned_post 返回的字段中不存在该字段。

【讨论】:

  • 这很奇怪,理想情况下 create_presigned_post 应该在使用签名的 url 时重新运行需要传递的所有表单数据。
猜你喜欢
  • 1970-01-01
  • 2017-11-26
  • 2018-02-26
  • 1970-01-01
  • 1970-01-01
  • 2020-11-16
  • 2021-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多