我有一个 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。