首页 > 解决方案 > AWS - 如何为 AWS 服务分离每个用户的资源

问题描述

我正在为我的应用程序用户打开 AWS 服务(例如:AWS Rekognition)。

问题是:当一个用户(例如:user1)创建资源(例如集合)时,其他用户(例如:user2、user3)也会看到由 user1 创建的资源。

我曾尝试为我的用户使用Identity Pool,并从我的后端服务器获取Token/ Identity,但情况并不好(我的用户仍然可以看到彼此的资源)。

我应该怎么做才能让 user1 只接收 user1 的资源?

几天来我一直在努力解决这个问题,但似乎无法弄清楚。

问候

标签: amazon-web-servicesamazon-cognito

解决方案


这种架构有两种方法:

选项 1:客户端/服务器

在此架构中,客户端应用程序(例如在移动设备上或基于 Web 的应用程序)调用由后端应用程序托管的 API。然后,后端应用程序会验证请求并代表用户调用 AWS

用户的应用程序永远不会收到 AWS 凭证。这是非常安全的,因为后端应用程序可以验证所有请求并应用业务逻辑。

选项 2:提供 AWS 凭证

在此架构中,客户端应用程序接收临时 AWS 凭证,使它们能够直接调用 AWS 服务(与您描述的架构相匹配)。

好处是应用程序可以直接访问 AWS 服务,例如 Amazon S3。缺点是他们需要非常严格地限制他们被授予的权限,以确保他们只能访问所需的资源。

某些服务通过允许IAM 权限条件来限制可访问的资源,例如通过标签或其他标识符,从而使这变得容易。

但是,根据Amazon Rekognition - AWS Identity and Access Management 的操作、资源和条件键,Amazon Rekognition没有这样的功能:

Rekognition 没有可在策略语句的 Condition 元素中使用的特定于服务的上下文键。

我认为您可以通过在 IAM 政策中提供一个Resource字符串来限制调用,这可以限制他们进行某些调用(例如DeleteFaces)的能力,以便仅针对特定的collection.

但是,请注意,完全允许或根本不允许list调用诸如此类的调用。ListCollections无法限制返回的集合列表。(这与大多数 AWS 服务相同,例如列出 EC2 实例。)

因此,在使用这种提供凭据的方法时,您应该非常小心授予应用程序的权限。


推荐阅读