Копирование файла корзины S3 во вторичную корзину? - PullRequest
0 голосов
/ 17 марта 2019

Проблема: Мой доступ запрещен при запуске следующего лямбда-кода AWS:

require 'json'
require "aws-sdk-s3"

def lambda_handler(event:, context:)
    client = Aws::S3::Client.new(region: 'us-east-2')

    record = event["Records"][0]
    key = record.dig *%w(s3 object key)

    client.copy_object({
      bucket: "bucket-name", 
      copy_source: "#{key}", 
      key: "#{key}", 
    })

end

Ошибка:

"errorType": "Function<Aws::S3::Errors::AccessDenied>",

Моя роль IAM:

  • AmazonS3FullAccess: управляемая политика AWS

  • AWSLambdaBasicExecutionRole-e41b74ba-3cef-4470-8f1c-3f900591016c: управляемая политика

  • AWSConfigRulesExecutionRole

Разве это не должно быть хорошо?

Цель лямбды - брать загруженные файлыв ведро и скопируйте их в другое ведро.

Ответы [ 3 ]

0 голосов
/ 17 марта 2019
require 'json'
require "aws-sdk-s3"

def lambda_handler(event:, context:)
    client = Aws::S3::Client.new(region: 'us-east-2')

    record = event["Records"][0]
    key = record.dig *%w(s3 object key)

    client.copy_object({
      bucket: "bucket-name", 
      copy_source: "#{key}", 
      key: "#{key}", 
    })

end

Должно быть:

require 'json'
require "aws-sdk-s3"

    def lambda_handler(event:, context:)
        client = Aws::S3::Client.new(region: 'us-east-2')

        record = event["Records"][0]
        key = record.dig *%w(s3 object key)

        client.copy_object({
          bucket: "bucket-name", 
          copy_source: "/bucketname/#{key}", 
          key: "#{key}", 
        })

    end

Необходимо указать источник, который является именем корзины / имени файла

0 голосов
/ 18 марта 2019

Команда copy_object() требует:

  • Исходное ведро
  • Ключ источника
  • Целевое ведро
  • Ключ назначения

Ваш код ссылается только на одно имя группы и использует тот же ключ.

Документация показывает:

resp = client.copy_object({
  bucket: "destinationbucket", 
  copy_source: "/sourcebucket/HappyFace.jpg", 
  key: "HappyFaceCopyjpg", 
})

Вы заметите, что copy_source включает в себя имя корзины источника.

0 голосов
/ 17 марта 2019

Поскольку код запускается в AWS Lambda, ваши полномочия роли IAM не влияют на выполнение кода. Вместо этого для выполнения роли Lambda требуется разрешение S3.

Вам необходимо создать новую роль с необходимыми разрешениями и обновить роль выполнения Lambda до вновь созданной роли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...