如何在没有显式 swagger 定义的情况下在 SAM 中启用 "ApiKeyRequired" 属性?

How to enable "ApiKeyRequired" property in SAM without explicit swagger definition?

在 cloudformation 中,AWS::ApiGateway::Method 有一个布尔值 属性 ApiKeyRequired 。我怎样才能在 SAM 中达到同样的效果?

我知道我们可以启用显式 swagger 配置。是这样的

    {
    "swagger": "2.0",
    "info": {
        "version": "1.0",
        "title": {
              "Ref": "AWS::StackName"
            }
    },
    "x-amazon-apigateway-api-key-source": "HEADER",
    "paths": {
        "/": {
            "get": {
                "x-amazon-apigateway-integration": {
                    "httpMethod": "POST",
                    "type": "aws_proxy",
                    "uri": {
                    "Fn::Sub": "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${GetHelloWorld.Arn}/invocations"
                  }
                },
                "responses": {},
                "security": [
                    {
                        "api_key": []
                    }
                ]
            }
        }
    },
    "securityDefinitions": {
        "api_key": {
            "type": "apiKey",
            "name": "x-api-key",
            "in": "header"
        }
    }
}

在 SAM 中使用隐式 API 调用而不是显式传递 AWS::Serverless::Api 有可能吗?因为 swagger 代码适用于更少的端点,一旦端点增加就会变得复杂。有没有像 APIkeyRequired 这样的标志,就像我们在 Cloudformation 中那样?

感谢任何帮助 谢谢

现在 SAM 的 AWS::Serverless::ApiAWS::Serverless::Function 级别都支持 ApiKeyRequired

这是来自 AWS 文档的示例:

Resources:
  MyApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: Prod
      Auth:
        ApiKeyRequired: true # sets for all methods

  MyFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: .
      Handler: index.handler
      Runtime: nodejs8.10
      Events:
        ApiKey:
          Type: Api
          Properties:
            RestApiId: !Ref MyApi
            Path: /
            Method: get
            Auth:
              ApiKeyRequired: true

您还可以从以下资源中了解这一点:

  • AWS 官方文档here.
  • 本演练 blog post 作者:Sarthak Jain。