如何使用 AWS SAM 模板中的策略和角色为 Lambda 函数授予权限?

上次更新日期:2020 年 10 月 12 日

我想在 AWS Serverless Application Model (AWS SAM) 应用程序中为 AWS Lambda 函数授予权限。如何在 AWS SAM 模板中为 Lambda 执行角色设置有范围的权限?

简短描述

在 AWS SAM 模板中,使用 AWS::Serverless::Function 资源的 Policies(策略)Role(角色)属性以及 PermissionsBoundary 来定义 Lambda 执行角色及其权限。

注意:AWS SAM 模板类似于 AWS CloudFormation 模板。您可以在 AWS CloudFormation 模板中声明的任何资源都可以在 AWS SAM 模板中声明。有关更多信息,请参阅 AWS SAM 模板剖析

使用 Policies(策略)创建一个新的执行角色,其权限范围仅限于 Lambda 函数。或者,您也可以使用 PermissionsBoundary 为新创建的角色设置 AWS Identity and Access Management (IAM) 权限边界

如果您的使用案例要求执行角色的权限过于具体,无法使用预定义的策略,请改用 Roles(角色)

注意:不能同时使用 Policies(策略)Roles(角色)属性。

解决方法

为新的 Lambda 执行角色指定策略

对于 Policies(策略)属性,请输入以下任意组合:

注意:AWS SAM 策略模板的范围限定为某些 AWS 资源。有关策略模板列表及其授予 Lambda 函数的权限,请参阅策略模板表

以下是定义了 Policies(策略)AWS SAM YAML 模板示例:

AWS 托管策略示例名为:

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 DynamoDB Full Access to your Lambda Function
      - AmazonDynamoDBFullAccess
MyFunction:
  Type: 'AWS::Serverless::Function'
  Properties:
    CodeUri: ${codeuri}
    Handler: hello.handler
    Runtime: python2.7
    Policies:
      - SQSPollerPolicy:
          QueueName:
            !GetAtt MyQueue.QueueName

内联策略文档示例:

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 权限边界。在您的 AWS SAM YAML 模板中,对于 PermissionsBoundary 属性,请输入权限边界的 Amazon 资源名称 (ARN)。例如:

Properties:
      PermissionsBoundary: arn:aws:iam::123456789012:policy/LambdaBoundaries

注意:只有在使用 AWS SAM 模板创建新角色时,才可以定义 PermissionsBoundary。您无法为指定的现有 Role 设置权限边界。

指定 Lambda 执行角色

对于 Role(角色)属性,请输入以下内容之一:

注意:如果未在 AWS SAM 模板中指定 Role,则在部署应用程序时,将创建一个具有您定义的任何 Policies 的执行角色。

下面是定义了 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

打包并部署您的应用程序

在 AWS SAM 模板中定义 Lambda 函数权限后,请执行以下操作:

  1. AWS SAM 命令行界面 (AWS SAM CLI) 中,使用 sam build 命令构建和打包应用程序。
    注意:如果在运行 AWS CLI 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI
  2. 使用 sam deploy命令来部署您的 AWS SAM 应用程序包。

有关详细信息,请参阅构建应用程序部署无服务器应用程序


这篇文章对您有帮助吗?


您是否需要账单或技术支持?