【问题标题】:Is it possible to restrict access from EC2 instance to use only S3 buckets from specific account?是否可以限制来自 EC2 实例的访问以仅使用来自特定账户的 S3 存储桶?
【发布时间】:2012-08-16 03:42:38
【问题描述】:

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

【问题讨论】:

  • 所以问题是“如何防止用户从我的 EC2 实例执行上传到他们自己的 S3 存储桶?”
  • 是的。用户可以将数据从 EC2 实例上传到我的 S3 存储桶(Account1),但限制将数据上传到任何其他存储桶(在 Account2、Account N 下,任何其他)。
  • 您的实例是在私有 VPC 子网中还是在公共子网中? IE。子网路由表是否包含到 Internet 网关或 NAT 实例的 0.0.0.0/0 路由?
  • EC2 实例在 VPN 中。可以添加限制并拒绝访问某些主机,但这并不能解决我的问题:我必须允许访问 s3 Amazon 端点:s3.amazonaws.com.Requirement 是:允许某些 s3 存储桶 - 其他受限(其他人位于不同的帐户下,未知-因为无法设置策略)
    网址过滤也不是这种情况:亚马逊API使用TLS(https)-所有数据都已加密。目前我只看到拒绝使用 s3 并将所有数据存储在 EBS 服务上的解决方案。
  • 无论如何克里斯托弗,感谢您的帮助:)

标签: amazon-s3 amazon-ec2 amazon-web-services amazon-vpc


【解决方案1】:

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

如果您遇到的情况是,不值得信任的用户能够“连接并使用 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

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

【讨论】:

  • 迈克尔,谢谢您的回复! 问题说明:是的,我试图解决一个有点不寻常的问题:用户可以在 VPC 中的 EC2 实例上连接和工作,但不能将任何文件拉\推到实例。原因:敏感数据位于不应复制到其他任何地方的实例中。因此,我们希望只允许访问某些存储桶,而不是所有 S3 服务。带有反向 Web 代理的想法听起来不错,但在这种情况下,我必须禁止 S3 端点和连接到某些存储桶集。在此,我们暂时禁止使用 S3 服务。
  • 此解决方案应该适用于您的应用程序。我添加了一些注释来阐明实现细节。如果我遗漏了什么,请告诉我,我会尽力解决。
【解决方案2】:

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

有一个added bonus 带有 S3 的 VPC 端点,某些主要软件存储库(例如 Amazon 的 yum 存储库和 Ubuntu 的 apt-get 存储库)托管在 S3 中,因此您也可以让您的 EC2 实例在不提供补丁的情况下获取它们的补丁广泛开放的互联网接入。这是一个巨大的胜利。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 2020-11-02
    • 2017-03-23
    • 2020-11-28
    • 1970-01-01
    • 2016-09-05
    相关资源
    最近更新 更多