我想在我的 AWS Serverless Application Model(AWS SAM)应用程序中为 AWS Lambda 函数授予权限。如何在 AWS SAM 模板中定义具有范围权限的 Lambda 执行角色?
简短描述
要在 AWS SAM 模板中定义 Lambda 执行角色,可以使用以下 AWS::Serverless::Function 资源属性:
**注意:**Policies 与 Roles 属性不能一起使用。当您的执行角色需要的权限过于具体而无法使用预定义策略时,使用 Role 属性会很有用。
解决方法
为新的 Lambda 执行角色指定策略
对于 Policies 属性,请输入以下任意组合:
**注意:**AWS SAM 策略模板的范围仅限于特定 AWS 资源。有关策略模板及其向您的 Lambda 函数授予的权限的列表,请参阅 Policy template table。
以下是一些定义了 Policies 的 AWS SAM YAML 模板示例:
带已命名 AWS 托管式策略的 AWS SAM YAML 模板示例
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31' b
Resources:
MyFunction:
Type: 'AWS::Serverless::Function'
Properties:
Handler: index.handler
Runtime: nodejs8.10
CodeUri: 's3://my-bucket/function.zip'
Policies:
# Give the Lambda service access to poll your DynamoDB Stream
- AmazonDynamoDBFullAccess
定义了 [AWS SAM 策略模板(SQSPollerPolicy)的 AWS SAM YAML 模板](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-policy-templates.html#policy-template-example-1)示例
MyFunction:
Type: 'AWS::Serverless::Function'
Properties:
CodeUri: ${codeuri}
Handler: hello.handler
Runtime: python2.7
Policies:
- SQSPollerPolicy:
QueueName:
!GetAtt MyQueue.QueueName
定义了内联策略文档的 AWS SAM YAML 模板示例
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Resources:
MyFunction:
Type: 'AWS::Serverless::Function'
Properties:
Handler: index.handler
Runtime: nodejs8.10
CodeUri: 's3://my-bucket/function.zip'
Policies:
- Statement:
- Sid: SSMDescribeParametersPolicy
Effect: Allow
Action:
- ssm:DescribeParameters
Resource: '*'
- Sid: SSMGetParameterPolicy
Effect: Allow
Action:
- ssm:GetParameters
- ssm:GetParameter
Resource: '*'
(可选)指定 IAM 权限边界
要设置允许您的 Lambda 函数执行角色的最高权限,请使用 IAM 权限边界。
要设置 IAM 权限边界,请在您的 AWS SAM YAML 模板中执行以下操作:
指定权限边界的 Amazon 资源名称(ARN)
对于 PermissionsBoundary 属性,输入权限边界的 ARN。例如:
Properties:
PermissionsBoundary: arn:aws:iam::123456789012:policy/LambdaBoundaries
注意:只有在使用 AWS SAM 模板创建新角色时,才能定义 PermissionsBoundary。无法为您指定的现有角色设置权限边界。
指定 Lambda 执行角色
对于 Role 属性,输入以下选项之一:
注意:如果未在 AWS SAM 模板中指定 Role,则在部署应用程序时会创建一个执行角色。此执行角色包括您定义的任何策略。
定义了 Role 属性的 AWS SAM YAML 模板示例
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Resources:
MyFunction:
Type: 'AWS::Serverless::Function'
Properties:
Handler: index.handler
Runtime: nodejs8.10
CodeUri: 's3://my-bucket/function.zip'
Role: arn:aws:iam::111111111111:role/SAMPolicy
打包和部署应用程序
1. 在 AWS SAM 命令行界面(AWS SAM CLI)中,运行 sam build 命令来构建和打包您的应用程序。
**注意:**如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新版本的 AWS CLI。
2. 运行 sam deploy 命令来部署您的 AWS SAM 应用程序包。
有关更多信息,请参阅 Building applications 和 Deploying serverless applications。
相关信息
Getting started with AWS SAM
AWS Serverless Application Model(AWS SAM)(AWS SAM GitHub 存储库)
Policy templates(AWS SAM GitHub 存储库)
托管策略与内联策略
Validating AWS SAM template files