6

我已经阅读了很多帖子,这些帖子涉及我认为应该是一个非常常见的用例 - 但没有找到我想要的确切内容,或者无法完成的简单原因。

我在 S3 上有一些文件。我希望能够通过我构建的前端授予某些用户访问某些文件的权限。

到目前为止,我已经使它以这种方式工作:

  • 我在 Django 中构建了前端,使用它的内置用户和组
  • 我有一个桶模型,我在其中镜像了我的 S3 桶。
  • 我有一个从组到代表 S3 权限的存储桶的 m2m 关系。
  • 用户登录并针对 Django 的用户进行身份验证。
  • 我从 Django 中获取允许用户查看的存储桶列表
  • 我使用 boto 从这些存储桶中获取指向文件的链接列表并显示给用户。

这可行,但并不理想,而且感觉也不对。我必须保留存储桶的镜像,并且我还必须维护自己的用户/密码和权限列表,因为 AWS 已经内置了所有这些。

我真正想要的是简单地在 IAM 中创建用户并使用 IAM 中的组权限来控制对 S3 存储桶的访问。没有重复的数据或功能。我的应用程序会向用户请求 UN/PW 并使用它连接到 IAM/S3 以提取存储桶和文件列表,然后向用户显示链接。简单的。

我怎么能,或者为什么我不能?

我看错了吗?

解决这个(我假设)非常常见的用例的“正确”方法是什么?

4

2 回答 2

1

你的思路是对的,我们来看看替代方案:

  1. 您的应用程序存储所有用户的 api 密钥和秘密,并将所有内容委托给 AWS IAM 权限系统。虽然是架构上更简单的解决方案,但细节可能会扼杀它。您的应用程序应该是真正安全的,并以非常安全的方式托管秘密 api 密钥。这实际上取决于用例:

    • 如果所有工作都由交互式用户完成 - 那么您的系统可以存储一个加密的密钥和用户的密码,将其作为登录过程的一部分进行解密。这意味着,如果您的数据库遭到破坏 - 那里没有足够的信息来破坏密钥。
    • 如果系统需要做后台非交互的东西,那么就需要开发复杂的程序来安全地存储这些信息。RightscaleDome9等公司已开发出此类流程。除非您的团队中有安全专家,否则不建议使用此选项。
  2. 您的应用程序使用单个“强”api 密钥连接到 AWS - 但如果允许特定用户对该资源执行该操作,则查询 AWS API。可悲的是,我不熟悉类似的 AWS api——所以也许其他一些读者想对此发表评论。这(如果可能)将是最简单和安全的解决方案。

  3. 扩展您现有的解决方案以使用存储在 AWS 的数据:用户、组、用户->组分配,并使用用户/组策略作为您的权限检查的数据源。这样,您将与 AWS 进行一些逻辑重复(这很好),但不会出现真正痛苦的数据重复。

于 2012-11-30T15:46:15.107 回答
1

您应该考虑使用 Amazon Cognito(2014 年发布)为您的用户创建唯一身份并对他们进行身份验证,以便安全访问您的 AWS 资源,例如 Amazon S3 或 DynamoDB。

您可以利用 AWS IAM 身份、自定义开发人员身份、公共身份提供商(如 Amazon IAM、Facebook、Twitter、Google)或任何与 OpenID Connect 兼容的提供商。

以下是如何使用 Amazon Cognito 的高级架构 在此处输入图像描述

此处的常见问题解答 - https://aws.amazon.com/cognito/faqs/

于 2017-05-12T21:27:38.827 回答