如何通过 AWS SAM 提供 Lambda S3 策略

Lia*_*nen 2 lambda amazon-s3 amazon-web-services aws-cloudformation aws-sam

我正在尝试为我的 Lambda 函数提供 S3FullAccessPolicy 策略。请注意,目标存储桶未在其中配置template.yaml- 它已经存在。考虑到本文档中的语法示例,我有三个选择:

1.AWS托管策略名为:

  Policies:
  - S3FullAccessPolicy
Run Code Online (Sandbox Code Playgroud)

2.AWS SAM策略模板(SQSPollerPolicy)定义:

Policies:
  - S3FullAccessPolicy:
      BucketName: abc-bucket-name    
Run Code Online (Sandbox Code Playgroud)

3.或者内联政策文件:

  Policies:
  - Statement:
    ...
Run Code Online (Sandbox Code Playgroud)

在尝试 #1 时,我收到一个错误,提示我似乎需要提供一个 arn。如果是这种情况我该在哪里提供呢?错误:

1 validation error detected: Value 'S3FullAccessPolicy' at 'policyArn' failed to satisfy constraint:
 Member must have length greater than or equal to 20
Run Code Online (Sandbox Code Playgroud)

对于#2,我提供了存储桶名称,但它表示该策略“无效”。我尝试添加引号并用 arn 替换名称 - 但没有成功。

#3 - 我可以在这里找到策略的代码,但它在 yaml 中,所以我想知道这是否就是我应该使用的代码。

我在这里缺少什么?我愿意使用这些选项中的任何一种,但现在我的选择是 0/3。

完整的 Lambda 函数:

  testFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: lambda/testFunction/
      Handler: app.lambda_handler
      Runtime: python3.8
      Timeout: 900
      Policies:
        - S3FullAccessPolicy
Run Code Online (Sandbox Code Playgroud)

dos*_*ani 10

我使用下面的模板没有任何问题。

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31


Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: ./hello_world/
      Handler: app.lambda_handler
      Runtime: python3.8
      Tracing: Active
      Policies:
        - S3FullAccessPolicy:
            BucketName: existingbucketname # bucket name without arn
Run Code Online (Sandbox Code Playgroud)

使用以下命令运行它并成功部署。

sam deploy --stack-name sample-stack --s3-bucket bucket-to-deploy --capabilities CAPABILITY_IAM
Run Code Online (Sandbox Code Playgroud)

  • 有比“S3FullAccessPolicy”宽松的 S3 策略也适合大多数 lambda 应用程序,例如“S3ReadPolicy”或“S3CrudPolicy” (2认同)