【问题标题】:Do authorization based on path variable in AWS API Gateway基于 AWS API Gateway 中的路径变量进行授权
【发布时间】:2021-11-03 08:56:53
【问题描述】:

我有一个使用 Cognito 用户池进行身份验证的 AWS API 网关。我想对谁可以访问哪些端点实施细粒度控制。

这是我的要求:

提出请求的用户charlie: /api/charlie/board/1 -> 允许

提出请求的用户daisy: /api/charlie/board/1 -> 拒绝

charliedaisy 这里是 Cognito 用户名(我可以从 JWT 中提取)。

我正在考虑两种方法来实现这一点:

  1. 通过编写自定义 Lambda 授权器(类似于:https://aws.amazon.com/blogs/security/building-fine-grained-authorization-using-amazon-cognito-api-gateway-and-iam/)。

  2. 我的 API 网关由 Lambda 函数支持。我是否应该在每个 lambda 函数中执行此授权。我可以从 Bearer 令牌中提取 Cognito 用户名,从路径变量中提取请求的资源用户名。

我倾向于实施 #2。有没有更好的方法来做到这一点?

【问题讨论】:

    标签: amazon-web-services authorization aws-api-gateway amazon-cognito


    【解决方案1】:

    我的建议取决于 api 的规模和复杂性。我认为主要的权衡是授权逻辑的可维护性与拥有 lambda 授权者的额外延迟和复杂性。并且有一个小的成本要素与权衡有关。

    对于相对较小的 api,集中授权逻辑并没有太大的附加值。添加 lambda 授权者可能只会更复杂,并且您会遭受延迟增加的困扰。还有其他一些小的好处,例如您无需为未经授权的请求支付 API GW 费用,但这些通常可以忽略不计。

    不过,对于具有复杂身份验证逻辑的大型 API,这可能是有意义的。即便如此,在所有后端 lambda 中包含一个共享库可能会更好。

    因此,根据您的帖子,我建议您创建一个共享身份验证库并将它们导入您的 lambda 函数。

    【讨论】:

      猜你喜欢
      • 2016-01-11
      • 2021-08-31
      • 2017-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-13
      • 2019-11-20
      相关资源
      最近更新 更多