即使指定了调用角色,AWS SAM也会自动生成Lambda权限

时间:2020-07-15 04:38:25

标签: aws-sam

我正在尝试在AWS::Serverless::Api资源中定义授权者。授权者链接到未在我的堆栈中定义的Lambda,并且在我们帐户中的多个堆栈之间共享。

看来SAM的默认行为是自动添加基于资源的权限,以授予我的API网关调用授权者的权限。我可以在Cloudformation输出中看到AWS::Lambda::Permission资源正在创建,尽管实际上我的template.yaml文件中没有定义。通常,此行为会很好,但是,当跨多个堆栈发生此行为时,它将导致共享Lambda上的策略文档增长到最终超过AWS大小限制的水平。

要解决此问题,我尝试使用IAM角色来授予对共享的lambda的访问权限,而不是基于资源的权限。但是,即使我指定了用于调用共享lambda的角色,SAM仍在Cloudformation中创建AWS::Lambda::Permission资源。

有什么方法可以阻止SAM自动生成这些基于资源的权限?

我的API定义如下。您会注意到FunctionInvokeRoleInvokeRole属性均已设置。如果这些属性是使用IAM角色定义的,我不会期望创建任何权限资源。

PublicGateway:
    Type: AWS::Serverless::Api
    Properties:
      StageName: latest
      EndpointConfiguration: REGIONAL
      Cors:
        AllowHeaders: '''Content-Type,Authorization,X-Amz-Date,X-Api-Key,X-Amz-Security-Token'''
        AllowMethods: '''DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT'''
        AllowOrigin: '''*'''
      Auth:
        InvokeRole:
          Fn::GetAtt:
          - MyCustomRole
          - Arn
        Authorizers:
          MyAuthorizer:
            FunctionArn:
              Fn::Sub: arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:my-shared-lambda-authorizer
            FunctionInvokeRole:
              Fn::GetAtt:
              - MyCustomRole
              - Arn
            FunctionPayloadType: REQUEST
            Identity:
              Headers:
              - Authorization
              ReauthorizeEvery: 600
        DefaultAuthorizer: MyAuthorizer
        AddDefaultAuthorizerToCorsPreflight: false
      DefinitionBody:
        Fn::Transform:
          Name: AWS::Include
          Parameters:
            Location: s3://some-s3-bucket-full-of-swagger/swagger.json
      Variables:
        stageVersion: latest

0 个答案:

没有答案