【问题标题】:APIG + federated identities - fine grained access control?APIG + 联合身份 - 细粒度访问控制?
【发布时间】:2024-07-18 14:05:02
【问题描述】:

我正在寻找控制对我的 API 不同部分的访问的最佳方式。该 api 是通过联合身份调用的,这些联合身份获取映射到特定 IAM 角色的临时凭证 (STS)。这确保了只有登录的用户才能调用很棒的 AP​​I。但是,我想以更细粒度的方式控制与用户管理相关的 API 端点的访问。目前我使用 lambda 函数和一个 dynamo db 表来实现这一点,但是在每个 lambda 函数中拖动授权部分甚至为此目的只创建 lambda 函数似乎很乏味。我查看了自定义授权方,但无法找到有关如何在其中验证 STS 令牌的文档,实际上我想避免处理它。

那么是否有一种优雅的方式来对每个资源/方法进行授权,同时仍然使用 AWS_IAM 作为授权方进行身份验证?

【问题讨论】:

  • 目前没有开箱即用的解决方案,也许您应该探索 AWS SSO。

标签: amazon-web-services aws-lambda aws-api-gateway federated-identity


【解决方案1】:

如果您在 API Gateway 上使用 AWS_IAM 授权方,则提供细粒度访问的唯一方法是使用附加到 STS Assumed Role 的 IAM 策略。

注意:无法通过使用 IAM 凭证的 API Gateway 调用将 IAM 策略传递给 Lambda 函数。

但是,您可以在 API Gateway 集成请求中使用 Invoke with Caller credentials 属性来验证 STS 代入的 IAM 角色中定义的任何 API Gateway 访问策略。通过这种方式,您可以定义授权的一部分,您可以在其中定义哪些 API 网关端点和 HTTP 方法允许被假定角色。

如果您需要为通过 API Gateway 端点公开的各个对象定义对象级别权限并向用户授予访问权限,则需要在 Lambda 中进行处理。

【讨论】:

  • 谢谢阿山的回答!使用调用者凭据调用确实是一个好点,但您是否同意我的理解,即它不会使我让用户 A 访问 GET /resourceX 并拒绝用户 B 访问它?由于他们都承担相同的角色,因此无法区分,对吗?
  • 如果两个用户承担相同的角色,他们将拥有相同的权限。有什么理由不根据应用程序中分配给用户的角色假设不同的 IAM 角色?
  • 好吧,我喜欢不同的角色,但使用 Cognito 联合身份,您只需定义未经授权和授权的角色。所以你无法区分......除非我错过了什么......
  • 使用 Cognito 联合身份,您可以根据身份提供者声明承担不同的角色。你对 IDP 有什么用? Cognito 用户池或社会身份或 SAML?
  • 马丁,请查看以下文章。 aws.amazon.com/blogs/aws/…希望对你有帮助! :)