【问题标题】:Trying to give my lambda putObject access to an existing S3 bucket via serverless试图通过无服务器让我的 lambda putObject 访问现有的 S3 存储桶
【发布时间】:2018-09-26 16:10:34
【问题描述】:

在使用无服务器框架时,我一直在尝试为我的 lambda 分配权限给 S3 存储桶。

我有一个 Lamba 函数,它最终将 JSON 配置文件写入 S3 存储桶,我想通过 Web 将其提供给应用程序。我最初单独设置了一个 S3 存储桶(不在serverless.yml 中),我的 Lamba 成功在正确的 S3 存储桶中创建了文件,但是当我将它部署到 AWS 时出现“内部服务器错误”。我认为这是因为部署时设置的权限没有授予它对存储桶的写入权限。

我有点不同意如何做到这一点。例如,我已阅读 this thread,并尝试用以下内容补充我的 serverless.yml

provider:
  name: aws
  runtime: nodejs8.10
  stage: dev
  region: eu-west-1
  iamRoleStatements:
    - Effect: "Allow"
      Action:
        - "s3:PutObject"
      Resource:
        Fn::Join:
          - ""
          - - "arn:aws:s3:::"
            - Ref: arn:aws:s3:::com.joostschuur.quizdata

在这种情况下,arn:aws:s3:::com.joostschuur.quizdata 是我设置的手动创建的 S3 存储桶,并且希望我部署的 lambda 具有写入权限。但是,这会导致部署错误:

CloudFormation 模板无效:模板格式错误: 未解决的资源依赖关系 [arn:aws:s3:::com.joostschuur.quizdata] 在资源块中 模板

如果有办法将所有 S3 设置放入 serverless.yml(即指定存储桶,指定其中的文件应可通过 Web 访问等),我也很乐意这样做。

建议?

【问题讨论】:

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


【解决方案1】:

在iamRoleStatements规范中有错误,应该是:

 iamRoleStatements:
    - Effect: "Allow"
      Action:
        - "s3:PutObject"
      Resource: arn:aws:s3:::com.joostschuur.quizdata/*

或者

 iamRoleStatements:
    - Effect: "Allow"
      Action:
        - "s3:PutObject"
      Resource:
        Fn::Join:
          - ":"
          - - "arn:aws:s3::"
            - "com.joostschuur.quizdata/*"

这个错误:

The CloudFormation template is invalid: Template format error: Unresolved resource dependencies [arn:aws:s3:::com.joostschuur.quizdata] in the Resources block of the template

相关:

    - Ref: arn:aws:s3:::com.joostschuur.quizdata

因为这不是对参数或变量的引用。

享受吧!

【讨论】:

  • 您可能必须将/* 放在最后,这样您就可以在存储桶中的任何位置写入。所以像Resource: arn:aws:s3:::com.joostschuur.quizdata/*
猜你喜欢
  • 2016-05-06
  • 2018-12-10
  • 2023-04-06
  • 2018-06-19
  • 2015-04-30
  • 1970-01-01
  • 1970-01-01
  • 2020-10-17
  • 1970-01-01
相关资源
最近更新 更多