在生成预先设定的s3 url之前假设一个角色

时间:2017-11-10 16:39:29

标签: python amazon-web-services amazon-s3 boto3 amazon-macie

在我们的django应用程序中,我们允许用户将文件直接上传到S3。

我们使用generate_presigned_post执行此操作。

一切正常,但我们现在在Macie中收到可疑访问警报,因为它发现EC2凭据正在外部使用。

Macie描述

  

此警报由正在使用的临时EC2实例凭据创建   亚马逊IP空间之外。 EC2实例配置文件凭据是   预期最常用于他们所拥有的EC2实例   由EC2元数据服务提供。这种技术是   开源利用框架,如Metasploit,和   从AWS网络外部观察它们的使用情况可能表明它们的用途   潜在的泄漏。请考虑联系用户确认   他们是否在AWS之外使用EC2凭据。如果   因此,将有效用户列入白名单或考虑重置IAM用户凭据。

这是有道理的,因为Instance角色会生成由外部用户使用的预先签名的帖子网址。

我真的有风险,外部用户可以获得与我的实例角色相同的访问权限吗?

如果是这样,是否值得创建一个单独的角色,可以访问我的特定存储桶中的s3:PutObject,然后在生成预先指定的帖子网址之前假设该角色?这样,如果以某种方式受到损害,它将没有与实例角色一样多的特权?

根据Boto3 docs,网址应授予访问权限以将特定对象发布到特定存储桶,但此Macie警报让我感到紧张。

谢谢!

1 个答案:

答案 0 :(得分:2)

您不必担心外部用户可以访问除了将文件上传到您的存储桶之外的其他任何内容。

  

HTT   PS://s3.amazonaws.com/bucket/foo.txt X-AMZ-算法= AWS4-HMAC-SHA256&安培;   X-AMZ-过期= 3600&安培;的 X-AMZ-凭证 = AKIAJRZXXXXXXXXus - 东 - 1%2Fs3%2Faws4_request&安培; X-AMZ-SignedHeaders =宿主安培; X-AMZ-日期= 20171021T190750Z&安培; X-AMZ -Signature = 8b84ae9b59e9f8a8d7066ecc39e797c8dc29848abcdef61717

所有AWS都是为了获取与您的 access_key (AKIAJRZXXXXXXXX)相关联的 secret_key ,根据对象网址,到期时间等计算签名,并检查是否存在与网址中的签名匹配。只有您和AWS知道secret_key,没有其他人知道。如果签名匹配,则用户可以上传文件,否则访问被拒绝,因为URL被篡改或过期时间。