如何使用 AWS SAM 範本向 Lambda 函數授予 IAM 許可?

2 分的閱讀內容
0

我想在 AWS Serverless Application Model (SAM) 應用程式中授予 AWS Lambda 函數的許可。如何在 AWS SAM 範本中定義具有範圍許可的 Lambda 執行角色?

簡短描述

若要在 AWS SAM 範本中定義 Lambda 執行角色,您可以使用下列 AWS::Serverless::Function 資源屬性:

  • 政策 – 可讓您使用可確定 Lambda 函數範圍的預先定義之政策來建立新的執行角色。
  • 角色 – 可讓您定義 AWS Identity and Access Management (IAM) 角色,以用作函數的執行角色。
  • PermissionsBoundary – 可讓您為您建立的執行角色設定 IAM 許可界限

注意:****政策角色屬性無法一起使用。當您的執行角色需要特定許可而無法使用預先定義的政策時,使用角色屬性很有幫助。

解決方法

為新的 Lambda 執行角色指定政策

對於政策屬性,輸入下列任何組合:

**注意:**AWS SAM 政策範本的作用範圍限於特定 AWS 資源。如需政策範本清單及其授予 Lambda 函數的許可,請參閱政策範本表格

以下是一些定義了政策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 YAML 政策範本 (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。您無法為指定的現有角色設定許可界限。

指定 Lambda 執行角色

對於角色屬性,輸入下列其中一項:

注意:如果您未在 AWS SAM 範本中指定角色,則在部署應用程式時會建立執行角色。此執行角色包括您定義的任何政策

定義了角色屬性的 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 (SAM) (AWS SAM GitHub 儲存庫)

政策範本 (AWS SAM GitHub 儲存庫)

受管政策和內嵌政策

驗證 AWS SAM 範本檔案

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