Как получить доступ к объекту S3 Bucket в облачном фронте лямбда @ Edge Function? - PullRequest
0 голосов
/ 08 января 2019

У меня есть лямбда-функция, которая связана с моим дистрибутивом облачного фронта.

Я хочу получить доступ к некоторым объектам S3 Bucket в этой функции egde @ lambda. Я не нашел способа сделать это и не знаю, как лучше всего это сделать, и у меня минимальная задержка.

Я не хочу получать доступ к объектам корзины, используя http-вызовы к корзине, потому что это приведет к некоторой задержке ответа облачного фронта.

Кто-нибудь знает, как я могу получить доступ к своему S3 Bucket, связанному с моим распределением облачного фронта в функции пограничной лямбды?

Большое спасибо.

1 Ответ

0 голосов
/ 08 января 2019

Вам необходимо предоставить разрешения для роли 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)
  })
}
...