Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 是否可以限制从EC2实例的访问仅使用特定帐户的S3存储桶?_Amazon S3_Amazon Ec2_Amazon Web Services_Amazon Vpc - Fatal编程技术网

Amazon s3 是否可以限制从EC2实例的访问仅使用特定帐户的S3存储桶?

Amazon s3 是否可以限制从EC2实例的访问仅使用特定帐户的S3存储桶?,amazon-s3,amazon-ec2,amazon-web-services,amazon-vpc,Amazon S3,Amazon Ec2,Amazon Web Services,Amazon Vpc,目标:我希望将敏感数据保存在s3存储桶中,并在位于私有云中的EC2实例上进行处理。我研究了通过IP和用户(IAM)ARN建立S3桶策略的可行性,因此我认为S3桶中的数据是“安全的”。但我担心下一个场景:1)有vpc2)内部有一个ec2实例3)有一个受控制(允许)的用户帐户,有权连接并使用ec2实例和bucket。Bucket被定义和配置为仅与已知(授权)ec2实例一起使用安全漏洞:用户在ec2实例上上载恶意软件应用程序,并在处理数据期间执行将数据传输到不同AWS帐户下其他(未经授权)存储桶的恶意

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

对于您提出的问题,实际上没有解决方案,但是,您似乎试图解决错误的问题(如果我正确理解您的问题)

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

也有可能我对“连接并使用ec2实例和bucket”的理解比您预期的更广泛,您的意思是用户能够将数据上传到您的应用程序。好吧,好吧。。。但你的担心似乎仍然集中在错误的地方

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

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

在EC2或外部的某个地方设置反向web代理,但当然要使恶意用户无法访问其配置。在此代理的配置中,将其配置为仅允许访问所需的bucket。例如,在apache中,如果bucket被称为“mybucket”,则看起来可能是这样的:

ProxyPass /mybucket http://s3.amazonaws.com/mybucket
http://172.31.31.31/mybucket/object_key
代理上的其他配置将拒绝从实例以外的任何位置访问代理。然后,不允许您的实例直接访问s3端点,只允许向代理发送出站http(通过受损实例的安全组)。除了您的bucket之外,对bucket的请求将不会通过代理,代理现在是唯一的“出路”。问题解决了。至少,您希望解决的具体问题应该通过这种方法的一些变化来解决

更新以澄清:

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

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

例如,如果代理位于172.31.31.31,则您将访问bucket及其对象,如下所示:

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

代理被配置为只允许转发路径中的某些模式,而其他模式被拒绝,这将是控制某个特定存储桶是否可访问的工具。

对于您提出的问题,实际上没有解决方案,但您似乎试图解决错误的问题(如果我正确理解你的问题)

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

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

我有一些应用程序,用户可以上传数据。他们可以上传他们想要的所有恶意软件,但他们上传的数据中包含的任何代码——恶意或良性代码——都不可能被执行。我的系统永远不会将上传的数据与要执行的内容混淆,也不会以某种方式对其进行处理