【问题标题】:How to assign IAM Role to implicit API Gateway in SAM template?如何在 SAM 模板中将 IAM 角色分配给隐式 API 网关?
【发布时间】:2019-05-21 08:41:46
【问题描述】:

我有一个 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"

【问题讨论】:

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


    【解决方案1】:

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

    如果您想设置 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 文档对此并不完全清楚,但在编写上述设置的时候。

    【讨论】:

    • 感谢您的帮助!我很快就会试一试。至于为什么角色/政策必须明确,这是我必须遵守的组织要求。
    猜你喜欢
    • 1970-01-01
    • 2021-09-05
    • 2018-06-13
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 2017-07-26
    • 2021-01-22
    相关资源
    最近更新 更多