Как я могу *** безопасно *** позволить пользователю удалить свой ресурс на AWS S3? - PullRequest
0 голосов
/ 16 января 2019

Я задал этот вопрос 3 месяца назад, но я все еще ищу ответ

Я получаю промежуточное ПО на стороне клиента - но мне не нужна ситуация, когда пользователь случайно или злонамеренно удаляет ресурсы других пользователей.

Как я могу защитить ресурсы на S3, чтобы пользователь мог удалять только свои ресурсы, а не ресурсы любого другого пользователя?

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

1 Ответ

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

В этом случае невозможно ограничить S3 в отношении пользователей вашего приложения (не пользователей AWS), потому что S3 не имеет представления ни о каком таком конкретном пользователе. И не ваш пользователь удаляет контент из S3, а само ваше приложение, будь то приложение на EC2 или Lambda, для которого вам нужно указать роль IAM, чтобы он мог это сделать.

Никакая конфигурация IAM вам здесь не поможет, так как вы можете либо разрешить экземпляру EC2 / Lambda удалить его, либо нет. Но это тот же EC2 / Lambda, независимо от того, какой пользователь инициировал запрос.

Единственный вариант здесь - защитить его через само приложение. Сохраняйте сопоставление между пользователями и их содержимым S3 в БД и выполняет проверку уровня приложения всякий раз, когда инициируется любой запрос на удаление. Если вы правильно сконфигурируете свое приложение, то единственный способ удалить контент другого человека - получить доступ к своим учетным данным (или вашей учетной записи AWS с правами администратора S3). И если кто-то может выдать себя за другого, то никакая защита, предоставляемая AWS, в любом случае не может быть полезна (возможно, кроме защиты от удаления SFA MFA, но это не применимо для таких сценариев).

Способ состоит в том, чтобы создать жесткие тестовые примеры для вашего приложения с учетом этой области, чтобы минимизировать вероятность потенциальной ошибки в приложении.

Вот некоторые другие предложения / рекомендации, чтобы снизить вероятность злонамеренного / случайного удаления.

  1. использовать отдельные экземпляры для вашего веб-сервера и сервера БД.
  2. Поместить БД в частную подсеть и разрешить только исходящее соединение с Интернет через экземпляр / шлюз NAT
  3. разрешить входящее соединение только из группы безопасности, связанной с вашим веб-сервером (возможно, SSH-соединение для административных целей, если вы не используете управляемую БД AWS - но только с определенного IP-адреса)
  4. хранит только хэши паролей ваших пользователей в БД
  5. разрешить управление версиями в вашей корзине S3 , таким образом, даже если объект в S3 удален (delete-marker создается как самая последняя версия объекта), вы всегда можете восстановить его при необходимости
  6. убедитесь, что только аутентифицированные пользователи могут удалять вещи
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...