Amazon web services 我如何***安全地***允许用户删除AWS S3上的资源?

Amazon web services 我如何***安全地***允许用户删除AWS S3上的资源?,amazon-web-services,amazon-s3,Amazon Web Services,Amazon S3,我三个月前问过,但我仍在寻找答案 我有客户端中间件,但我不希望出现用户意外或恶意删除其他用户资源的情况 如何保护S3上的资源,以便用户只能删除其资源,而不能删除任何其他用户的资源 非常感谢在这种情况下,不可能对应用程序用户而不是AWS用户限制S3,因为S3不了解任何此类特定用户。从S3中删除内容的不是您的用户,而是您的应用程序本身,无论是运行在EC2还是Lambda上,您都需要为其指定IAM角色,以便它能够实际执行此操作 这里没有IAM配置可以帮助您,因为您可以允许EC2实例/Lambda删除它

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

我有客户端中间件,但我不希望出现用户意外或恶意删除其他用户资源的情况

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


非常感谢

在这种情况下,不可能对应用程序用户而不是AWS用户限制S3,因为S3不了解任何此类特定用户。从S3中删除内容的不是您的用户,而是您的应用程序本身,无论是运行在EC2还是Lambda上,您都需要为其指定IAM角色,以便它能够实际执行此操作

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

这里唯一的选择是通过应用程序本身保护它。在数据库中存储用户与其S3内容之间的映射,并在启动任何删除请求时执行应用程序级检查。如果您正确配置了应用程序,那么其他人删除其他人内容的唯一方法就是访问他们的帐户凭据或您的AWS帐户(具有S3管理权限)。如果有人可以模仿其他人,那么AWS提供的任何保护都不会有任何用处,可能除了S3 MFA删除保护之外,但这不适用于此类场景

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

以下是一些其他建议/最佳做法,以降低恶意/意外删除发生的可能性

为web服务器和DB服务器使用单独的实例 将DB放入专用子网,只允许通过NAT实例/网关向外连接到Internet 仅允许来自与web服务器关联的安全组的入站连接(可能是出于管理目的的SSH连接),如果您未使用AWS托管数据库,则仅允许来自特定IP地址的入站连接 在数据库中只存储用户密码的哈希值 允许在S3存储桶上进行版本控制,这样,即使S3中的对象被删除,删除标记被创建为该对象的最新版本,如果需要,您也可以随时恢复它 确保只有经过身份验证的用户才能删除内容
建议:删除你的答案,并对你已经问过的问题悬赏谢谢-以前从未用过。如果有人能这样做,请给出上述答案,我将不胜感激。您所说的客户端中间件到底是什么意思?您的系统结构是什么?您如何将用户映射到他们的S3内容?您好,谢谢。客户端中间件-仅当删除请求与正确的用户id匹配时才允许访问它。我使用的是laravel php后端。我只是想确保在AWS上,只有特定的用户可以删除属于他们的资源,而不是其他人。我在我的问题中引用了重复的内容谢谢你的回复。正确-客户端/用户发送一个请求,委托给创建和删除资源的单个AMI用户。到目前为止,我的应用程序逻辑是,只有经过身份验证的用户才能发送删除请求并删除与其帐户关联的资源。但我担心生产中的安全性——我不想发现恶意用户知道如何向其他用户的资源发送删除请求的情况。是否有这样的用户= >资源映射可用于S3?@ DaScript,只有AMI用户/角色/组-S3映射,所以答案是否定的。我已经添加了一些轻量级指南,您可以具体考虑对象版本控制。