Lambda 授权方策略不限制对 Api 网关代理资源的访问

问题描述

我有一个 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+},它使用 proxies APIGatewayProxyFunction 进入 .NET Core WebApi。在 APIGatewayProxyFunction/WebApi 中,我有许多可用的控制器和路由,包括 GET /a。在将所有这些部署到 AWS 之后,我可以使用值为 my-headera 构建一个 http 请求。我希望此请求仅提供对 GET /a 的访问权限,并在所有其他情况下返回 403。相反,它提供对 api 中所有内容的访问,类似于星级政策。

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

注意 - 当对 Api 网关使用相同的授权器时,其中定义了所有资源(而不是通过代理在 .NET 控制器内部),预期的行为似乎会发生 - 带有 {{1 }} 设置为 'a' 将授予对 my-header 的访问权限,否则返回 403。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)