通常当我上传到 S3 存储时,我使用这样的 AmazonS3Client:
var client = Amazon.AWSClientFactory.CreateAmazonS3Client(accessKey, secretKey, s3Config)
这对于内部使用来说效果很好,但现在我正在考虑为外部用户提供一个应用程序,并且不希望我们的( secret )访问和 secret key 在那里。我已经设置了一个 S3 存储桶,其存储桶策略允许匿名用户上传 (PutObject),但我现在该如何使用 Amazon SDK?如果不提供访问权限和 key ,我似乎找不到任何方法。
最佳答案
您可能不应该为公共(public)写入打开一个存储桶。您容易受到大量攻击,需要密切关注您的日志文件等。
更好的解决方案是保留对存储桶的默认私有(private)访问权限,然后创建一个 IAM 用户,该用户仅具有所需区域的上传(可能还有下载)权限。然后,当有人想要上传文件时,您可以使用对具有 IAM key 的服务器的调用来计算并返回“预签名帖子”,这将允许您的客户端应用程序将新文件发布到服务器。然后,您可以在服务器上使用您想要的任何身份验证工具来决定是否允许某人上传,包括不进行身份验证 - 但要进行滥用检测。当您执行此操作时,IAM 用户的 key 永远不会发送到客户端,客户端可能处于调试 session 等状态。
由于整个帖子都是预签名的,您还可以决定文件的位置、上传的文件名等,并在服务器响应中返回。
关于c# - 在没有访问权限和 key 的情况下上传到 Amazon S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9278437/