Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在没有访问权限的情况下上载到Amazon S3&;密钥_C#_.net_Amazon S3 - Fatal编程技术网

C# 在没有访问权限的情况下上载到Amazon S3&;密钥

C# 在没有访问权限的情况下上载到Amazon S3&;密钥,c#,.net,amazon-s3,C#,.net,Amazon S3,通常,当我上传到S3存储时,我使用AmazonS3Client,如下所示: var client = Amazon.AWSClientFactory.CreateAmazonS3Client(accessKey, secretKey, s3Config) 这对内部使用很好,但现在我正在考虑向外部用户提供一个应用程序,不希望我们的(sacret)访问和密钥出现在那里。我已经设置了一个S3 bucket,其中有一个bucket策略,允许匿名用户上传(PutObject),但是现在我该如何使用Ama

通常,当我上传到S3存储时,我使用AmazonS3Client,如下所示:

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

这对内部使用很好,但现在我正在考虑向外部用户提供一个应用程序,不希望我们的(sacret)访问和密钥出现在那里。我已经设置了一个S3 bucket,其中有一个bucket策略,允许匿名用户上传(PutObject),但是现在我该如何使用AmazonSDK呢?如果不提供访问和密钥,我似乎找不到任何方法。

您只需为
accessKey
secretKey
传递
null
,就可以使用SDK进行任何匿名允许的操作

看看这个,它包括一个来自亚马逊员工开发者论坛的官方回复!相关问题的相关信息:

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

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

标准


很可能,你不应该为公开写作打开一个存储桶。你会受到很多攻击,需要密切关注你的日志文件等

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


因为整个帖子都是预签名的,所以您还可以决定文件可以放在哪里,上传的文件名等等,并在服务器响应中返回

哇!这似乎是一个显而易见的简单方法。幸好你也问了这个问题,否则我会因为在问之前没有试过而感到尴尬。:)“让我试试看。”蓝色巫毒呵呵,很高兴能帮上两次忙!无论是问还是答!我有点惊讶,他们没有提供只需要s3Config的构造函数,而不需要指定
accessKey
secretKey
。。。我觉得这样会更直观!嗯。我在尝试初始化我的多部分上传时遇到了ArgumentNullException。原因:“指定的AWS秘密访问密钥为空!”。代码如下所示:InitiateMultipartUploadResponse initResponse=s3Client.InitiateMultipartUpload(initRequest);是的,我不知道我已经过时了。已更新至最新版本,并且可以看到许多新功能。我陷入了另一个问题“匿名用户无法启动多部分上传”,但这是一个separae问题,我想我可以通过在服务器端启动来解决它。谢谢你的帮助。我知道我已经迟到了,但是有没有办法用awscli达到同样的效果呢?我试图传递NULL,将它们保留为空,但没有成功。这篇文章应该是正确的,因为它提供了一个功能性、安全性和智能性的解决方案。