我想将文件上传到S3,最好不要通过后端服务器,而只能通过浏览器。
在AWS示例中,要创建S3客户端,我需要提供密钥和密钥ID:
const S3 = new AWS.S3({
accessKeyId: <ACCESS_KEY_ID>,
secretAccessKey: <ACCESS_KEY_SECRET>,
region: <AWS_REGION>
});
但是我不想公开访问密钥。该网站托管在CloudFront中,是否可以在CloudFront和S3存储桶之间设置权限,这样我就不需要在JavaScript中提供凭据了?
出于安全原因,通常应该采用某种方法来审核上传到S3的对象的来源(如果允许公共访问,那么它可以是任何东西)。
与其允许完全公共访问,不如设置AWS Cognito并在您的前端使用它可能更好。
您可以选择以下情况之一:
这两个选项都将生成可以由您的前端使用的临时凭据。这将防止用户对其进行记录并使其永久保存,确保您仅将权限锁定为仅用于特定S3存储桶的putObject。
一种替代方法是使用API网关和Lambda生成可以支持上传的预签名URL。有关此方法的更多信息,请参阅本文。
为了增强安全性,可能值得添加一个S3事件来触发Lambda,该Lambda将在对象上传后对其进行验证。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句