AWS-HTTP API网关-如何阻止favicon请求



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

网关本身是否有任何东西可以阻止favicon请求到达lambda?

我使用以下地形:

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}/*/*"
}

这不会阻止浏览器发出的favicon请求,而是不会为这些请求调用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}的值并进行相应的修改。

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

"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
}
}
}

这是OpenApi规范的链接。

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

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

相关内容

  • 没有找到相关文章

最新更新