如何通过 AWS SAM 提供 Lambda S3 策略
How to provide Lambda S3 policy via AWS SAM
我正在尝试为我的 Lambda 函数提供 S3FullAccessPolicy 策略。请注意,目标存储桶未在 template.yaml
中配置 - 它已经存在。考虑 this documentation 中的语法示例,我有三个选择:
1.AWS 托管策略名为:
Policies:
- S3FullAccessPolicy
2.AWS SAM 策略模板 (SQSPollerPolicy) 已定义:
Policies:
- S3FullAccessPolicy:
BucketName: abc-bucket-name
3.Or 一个内联策略文档:
Policies:
- Statement:
...
在尝试 #1 时,我收到一条错误消息,提示我需要提供一个 arn。如果是这种情况,我会在哪里提供它?错误:
1 validation error detected: Value 'S3FullAccessPolicy' at 'policyArn' failed to satisfy constraint:
Member must have length greater than or equal to 20
对于 #2,我提供了存储桶名称,但它说策略是 'invalid'。我试过添加引号并用 arn 替换名称 - 但没有成功。
还有 #3 - 我可以找到政策的代码 here 但那是在 yaml 中所以我想知道我是否应该使用它。
我在这里错过了什么?我愿意使用这些选项中的任何一个,但现在我是 0/3。
完整的 Lambda 函数:
testFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: lambda/testFunction/
Handler: app.lambda_handler
Runtime: python3.8
Timeout: 900
Policies:
- S3FullAccessPolicy
我使用下面的模板没有任何问题。
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
运行 它使用以下命令并成功部署。
sam deploy --stack-name sample-stack --s3-bucket bucket-to-deploy --capabilities CAPABILITY_IAM
我正在尝试为我的 Lambda 函数提供 S3FullAccessPolicy 策略。请注意,目标存储桶未在 template.yaml
中配置 - 它已经存在。考虑 this documentation 中的语法示例,我有三个选择:
1.AWS 托管策略名为:
Policies:
- S3FullAccessPolicy
2.AWS SAM 策略模板 (SQSPollerPolicy) 已定义:
Policies:
- S3FullAccessPolicy:
BucketName: abc-bucket-name
3.Or 一个内联策略文档:
Policies:
- Statement:
...
在尝试 #1 时,我收到一条错误消息,提示我需要提供一个 arn。如果是这种情况,我会在哪里提供它?错误:
1 validation error detected: Value 'S3FullAccessPolicy' at 'policyArn' failed to satisfy constraint:
Member must have length greater than or equal to 20
对于 #2,我提供了存储桶名称,但它说策略是 'invalid'。我试过添加引号并用 arn 替换名称 - 但没有成功。
还有 #3 - 我可以找到政策的代码 here 但那是在 yaml 中所以我想知道我是否应该使用它。
我在这里错过了什么?我愿意使用这些选项中的任何一个,但现在我是 0/3。
完整的 Lambda 函数:
testFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: lambda/testFunction/
Handler: app.lambda_handler
Runtime: python3.8
Timeout: 900
Policies:
- S3FullAccessPolicy
我使用下面的模板没有任何问题。
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
运行 它使用以下命令并成功部署。
sam deploy --stack-name sample-stack --s3-bucket bucket-to-deploy --capabilities CAPABILITY_IAM