aws-api-gateway - 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。
解决方案
推荐阅读
- php - 在 laravel 中集成我的管理面板仪表板后出现错误消息
- ios - UITableView 上的自动单元格高度没有重叠 iPhone X 的底部
- php - string & int 在 strtotime 中无法正常工作
- api - 谁能举例说明如何在 form.io 中使用 api 创建项目
- batch-file - 将字符串中的 2 个值与批处理文件进行比较
- java - 这是什么意思!(x == 1)
- c++ - 为什么规定临时对象必须具有不同的地址?
- html - Angular View 绑定不使用简单的布尔值更新
- excel - VBA Excel-根据用户输入将单元格值和相关行放入另一个工作表中
- elasticsearch - PostgreSQL 过滤查询到 Elasticsearch 查询