如何使用 AWS SAM 模板向 Lambda 函数授予 IAM 权限?
我想在我的 AWS Serverless Application Model(AWS SAM)应用程序中为 AWS Lambda 函数授予权限。如何在 AWS SAM 模板中定义具有范围权限的 Lambda 执行角色?
简短描述
要在 AWS SAM 模板中定义 Lambda 执行角色,可以使用以下 AWS::Serverless::Function 资源属性:
- Policies — 允许您使用预定义的策略创建新的执行角色,这些策略的作用范围可以限定到您的 Lambda 函数。
- Role — 允许您定义一个 AWS Identity and Access Management(IAM)角色来用作函数的执行角色。
- PermissionsBoundary — 允许您为创建的执行角色设置 IAM 权限边界。
**注意:**Policies 与 Roles 属性不能一起使用。当您的执行角色需要的权限过于具体而无法使用预定义策略时,使用 Role 属性会很有用。
解决方法
为新的 Lambda 执行角色指定策略
对于 Policies 属性,请输入以下任意组合:
- AWS 托管式策略的名称
- AWS SAM 策略模板的名称
- 内联策略文档
**注意:**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 属性,输入以下选项之一:
- 附加了 IAM 权限策略的 Lambda 执行角色的 ARN。
- 对您在同一 AWS SAM 模板中定义的 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。
相关信息
AWS Serverless Application Model(AWS SAM)(AWS SAM GitHub 存储库)
Policy templates(AWS SAM GitHub 存储库)
相关内容
- AWS 官方已更新 1 年前
- AWS 官方已更新 9 个月前
- AWS 官方已更新 9 个月前