Arhn - архитектура программирования

Безопасный доступ напрямую из веб-приложения к amazon s3?

Согласно моему обзору того, как настроить безопасный доступ к корзинам amazon s3, похоже, что мы сначала создаем пользователя IAM, а затем привязываем политику безопасности, разрешающую доступ s3 к этому пользователю. После этого мы можем сгенерировать ключи API для корзины, которые могут аутентифицировать запрос на доступ к корзине. Это мое понимание на данный момент, пожалуйста, поправьте меня, если я что-то пропустил.

Я предполагаю, что ключи API должны быть только на стороне сервера (Secret Access Key). Другими словами, небезопасно размещать их непосредственно внутри веб-приложения? Следовательно, нам сначала нужно отправить данные на наш сервер, а затем, уже там, мы можем отправить их в корзину с помощью ключа API?

Есть ли способ защитить доступ непосредственно из веб-приложения к корзине amazon s3?

Резюме подхода

Согласно обсуждению с @CaesarKabalan, похоже, что подход, который позволил бы это сделать, таков:

1) Создайте пользователя IAM, который может создавать удостоверения, которые можно аутентифицировать через Amazon Cognito. Давайте назовем учетные данные, назначенные на этом шаге, Cognito Credentials.

2) Пользователь входит в веб-приложение, например, с помощью Google.

3) Веб-приложение отправляет запрос на сервер веб-приложения (может быть лямбда-функция) для регистрации пользователя в Amazon Cognito.

4) Теперь веб-приложение получает учетные данные пользователя непосредственно из Amazon Cognito и использует их для отправки данных в корзину s3.

Я думаю, что это то, где мы находимся концептуально. Теперь пришло время протестировать!


  • К сведению: вот действительно хорошая статья на эту тему: sanderknape.com/2017/08/ 16.04.2018

Ответы:


1

Из вашего вопроса я не уверен, какие части вашего приложения находятся в AWS и в ваших политиках безопасности, но в основном у вас есть три варианта:

  1. (Плохо) Храните ключи на клиенте. В зависимости от масштаба вашего развертывания это может быть нормально. Например, если у каждого клиента есть собственный выделенный пользователь и корзина, вероятно, нет большого риска, особенно если это для частной организации, где вы контролируете все аспекты доступа. Это самый простой, но менее безопасный способ. Вы не должны использовать это, если ваше приложение является мультитенантным. Наверное, двигаться дальше...
  2. (Отлично) Используйте конечную точку API, чтобы переместить эти данные в корзину. Для этого потребуется какая-то инфраструктура для безопасного получения файла от клиента, а затем его перемещения в S3 с ключами безопасности, хранящимися локально. Это было бы похоже на традиционное веб-приложение, выполняющее ввод-вывод в базу данных. Все данные в S3 проходят через этот уровень вашего приложения. Недостатки в том, что вам нужно написать эту услугу, разместить ее и оплатить пропускную способность.
  3. (Лучше всего) Используйте Amazon Cognito, чтобы назначить каждому приложению/пользователю собственный ключ доступа. Я не делал этого лично, но насколько я понимаю, вы можете предоставить каждой сущности свои собственные краткосрочные учетные данные для доступа, которые можно обновить, и вы можете предоставить им доступ для записи данных прямо в S3. Трудной частью здесь будет структурирование ваших корзин S3 и правильное проектирование учетных данных IAM для пользователей вашего приложения, чтобы ТОЛЬКО они могли делать именно то, что вы хотите. Преимущество здесь в том, что пользователи пишут напрямую в корзину S3, вы используете все нативные сервисы AWS и пишете очень мало пользовательского кода. Это я бы назвал лучшим, наиболее безопасным решением корпоративного класса. Вот пример: Amazon S3: разрешает пользователям Amazon Cognito доступ Объекты в корзине

С удовольствием отвечу на дополнительные вопросы или поясню.

07.04.2018
  • Спасибо! В документации amazon cognito говорится, что мы можем настроить его для мобильного приложения. Будет ли это также работать для одностраничного приложения. Например, предположим, что пользователи входят в систему с помощью Google в качестве поставщика удостоверений. Может ли этот пользователь теперь запросить дополнительные учетные данные у amazon cognito и использовать эти учетные данные для загрузки файла непосредственно в s3? 07.04.2018
  • Таким образом, кажется, что это может работать следующим образом: если пользователь входит в систему, скажем, через google, после того, как этот пользователь вошел в систему, сервер может сделать запрос на настройку этого пользователя как пользователя, которому разрешено загружать файлы в корзину, и как только это будет сделано, учетные данные пользователя для входа в систему с открытым идентификатором google можно использовать для отправки данных непосредственно в amazon? Однако документация Amazon для этого немного непрозрачна ...? 07.04.2018
  • Да, похоже, Amazon уже разработал некоторый собственный код, чтобы помочь с мобильными разработчиками. Это ссылка, в которой говорится об использовании Javascript: aws.amazon.com/blogs/mobile/ 07.04.2018
  • А-а, похоже, что-то очень новаторское, но выполнимое! Спасибо! 07.04.2018
  • Я не уверен на 100 %, поскольку не выполнял федерацию удостоверений с Amazon Cognito. Однако, насколько я понимаю, в конце дня ваша веб-страница должна будет хранить в памяти временные ключи API для этого пользователя. Ваш Javascript или что-то еще будет извлекать учетные данные AWS API из Amazon Cognito, а затем использовать их для вызовов AWS API (загрузка s3) в будущем. 07.04.2018
  • Действительно, это звучит так: 1) Пользователь проходит аутентификацию в Google 2) Веб-приложение отправляет серверу запрос на регистрацию пользователя в Amazon Cognito, используя секретные учетные данные для доступа к Amazon, хранящемуся на сервере 3) После этого веб-приложение отправляет запрос на временное учетные данные s3 от amazon cognito и 4) загружает файлы. 07.04.2018
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..