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

2 分钟阅读
0

我想在 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 应用程序包。

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


相关信息

AWS SAM 入门

AWS Serverless Application Model (AWS SAM)(AWS SAM GitHub 存储库)

策略模板(AWS SAM GitHub 存储库)

托管策略与内联策略

验证 AWS SAM 模板文件

相关视频

AWS 官方
AWS 官方已更新 1 年前