c# - 在没有访问权限和 key 的情况下上传到 Amazon S3

标签 c# .net amazon-s3

通常当我上传到 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/

相关文章:

javascript - 使用 CloudFront 和 Amazon S3 或其他 CDN,我可以将所有类似请求发送到一个静态文件吗?

c# - 检查 list1 内容是否与 list2 内容匹配

c# - 使用 .NET 定期在目录中查找更改的文件

node.js - 使用 Node 模块搜索 s3 存储桶中的对象

c# - 使用 WebRequest.RegisterPrefix 模拟 HttpWebResponse/responder

.net - 为什么要查询组合容器?

javascript - Node S3 正在向我发送回具有相似前缀的所有对象

c# - 通知 ViewModel 静态模型的变化

c# - 限制对某些 .aspx 页面的访问

c# - double.Parse(123.342) System.FormatException : 'Input string was not in a correct format.'