У меня есть лямбда-функция со следующей политикой
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::my-bucket"
],
"Effect": "Allow"
},
{
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::my-bucket/*"
],
"Effect": "Allow"
}
]
}
Я звоню listObjectsV2
без проблем, но когда я хочу позвонить upload
метод у меня есть ERROR AccessDenied: Access Denied
Это мой код
const addImage = (name, image) => {
name = `${Image.getPrefix()}/${name}.${crypto.randomBytes(3).toString('hex')}.${image.originalname.split('.').pop()}`;
return s3.upload({
Bucket: process.env.S3_BUCKET_IMAGE,
ACL: 'public-read',
Body: image.buffer,
Key: name
}).promise()
.then(result => new Image(result))
}
Я нашел решение
Используя лямбда, вы также должны добавить политику в ведро
https://aws.amazon.com/fr/premiumsupport/knowledge-center/access-denied-lambda-s3-bucket/
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountA:role/AccountARole"
},
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::AccountBBucketName/*"
]
}
]
}