如何在SAM模板中将IAM角色分配给隐式API网关?

时间:2018-12-20 19:57:20

标签: amazon-web-services amazon-iam aws-serverless

我有一个AWS SAM模板,该模板创建一个显式的lambda和隐式的api网关(通过Events属性)。我需要为lambda和api网关分配特定且不同的IAM角色。从SAM模板语法来看,lambda角色是不言而喻的,但我无法弄清楚如何为api网关分配角色。

例如

# template.yaml
...
Resources:
  MyLambda:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: very-important-lambda
      Handler: src/index.handler
      Runtime: nodejs8.10
      Role: !Sub "arn:aws:iam::${AWS::AccountId}:role/lambda-role-name
      CodeUri: ./build
      # Below event creates an AWS::ApiGateway::RestApi resource, but how do I give that resource an IAM Role?
      Events:
        PostDomainEvent:
          Type: Api
          Properties:
            Method: POST
            Path: "/path/resource/v1"

1 个答案:

答案 0 :(得分:0)

为什么要向API网关添加角色? SAM会自动(隐式)安排API网关具有使用Lambda资源策略(有关API网关的docs中的更多信息)来调用Lambda函数的权限

如果要设置API网关的资源策略或设置其他设置,则可以显式定义Lambda事件使用的API。

例如设置资源策略:

RestApi:
  Type: AWS::Serverless::Api
  Properties:
    Policy: > 
      {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Effect": "Allow",
                    "Principal": {
                        "AWS": "arn:aws:iam::123456789012:root"
                    },
                    "Action": "execute-api:Invoke",
                    "Resource": "arn:aws:execute-api:eu-central-1: 123456789012:7mancjlc5z/*"
                }
            ]
        }

Function:
  Type: AWS::Serverless::Function
  Properties:
    Events:
      ApiRequest:
        Type: Api
        Properties:
          Path: /v1/comments
          Method: post
          RestApiId: !Ref RestApi

关于SAM文档尚不十分清楚,但是在撰写上述设置工作时。