首页 > 解决方案 > Lambda Authorizer Policy 不限制对 Api Gateway 代理资源的访问

问题描述

我有一个 Lambda 授权方 (python),它返回类似于以下内容的基于资源的策略:

import json

def lambda_handler(event, context):
    
    resource = "*"
    headerValue = _get_header_value(event, 'my-header')
    if headerValue == 'a':
        resource = "arn:aws:execute-api:*:*:*/*/GET/a"
    return {
        "principalId": f"somebody",
        "policyDocument": {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Action": "execute-api:Invoke",
                    "Effect": "Allow",
                    "Resource": f"{resource}"
                }
            ]
        }
    }

基本上,这个授权者会默认返回一个不受限制的 api 资源策略,使用*. 但是,如果传递了特定的标头值,则策略会将访问限制为仅允许GET /a

在 ApiGateway 方面,我拥有的唯一资源是使用ANY /{proxy+}APIGatewayProxyFunction代理到 .NET Core WebApi 的资源。在 APIGatewayProxyFunction/WebApi 内部,我有许多可用的控制器和路由,包括GET /a. my-header在将所有这些部署到 AWS 之后,我可以使用with value构造一个 http 请求a。我希望此请求仅提供对 的访问GET /a,并在所有其他情况下返回 403。相反,它提供对 api 中所有内容的访问,类似于星号策略。

这是在代理资源前使用 Lambda Authorizer 时的预期行为吗?它似乎真的只强制执行Allow *or Deny *。谢谢你。

注意 - 当对 Api 网关使用相同的授权方时,其中定义了所有资源(而不是通过代理在 .NET 控制器内部),预期的行为似乎确实发生了 -my-header设置为“a”的 http 请求将授予访问权限GET /a, 但否则返回 403。

标签: aws-api-gatewayasp.net-core-webapilambda-authorizer

解决方案


推荐阅读