【问题标题】:AWS - HTTP API Gateway - How do I block favicon requests?AWS - HTTP API Gateway - 如何阻止网站图标请求?
【发布时间】:2021-07-23 21:04:45
【问题描述】:

我正在使用 HTTP API 网关来触发 lambda 调用。当我使用邮递员的网址时,没有问题。当我在浏览器中使用它时,它总是会为网站图标发出第二个请求。

网关本身是否有阻止网站图标请求到达 lambda 的方法?

我正在使用以下 terraform:

resource "aws_apigatewayv2_api" "retry_api" {
  name          = "${var.environment}_${var.cdp_domain}_retry_api"
  protocol_type = "HTTP"
  description   = "To pass commands into the retry lambda."
  target = module.retry-support.etl_lambda_arn
}

resource "aws_lambda_permission" "allow_retry_api" {
  statement_id  = "AllowAPIgatewayInvokation"
  action        = "lambda:InvokeFunction"
  function_name = module.retry-support.etl_lambda_arn
  principal     = "apigateway.amazonaws.com"
  source_arn = "${aws_apigatewayv2_api.retry_api.execution_arn}/*/*"
}

【问题讨论】:

  • 你应该可以通过调整 source_arn 来做到这一点
  • 对什么有什么建议?我试图取消最后一个 *,希望它只接受“/” url 调用,但它破坏了连接。

标签: amazon-web-services aws-api-gateway aws-http-api


【解决方案1】:

通常,我会将 cloudfront 放在 API 网关前面,并将 favicon.ico 映射到 S3 存储桶。

如果您真的想在 API GW 级别处理它,您可以创建一个 /favicon.ico 路由,并将集成设置为 MOCK - 这将返回一个特定值,而不是调用 lambda(或任何其他后端)。

【讨论】:

    【解决方案2】:

    这不会阻止浏览器发出的网站图标请求,而是不会为这些请求调用 Lambda。

    假设 API 端点是 /hello 并且 http 方法是 GET,您可以限制 api-gateway 只为这个 URL 调用 lambda。格式应该是这样的。

    arn:${AWS::Partition}:execute-api:${AWS::Region}:${AWS::AccountId}:${__ApiId__}/${__Stage__}/GET/hello
    

    所以aws_lambda_permission 中的source_arn 会变成这样

    source_arn = "${aws_apigatewayv2_api.retry_api.execution_arn}/*/*/GET/hello"
    

    答案假设现有的 / 最终分别用于apiIdstage。否则检查${aws_apigatewayv2_api.retry_api.execution_arn} 的值并进行相应的修改。

    This 回答也有帮助。您只能在body 中为您支持的path 提供openapi specification。对于上述情况,openapi specification 的相关路径部分调用名为 HelloWorldFunction 的 Lambda 看起来像

      "paths": {
            "/hello": {
              "get": {
                "x-amazon-apigateway-integration": {
                  "httpMethod": "POST",
                  "type": "aws_proxy",
                  "uri": {
                    "Fn::Sub": "arn:${AWS::Partition}:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${HelloWorldFunction.Arn}/invocations"
                  },
                  "payloadFormatVersion": "2.0"
                },
                "responses": {} //Provide the expected response model
              }
            }
          }
    

    Here 是 OpenApi 规范的链接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-18
      • 2019-09-12
      • 2015-10-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-22
      • 1970-01-01
      • 2021-02-15
      相关资源
      最近更新 更多