跳至内容

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

2 分钟阅读
0

我想在我的 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 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

AWS 官方已更新 5 年前