无需访问和密钥即可上传到Amazon S3

Blu*_*doo 7 .net c# amazon-s3

通常当我上传到S3存储时,我使用这样的AmazonS3Client:

var client = Amazon.AWSClientFactory.CreateAmazonS3Client(accessKey, secretKey, s3Config)
Run Code Online (Sandbox Code Playgroud)

这适用于内部使用,但现在我正在寻找为外部用户提供应用程序,并且不希望我们(sacret)访问和秘密密钥在那里.我已经设置了一个带有存储桶策略的S3存储桶,允许匿名用户上传(PutObject),但我现在如何使用Amazon SDK?如果没有提供访问权限和密钥,我似乎无法找到任何方法.

Tom*_*sen 10

可能,您不应该为公开写入打开一个桶.您可以接受大量攻击,并且需要密切关注日志文件等.

更好的解决方案是在存储桶上保留默认的私有访问权限,然后创建一个只有上传(可能还有下载)所需区域权限的IAM用户.然后,当有人想要上传文件时,您可以使用具有IAM密钥的服务器调用并返回"预签名帖子",这将允许您的客户端应用程序将新文件发布到服务器.然后,您可以使用服务器上所需的任何身份验证工具来决定是否允许某人上传,包括不进行身份验证 - 但具有滥用检测功能.执行此操作时,IAM用户的密钥永远不会发送到客户端,客户端可能处于调试会话等.

由于整个帖子是预签名的,您还可以决定允许文件的位置,上传的文件名等,并在服务器响应中返回该文件.


Inv*_*ion 7

你只需要传递nullaccessKey,并secretKey和您可以使用SDK任何允许匿名操作.

查看我的相关问题,其中包括来自亚马逊员工的开发者论坛的官方回复!来自链接问题的相关信息:

这是来自亚马逊官方员工的论坛:

从SDK的1.3.8.0版本开始,您可以为访问密钥和密钥传递null,SDK将跳过签名过程并尝试将GetObject等操作作为公共操作.

规范

  • 哇!这似乎是一种明显而简单的方法.好的,你也问过这个问题,或者我会因为在问之前不尝试这个问题而感到尴尬.:)让我试一试. (2认同)