通常当我上传到S3存储时,我会使用像这样的AmazonS3Client:
var client = Amazon.AWSClientFactory.CreateAmazonS3Client(accessKey, secretKey, s3Config)
这适用于内部使用,但现在我正在寻找为外部用户提供应用程序,并且不希望我们(sacret)访问&秘密钥匙在那里。我已经设置了一个带有存储桶策略的S3存储桶,允许匿名用户上传(PutObject),但我现在如何使用Amazon SDK?如果没有提供访问权限和密钥,我似乎无法找到任何方法。
答案 0 :(得分:9)
你可能不应该为公开写作打开一个桶。您可以接受大量攻击,并且需要密切关注日志文件等。
更好的解决方案是保留存储桶上的默认私有访问权限,然后创建一个只有上传(可能还有下载)所需区域权限的IAM用户。然后,当有人想要上传文件时,您可以使用具有IAM密钥的服务器调用并返回“预签名帖子”,这将允许您的客户端应用程序将新文件发布到服务器。然后,您可以使用服务器上所需的任何身份验证工具来决定是否允许某人上传,包括不进行身份验证 - 但具有滥用检测功能。执行此操作时,IAM用户的密钥永远不会发送到客户端,客户端可能在调试会话中等。
由于整个帖子已预签名,您还可以决定允许文件的位置,上传的文件名等,并在服务器响应中返回该文件。
答案 1 :(得分:6)
您只需要为null
和accessKey
传递secretKey
即可,您可以将SDK用于任何匿名允许的操作。
查看此related question of mine,其中包含来自其开发者论坛的亚马逊员工的官方回复!来自链接问题的相关信息:
这是来自亚马逊官方员工的论坛:
从SDK的1.3.8.0版本开始,您可以为访问传递null 和密钥和SDK将跳过签名过程并尝试 像GetObject这样的操作作为公共操作。
范数