只允许服务器发布到AWS S3和不客户端应用程序 – 服务器代码和S3configuration

我正在开发一个允许用户上传图片的项目。

首先客户端将图像发送到服务器,然后服务器将其上传到amazons S3存储桶。

我只希望服务器有效的credentails有权上传到S3而不是客户端。

我的服务器正在将客户端图像上传到S3。

不过,我无法强制S3存储桶只允许使用正确的凭证从服务器上传。

如果我从服务器上删除AWS S3证书,服务器仍然能够将图像上传到S3,这不是预期的结果。

'use strict' const S3 = require('aws-sdk/clients/s3'); const uuid = require('uuid/v4'); if (process.env.NODE_ENV !== 'production') require('dotenv').config(); // Set credentials and region var s3 = new S3( { region: process.env.S3_REGION, accessKeyId: process.env.S3_ACCESSKEYID, secretAccessKey: process.env.S3_SECRETACCESSKEY }); function uploadImage(bufferImage) { return new Promise((resolve, reject) => { let key = `${uuid()}.png`; let params = { Bucket: process.env.S3_BUCKET, Key: key, Body: bufferImage }; console.log('uploadImage invoked'); s3.putObject(params, (err, data) => { if (err) { console.log('error', err); return reject("This error"); } return resolve(`https://s3.${process.env.S3_REGION}.amazonaws.com/${process.env.S3_BUCKET}/${key}`); }); }); } function removeImage(imageUri) { console.log(imageUri); var params = { Bucket: process.env.S3_BUCKET, Key: imageUri.replace(/^.*[\\\/]/, '') }; s3.deleteObject(params, function (err, data) { if (err) return Promise.reject(err); Promise.resolve(data); }); } module.exports = { uploadImage, removeImage }; 

以下是我的S3存储桶政策的副本:

 { "Version": "2012-10-17", "Statement": [ { "Sid": "AddPerm", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::testbucket/*" } ] } 

和CORSconfiguration:

 <?xml version="1.0" encoding="UTF-8"?> <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <CORSRule> <AllowedOrigin>*</AllowedOrigin> <AllowedMethod>GET</AllowedMethod> <AllowedMethod>POST</AllowedMethod> <AllowedMethod>PUT</AllowedMethod> <MaxAgeSeconds>3000</MaxAgeSeconds> <AllowedHeader>Authorization</AllowedHeader> </CORSRule> </CORSConfiguration> 

任何帮助实现预期的结果将不胜感激! – 只允许服务器发送图像到S3而不是客户端也允许客户端查看图像,但不能直接发送到S3。