Вам необходимо предоставить разрешения для роли IAM, связанной с вашей лямбдой. От Документы AWS :
Каждая лямбда-функция имеет роль IAM (роль выполнения), связанную с
Это. Вы задаете роль IAM при создании своей функции Lambda.
Разрешения, которые вы предоставляете этой роли, определяют, что может делать AWS Lambda.
когда он берет на себя роль.
Для чтения и записи сегмента S3 из лямбды вам нужно будет прикрепить политику IAM к роли IAM, связанной с вашей лямбдой. От Документы AWS :
Вы управляете доступом в AWS, создавая политики и прикрепляя их к
Идентификационные данные IAM (пользователи, группы пользователей или роли) или ресурсы AWS.
Политика - это объект в AWS, который, когда связан с идентификатором или
ресурс, определяет их разрешения. AWS оценивает эти политики, когда
основной объект (пользователь или роль) делает запрос. Разрешения в
Политики определяют, разрешен ли запрос или отклонен. Наиболее
политики хранятся в AWS как документы JSON. AWS поддерживает шесть типов
политик: политики на основе идентичности, политики на основе ресурсов,
границы разрешений, SCP организаций, ACL и сеанс
политика.
Используйте эту политику IAM для предоставления доступа к роли IAM, связанной с вашей лямбдой:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowS3Access",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<account>:role/service-role/LAMBDA_ROLE_NAME"
},
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::<bucket-name>",
"arn:aws:s3:::<bucket-name>/*"
]
}
]
}
OBS : <account>
и <bucket-name>
необходимо заменить правильными значениями.
После этого должен работать следующий код:
import aws from 'aws-sdk'
export default (event, context, callback) => {
const s3 = new aws.S3()
s3.getObject({
Bucket: 'name-of-bucket',
Key: 'my-key'
}, (err, data) => {
if (err) {
callback(err)
return
}
const objectData = data.Body.toString('utf-8')
console.log(objectData)
})
}