Я пытаюсь использовать заранее заданный URL, но я продолжаю получать 403 Forbidden Access Denied
, несмотря на то, что все настроено так, как я считаю.Я хочу загрузить файл непосредственно из браузера в Amazon S3.
Прежде всего, я хочу, чтобы корневая учетная запись AWS использовала putObject
.У меня нет никаких дополнительных учетных записей - я просто хочу, чтобы это работало для моей учетной записи root.Вот политика корзины:
{
"Version": "2012-10-17",
"Id": "XXXX",
"Statement": [
{
"Sid": "XXXXX",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::XXXX:root"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::XXXXX/*"
}
]
}
Это мой сервер Node.js.Здесь я просто генерирую URL и отправляю его на веб-интерфейс.Немного кода для бэкэнда:
const aws = require('aws-sdk');
aws.config.update({
region: "eu-north-1",
accessKeyId: "XXX",
secretAccessKey: "YYY"
});
const s3 = new aws.S3({ apiVersion: "2006-03-01" });
app.get('/geturl', (req,res) => {
const s3Params = {
Bucket: 'XXXXXXXXXXXXX',
Key: req.query.filename,
Expires: 500,
ContentType: req.query.type,
ACL: "public-read"
};
s3.getSignedUrl("putObject", s3Params, (err, data) => {
res.send(data);
});
})
Во внешнем интерфейсе я делаю простой вызов, используя URL с файлом, который я хочу загрузить.Когда я выполняю второй вызов извлечения, он выдаст ошибку:
async function handleUpload(e) {
const file = e.target.files[0];
const res = await fetch('http://localhost:3001/geturl');
const url = await res.text();
const resUpload = await fetch(url, { method: 'PUT', body: file });
}
Есть идеи, что я сделал не так?
Правка - Похоже, это работает, если я сниму галочку с первогофлажок - это большое дело или это всегда должно быть заблокировано в производственной среде?