Вам необходимо предоставить разрешения для роли IAM, связанной с вашей лямбдой. Из документы AWS < / а>:
Каждая лямбда-функция имеет связанную с ней роль IAM (роль исполнения). Вы указываете роль IAM при создании своей лямбда-функции. Разрешения, которые вы предоставляете этой роли, определяют, что AWS Lambda может делать, когда принимает на себя эту роль.
Чтобы читать и записывать сегмент S3 из лямбда-выражения, вам необходимо присоединить политику IAM к роли IAM, связанной с вашей лямбда-функцией. Из документов AWS:
Вы управляете доступом в AWS, создавая политики и прикрепляя их к идентификаторам IAM (пользователям, группам пользователей или ролям) или ресурсам AWS. Политика - это объект в AWS, который при связывании с удостоверением или ресурсом определяет их разрешения. AWS оценивает эти политики, когда основной объект (пользователь или роль) делает запрос. Разрешения в политиках определяют, разрешен или запрещен запрос. Большинство политик хранятся в AWS в виде документов JSON. AWS поддерживает шесть типов политик: политики на основе идентификаторов, политики на основе ресурсов, границы разрешений, SCP организаций, списки контроля доступа и политики сеансов.
Используйте эту политику 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)
})
}
person
celicoo
schedule
08.01.2019