Разрешение доступа к файлу AWS S3 Bucket Access

Я не эксперт AWS, поэтому мне нужна помощь в настройке политик доступа к аудиофайлу S3 Bucket. Быстрое объяснение: Я пытаюсь вызвать лямбда-функцию и получить доступ к аудиофайлу из ведра S3 с частным доступом. Моя лямбда-функция (та же учетная запись aws) должна иметь доступ к mp3-файлу через его URI.

Подробности: Я разрабатываю Alexa Skill в .NET, размещенном на AWS Lambda. Этот навык должен воспроизводить звук, который будет извлечен из корзины S3. Единственный способ воспроизвести аудио — оставить mp3-файл доступным для всех (разрешить общий доступ), но я хочу ограничить доступ только для моей лямбда-функции (та же учетная запись aws). Другими словами: я не хочу, чтобы кто-либо мог получить доступ к этим файлам, только моя лямбда-функция. Всякий раз, когда я настраиваю политику доступа, навык alexa больше не обращается к файлу и возвращает: «Не удалось установить соединение с предоставленным URI аудиофайла».

Я пытался:

  1. Создание роли в консоли управления IAM
  2. Создание встроенной политики и присоединение всего списка S3 и разрешений на чтение для любого ресурса
  3. Настройка созданной роли на мою роль выполнения лямбда-функции

Но это не работает.

Кто знает как его правильно настроить?

Ссылка:lambda-execution-role-s3-bucket

Вы пытаетесь прочитать аудиофайл в Lambda или передать ссылку Alexa, чтобы он воспроизвел его на устройстве? Если вы передаете ссылку, вероятно, вам нужно передать предварительно подписанный URL-адрес, чтобы устройство могло получить доступ к данным.

Anon Coward 24.11.2022 06:47

эй @AnonCoward, я передаю ссылку для игры Alexa, я получил ссылку из сеанса Object Link в ведре: https://my-bucket.s3.sa-east-1.amazonaws.com/my-audio.mp3 Я попытаюсь найти, как получить предварительно подписанную ссылку. Большое спасибо! :D

Felipe Bergmann 24.11.2022 12:09
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
60
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам следует создать роль IAM и связать эту роль IAM с функцией AWS Lambda.

Роль IAM должна иметь следующие разрешения:

  • Управляемая политика AWSLambdaBasicExecutionRole, которая разрешает функции Lambda отправлять журналы в журналы CloudWatch (см. Роль выполнения Lambda — AWS Lambda)
  • Политика, которая разрешает функции Lambda доступ к корзине Amazon S3, например:
{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action":"s3:ListBucket",
         "Resource":"arn:aws:s3:::BUCKET-NAME"
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:PutObject",
            "s3:PutObjectAcl",
            "s3:GetObject",
            "s3:GetObjectAcl",
            "s3:DeleteObject"
         ],
         "Resource":"arn:aws:s3:::BUCKET-NAME/*"
      }
   ]
}

Эта политика дает функции Lambda разрешение отображать содержимое корзины, а также загружать/загружать/удалять объекты из корзины.

Если вы просто хотите, чтобы функция Lambda читала файлы в корзине, вы можете уменьшить ее до:

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action":"s3:GetObject"
         "Resource":"arn:aws:s3:::BUCKET-NAME/*"
      }
   ]
}

Эй, у меня есть аналогичная конфигурация, которая не работает: Роль: { "Версия": "2012-10-17", "Утверждение": [ { "Sid": "VisualEditor0", "Эффект": "Разрешить", " Действие": "s3:GetObject", "Resource": [ "arn:aws:s3:::my-bucket", "arn:aws:s3:::*/*" ] } ] }

Felipe Bergmann 24.11.2022 12:06

Если вы хотите предоставить доступ к любому сегменту, просто используйте: "Resource": "*"

John Rotenstein 24.11.2022 12:14
Ответ принят как подходящий

То, что предложил @Anon Coward, сработало отлично!

Вы пытаетесь прочитать аудиофайл в Lambda или передаете ссылку на Alexa для воспроизведения на устройстве? Если вы передаете ссылку, вероятно, вам нужно передать предварительно подписанный URL-адрес, чтобы устройство могло получить доступ к данным. – Анон Трус 24 ноя в 5:47

Я не понимал, что когда я предоставляю Alexa URI через REST API, он не будет разрешен в моей собственной функции. По этой причине у Alexa не было доступа ни к одному файлу. Спасибо вам всем!

Другие вопросы по теме