【问题标题】:Using s3 getObject in Lambda function generates url with InvalidToken error在 Lambda 函数中使用 s3 getObject 会生成带有 InvalidToken 错误的 url
【发布时间】:2019-12-04 10:30:46
【问题描述】:

我正在尝试使用 Lambda 函数中的 getObject 方法获取 s3 对象的预签名 URL。但是当我在浏览器中打开结果 URL 时显示 InvalidToken 错误。

我已将data.txt 文件上传到存储桶。

content.ts

import 'source-map-support/register';
import { APIGatewayProxyHandler } from 'aws-lambda';
import { S3 } from 'aws-sdk';

const s3 = new S3({
    signatureVersion: 'v4'
});

export const getContent: APIGatewayProxyHandler = async (event, context) => {
    const signedUrl = s3.getSignedUrl('getObject', {
        Bucket: process.env.BUCKET,
        Key: 'data.txt',
        Expires: 60
    });

    return {
        statusCode: 200,
        body: JSON.stringify({
            url: signedUrl
        })
    };
}

serverless.yml

service:
  name: purchased-content

custom:
  bucket: "project-paid-content"

plugins:
  - serverless-webpack

provider:
  name: aws
  runtime: nodejs10.x
  region: us-east-2
  iamRoleStatements:
    - Effect: "Allow"
      Action:
       - "s3:GetObject"
      Resource:
        - "arn:aws:s3:::${self:custom.bucket}"
        - "arn:aws:s3:::${self:custom.bucket}/*"

functions:
  getContent:
    handler: content.getContent
    events:
      - http:
          method: get
          path: get
    environment:
      BUCKET: ${self:custom.bucket}

resources:
  Resources:
    PaidContentBucket:
      Type: AWS::S3::Bucket
      Properties:
        BucketName: ${self:custom.bucket}
        AccessControl: Private

【问题讨论】:

  • 您的代码在哪里运行(在 AWS 内部或 AWS 外部)?
  • 这是一个 AWS Lambda 函数。它究竟如何在 AWS 之外运行?

标签: node.js amazon-web-services amazon-s3 lambda serverless-framework


【解决方案1】:

您的 IAM 政策似乎没问题。我认为问题可能出在响应上。

return {
        statusCode: 200,
        body: JSON.stringify({
            url: signedUrl
        })
    };

你为什么要对返回的 url 进行字符串化。这应该直接使用。 尝试记录返回的 url 并使用它。如果失败,您可能需要进一步查看 IAM 政策/角色。

【讨论】:

猜你喜欢
  • 2021-12-28
  • 2019-05-08
  • 1970-01-01
  • 1970-01-01
  • 2020-12-11
  • 2016-09-29
  • 2019-03-20
  • 2016-08-08
  • 1970-01-01
相关资源
最近更新 更多