如何***安全地***使用户能够删除其在AWS S3上的资源?

时间:2019-01-16 18:53:36

标签: amazon-web-services amazon-s3

三个月前我问过this question,但我仍在寻找答案

我获得了客户端中间件-但是我不希望出现用户意外或恶意删除其他用户资源的情况。

如何在S3上保护资源,以便用户只能删除其资源,而不能删除任何其他用户的资源?

非常感谢

1 个答案:

答案 0 :(得分:1)

在这种情况下,不可能将S3限制为您的应用程序用户(非AWS用户),因为S3没有关于任何此类特定用户的概念。从S3删除内容的不是您的用户,而是您的应用程序本身,无论它是在EC2还是Lambda上运行,您都需要为其指定一个IAM角色,以便它实际上可以执行此操作。

没有IAM配置可以为您提供帮助,因为您可以允许EC2实例/ Lambda删除它,也可以不删除它。但这是相同的EC2 / Lambda,无论哪个用户发起了请求。

这里唯一的选择是通过应用程序本身来保护它。在数据库中存储用户及其S3内容之间的映射,并在启动任何删除请求时执行应用程序级别检查。如果您正确配置了应用程序,那么某人删除他人内容的唯一方法是访问其账户凭证(或具有S3管理权限的AWS账户)。而且,如果某人可以假冒其他人,则AWS所提供的保护也无济于事(也许除了S3 MFA删除保护之外,但不适用于此类情况)。

可行的方法是考虑到这一方面,为您的应用程序创建严格的测试用例,以最大程度地减少应用程序中潜在错误的可能性。

还有其他一些建议/最佳实践,可以减少恶意/意外删除的发生。

  1. 为您的Web服务器和数据库服务器使用单独的实例
  2. 将数据库放入专用子网中,并且仅允许通过NAT实例/网关到Internet的出站连接
  3. 仅允许来自与您的Web服务器相关联的安全组的入站连接(如果不使用AWS托管数据库,则只能通过特定IP地址使用SSH连接进行管理)
  4. 在数据库中仅存储用户密码的哈希值
  5. 允许在S3存储桶上进行版本控制,这样,即使S3中的对象被删除(删除标记被创建为该对象的最新版本),如果出现以下情况,也可以始终将其还原:需要
  6. 确保只有经过身份验证的用户才能删除内容