【问题标题】:Serverless - can not read file from S3无服务器 - 无法从 S3 读取文件
【发布时间】:2019-06-28 06:26:11
【问题描述】:

我有 2 个用 NodeJS 和无服务器框架编写的 Lambda 函数 这些函数的 IAM 角色允许放置和获取对象:

iamRoleStatements:
    - Effect: "Allow"
      Action:
        - "s3:ListBucket"
        - "s3:GetObject"
        - "s3:PutObject"
        - "s3:GetBucketNotification"
        - "s3:PutBucketNotification"
      Resource:
        - Fn::Join: [
            "", [
              "arn:aws:s3:::",
              {
                "Ref": "DataBucket"
              },
              "/*"
            ]
          ]
        - Fn::Join: [
            "", [
              "arn:aws:s3:::",
              {
                "Ref": "DataBucket"
              },
            ]
          ]

一个函数将文件放置到 S3 并正常工作,下一个函数被调用(通过 S3 事件)并且由于访问被拒绝而无法读取此文件。

在我更改 dataBucketName 资源名称之前它工作正常:

resources:
  Resources:
    DataBucket:
      Type: AWS::S3::Bucket
      Properties:
        BucketName: ${self:custom.dataBucketName}

谁能告诉我问题出在哪里以及如何开始调试?

【问题讨论】:

  • 仅供参考,避免使用复杂的多行 Fn::Join 语句会更简单,只需使用 "arn:aws:s3:::${self:custom.dataBucketName}/* "

标签: amazon-web-services amazon-s3 permissions aws-lambda serverless-framework


【解决方案1】:

这不是为了解决您的问题,而是为了简化和纠正您的 IAM 角色的小问题:

iamRoleStatements:
- Effect: Allow
  Action:
  - s3:ListBucket
  - s3:GetBucketNotification
  - s3:PutBucketNotification
  Resource: arn:aws:s3:::${self:custom.dataBucketName}
- Effect: Allow
  Action:
  - s3:GetObject
  - s3:PutObject
  Resource: arn:aws:s3:::${self:custom.dataBucketName}/*

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-14
    • 2019-09-14
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    • 2018-08-15
    相关资源
    最近更新 更多