0

目标:我想将敏感数据保存在 s3 存储桶中,并在位于私有云中的 EC2 实例上处理它。我研究了通过 IP 和用户(iam)arn 设置 S3 存储桶策略的可能性,因此我认为 s3 存储桶中的数据是“安全的”。但我担心下一个场景:
1)有 vpc
2)里面有一个 ec2 实例
3)有一个受控(允许)帐户的用户有权连接和使用 ec2 实例和存储桶。存储桶被定义和配置为仅与已知(授权)ec2 实例一起使用。
安全漏洞:用户在 ec2 实例上上传恶意软件应用程序,并在处理数据期间执行恶意软件应用程序,将数据传输到不同 AWS 账户下的其他(未经授权的)存储桶。
在我的情况下,禁用将数据上传到 ec2-instance 不是一个选项。
问题:是否可以限制对 vpc firewal 的访问,使其可以访问某些特定的 s3 存储桶,但会被拒绝访问任何其他存储桶?假设用户可能将恶意软件应用程序上传到 ec2 实例,并在其中将数据上传到其他存储桶(在第三方 AWS 账户下)。

4

2 回答 2

3

您所问的问题并没有真正的解决方案,但话又说回来,您似乎试图解决错误的问题(如果我正确理解您的问题)。

如果您遇到不值得信任的用户能够“连接并使用 ec2 实例和存储桶”并在您的 VPC 中上传和执行应用程序代码的情况,那么所有的赌注都已经结束,游戏已经结束。关闭您的应用程序是您唯一可用的修复方法。尝试通过阻止恶意代码将敏感数据上传到 S3 中的其他存储桶来限制损害应该是您最不必担心的事情。除了将数据放回 S3 但在不同的存储桶中之外,恶意用户还有许多其他选项可用。

我对“连接并使用 ec2 实例和存储桶”的解释可能比您预期的更广泛,您的意思是用户能够将数据上传到您的应用程序。好吧,好吧...但是您的关注点似乎仍然集中在错误的点上。

我有用户可以上传数据的应用程序。他们可以上传他们想要的所有恶意软件,但是他们上传的数据中包含的任何代码——无论是恶意的还是良性的——都不会被执行。我的系统永远不会将上传的数据与要执行的东西混淆,或者以一种远程可能的方式处理它。如果您的代码可以,那么您又遇到了只能通过修复代码来解决的问题——而不是通过限制您的实例可以访问的存储桶。

实际上,当我说没有解决方案时,我撒了谎。有一个解决方案,但它相当荒谬:

在 EC2 或外部某处设置反向 Web 代理,但当然要使其配置对恶意用户无法访问。在此代理的配置中,将其配置为仅允许访问所需的存储桶。例如,对于 apache,如果存储桶被称为“mybucket”,它可能看起来像这样:

ProxyPass /mybucket http://s3.amazonaws.com/mybucket

代理上的其他配置将拒绝从您的实例以外的任何地方访问代理。然后,不要让您的实例直接访问 s3 端点,而只允许向代理发送出站 http(通过受感染实例的安全组)。对您以外的存储桶的请求将无法通过代理,这是现在唯一的“出路”。问题解决了。至少,您希望解决的特定问题应该可以通过这种方法的一些变体来解决。

更新澄清:

要以正常方式访问名为“mybucket”的存储桶,有两种方法:

http://s3.amazonaws.com/mybucket/object_key
http://mybucket.s3.amazonaws.com/object_key

使用此配置,您将通过安全组配置阻止(不允许)从您的实例对所有 S3 端点的所有访问,这将阻止使用任何一种方法访问存储桶。相反,您将允许从您的实例访问代理。

例如,如果代理位于 172.31.31.31,那么您将访问存储桶及其对象,如下所示:

http://172.31.31.31/mybucket/object_key

代理被配置为仅允许转发路径中的某些模式——而任何其他模式被拒绝——将控制特定存储桶是否可访问。

于 2012-12-27T06:46:44.057 回答
1

使用VPC 终端节点。这允许您限制 VPC 中的 EC2 实例可以访问的 S3 存储桶。它还允许您在 VPC 和 S3 服务之间创建私有连接,因此您不必允许广泛开放的出站 Internet 访问。有示例 IAM 策略显示如何控制对存储桶的访问。

S3 的 VPC 端点还有一个额外的好处,即某些主要软件存储库(例如 Amazon 的 yum 存储库和 Ubuntu 的 apt-get 存储库)托管在 S3 中,因此您还可以允许您的 EC2 实例获取它们的补丁,而无需为其提供广泛的互联网访问权限. 这是一个很大的胜利。

于 2015-11-24T18:59:58.970 回答