【问题标题】:What are the best practices to securely store/access SaaS customer data on Amazon S3?在 Amazon S3 上安全存储/访问 SaaS 客户数据的最佳实践是什么?
【发布时间】:2016-11-04 16:11:45
【问题描述】:

致所有 SaaS 工程师/开发人员...

我正在构建一个将客户数据存储在 S3 上的 SaaS 产品。我想知道关于安全性的最佳方法是什么?

  • 拥有一个具有存储桶策略的 IAM 用户。这很简单,但数据安全完全由 SaaS 应用程序处理。如果出现故障,其他用户可以访问受限材料。
  • 如何为每个新客户帐户创建一个 IAM 用户(通过 IAM REST API)并为每个存储的对象设置对象特定的 ACL?更复杂,但它也在 S3 中增加了一层安全性。
  • 还有其他方法吗?

此外,通过 SaaS 应用程序提供对材料的访问。我计划将每个对象的“可读名称”替换为 guid,这样就不会轻易猜到它,并使用带有时间限制的预签名 url 来查看和下载它们。这是最佳做法吗?什么时间限制被认为是安全和用户友好的?

谢谢

【问题讨论】:

    标签: security amazon-s3 saas


    【解决方案1】:

    您不应为应用程序的“最终用户”生成 AWS IAM 用户(选项 2)。 IAM 授予调用 AWS API 的权限,您的应用程序的最终用户永远不需要调用 API。

    存储在 Amazon S3 中的信息应该可以通过标准方法提供给您的 SaaS 应用程序:

    • 为您的应用程序创建 IAM 角色
    • 启动运行您的应用程序的 Amazon EC2 实例时选择 IAM 角色
    • 在使用 AWS 开发工具包的 Amazon EC2 实例上运行的任何代码都将知道如何自动通过EC2 instance metadata service 访问凭证

    如果您希望将来自 Amazon S3 的内容直接提供给应用程序的用户,请生成 Amazon S3 pre-signed URLs,它提供对存储在 S3 存储桶中的对象的限时访问。 15 分钟的有效期可能是安全性和暂停接听电话的用户之间的一个很好的权衡,但具体时间取决于您。

    您的 S3 存储桶不应有存储桶策略,因为所有访问都将通过授予 IAM 角色的权限或通过预签名 URL。

    使用随机 GUID 作为文件名无关,因为您将获得适当的安全性而不是混淆。

    【讨论】:

    • 谢谢约翰!我在 Heroku 上托管,所以我只需要 S3 存储。 API访问的好点。但是,我不会与客户共享 IAM 用户。它本来是应用程序内部的。关于存储桶策略,我对答案有点困惑。我需要向 IAM 用户授予存储桶访问权限。如果我授予他存储桶访问权限,他将能够放置对象并向客户提供预签名访问权限。这样,我不需要为对象创建更多 ACL。最后,我想我错误地认为 presigned 提供了对所有对象的时间限制访问。
    • Amazon S3 存储桶策略通常用于授予所有用户的访问权限。如果您希望向特定用户授予访问权限,请将策略放在 IAM 用户本身(而不是 S3 存储桶)上。
    猜你喜欢
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    相关资源
    最近更新 更多