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

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

var client = Amazon.AWSClientFactory.CreateAmazonS3Client(accessKey, secretKey, s3Config) 

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

您只需要为accessKeysecretKey传递null ,并且可以将SDK用于任何匿名允许的操作。

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

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

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

规范

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

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

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