在AWS SAM中,即使指定了调用角色,Lambda函数在部署时仍会自动生成所需的权限。以下是一个使用AWS SAM模板的示例解决方法:
Resources:
MyFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: app/
Handler: app.lambda_handler
Runtime: python3.8
Role: MyLambdaRole
Policies:
- AWSLambdaBasicExecutionRole
MyLambdaRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Principal:
Service: lambda.amazonaws.com
Action: sts:AssumeRole
Policies:
- PolicyName: MyLambdaPolicy
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action:
- s3:GetObject
Resource: arn:aws:s3:::my-bucket/*
在上面的示例中,MyFunction是一个AWS Lambda函数,它指定了Role属性为MyLambdaRole。MyLambdaRole是一个AWS IAM角色,它定义了函数的权限策略。
注意,在Lambda函数的Policies属性中,我们添加了一个名为AWSLambdaBasicExecutionRole的策略。这是一个AWS提供的内置策略,授予了函数在部署时所需的基本执行权限。
除了AWSLambdaBasicExecutionRole,您可以根据您的需求添加其他自定义策略。在上面的示例中,我们添加了一个允许函数访问S3对象的自定义策略。
当您使用AWS SAM部署这个模板时,SAM会自动为Lambda函数创建所需的IAM角色,并分配所需的权限。