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

Вы можете сделать это, используя groupby для группировки в интересующей колонке, а затем apply list для каждой группы:

In [1]:
# create the dataframe    
df = pd.DataFrame( {'a':['A','A','B','B','B','C'], 'b':[1,2,5,5,4,6]})
df
Out[1]:
   a  b
0  A  1
1  A  2
2  B  5
3  B  5
4  B  4
5  C  6

[6 rows x 2 columns]

In [76]:
df.groupby('a')['b'].apply(list)

Out[76]:
a
A       [1, 2]
B    [5, 5, 4]
C          [6]
Name: b, dtype: object
0
задан Dazzle 16 January 2019 в 18:53
поделиться

1 ответ

В этом случае невозможно ограничить 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. убедитесь, что только аутентифицированные пользователи могут удалять вещи
0
ответ дан Matus Dubrava 16 January 2019 в 18:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: