如何使用 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 权限边界

**注意:**PoliciesRoles 属性不能一起使用。当您的执行角色需要的权限过于具体而无法使用预定义策略时,使用 Role 属性会很有用。

解决方法

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

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

**注意:**AWS SAM 策略模板的范围仅限于特定 AWS 资源。有关策略模板及其向您的 Lambda 函数授予的权限的列表,请参阅 Policy template table

以下是一些定义了 PoliciesAWS 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 applicationsDeploying 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 官方
AWS 官方已更新 3 年前