如何使用 AWS SAM 模板为 Lambda 函数授予 IAM 权限?

上次更新日期:2021 年 10 月 11 日

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

简短描述

要在 AWS SAM 模板中定义 Lambda 执行角色,您可以使用以下 AWS::Serverless::Function 资源属性:

注意:不能同时使用 Policies(策略)Roles(角色)属性。当执行角色需要的权限过于具体而无法使用预定义策略时,使用 Roles(角色)属性很有用。

解决方法

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

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

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

以下是定义了 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 模板示例:

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 Resource Name (ARN)

对于 PermissionsBoundary 属性,输入权限边界的 ARN。例如:

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

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

指定 Lambda 执行角色

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

注意:如果未在 AWS SAM 模板中指定 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 应用程序包。

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


这篇文章对您有帮助吗?


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