繁体   English   中英

AWS S3中的预签名URL有多安全?

[英]How secure are presigned URLs in AWS S3?

我打算将用户重定向到存储在S3中的敏感资源的预签名URL。 这些是在检查用户权限后产生的,并且具有激进的超时(30秒)。 但我担心的是,我的客户端计算机上的某些恶意软件是否可能捕获该URL并仍然在URL的过期时间内下载该文件。 或者我只是太偏执了?

如果之前已经回答过,请指出我的方向。 感谢您的帮助。

在到期前获得URL的任何人都可以使用它来访问数据。 S3支持限制允许访问数据的IP地址的存储桶策略:

http://docs.aws.amazon.com/AmazonS3/latest/dev/AccessPolicyLanguage_UseCases_s3_a.html

但是,在这种情况下,您担心客户端计算机上的恶意软件。 所以这没有用。 您是否考虑过加密数据,以便只有客户端进程可以解密它?

您仍然容易受到不安全/粗心的客户端泄漏数据的影响。

我发现了这个 - http://docs.aws.amazon.com/AmazonS3/latest/dev/AuthUsingTempFederationTokenRuby.html并尝试了一下。 它似乎有效。 从文档中解释代码 -

# Start a session with restricted permissions.
sts = AWS::STS.new()
policy = AWS::STS::Policy.new
policy.allow(
  :actions => ["s3:ListBucket"],
  :resources => "arn:aws:s3:::#{bucket_name}"
).condition.add(:like, :referer, "domain.com")

session = sts.new_federated_session(
  'User1',
  :policy => policy,
  :duration => 2*60*60)

因此,我们创建的策略可以具有客户端下载的原始IP地址,或者可以是设置为我的应用程序域的aws:Referer字段。 我认为这至少会对您的资源造成一定程度的阻碍。 我知道,IP地址或引用者很容易被欺骗。 但它比没有任何保护更好。

在浏览器中, Web Cryptography API可用于加密/解密内容,通过预先签名的S3 URL共享,以确保它保持私密。

截至今天,API处于试验阶段,但每个现代浏览器都支持

通过使用此API,可以在浏览器中生成私有/公共密钥对。 私钥应存储在本地存储中,公钥应发送到lambda函数。 当我们请求S3内容时,我们必须首先转到lambda函数。 lambda函数使用公钥加密我们想要共享的内容,将其存储在S3存储桶中,并使用预先签名的URL共享加密对象。

通过这种方法,对象中的内容保持私有,即使有人未预先获得预先签名的URL。


没有尝试,但Amazon S3服务支持使用您自己的密钥加密

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM