问题描述
我有一个 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-header
的 a
构建一个 http 请求。我希望此请求仅提供对 GET /a
的访问权限,并在所有其他情况下返回 403。相反,它提供对 api 中所有内容的访问,类似于星级政策。
这是在代理资源前使用 Lambda 授权器时的预期行为吗?它似乎真的只强制执行 Allow *
或 Deny *
。谢谢。
注意 - 当对 Api 网关使用相同的授权器时,其中定义了所有资源(而不是通过代理在 .NET 控制器内部),预期的行为似乎会发生 - 带有 {{1 }} 设置为 'a' 将授予对 my-header
的访问权限,否则返回 403。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)