使用IAM进行用户身份验证

mda*_*890 6 django amazon-s3 boto amazon-web-services amazon-iam

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

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

到目前为止,我已经这样做了:

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

这有效,但并不理想,也感觉不对.我必须保留桶的镜像,当AWS已经内置了所有内容时,我还必须维护自己的用户/密码和权限列表.

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

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

我是以错误的方式看待这个吗?

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

Fro*_*yke 1

你的想法是正确的,让我们看看替代方案:

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

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

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