Вы можете сделать это, используя 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
В этом случае невозможно ограничить S3 в отношении пользователей вашего приложения (не пользователей AWS), потому что S3 не имеет представления ни о каком таком конкретном пользователе. И не ваш пользователь удаляет контент из S3, а само ваше приложение, будь то приложение на EC2 или Lambda, для которого вам нужно указать роль IAM, чтобы он действительно мог это сделать.
Никакая конфигурация IAM вам здесь не поможет, так как вы можете разрешить экземпляру EC2 / Lambda удалить его или нет. Но это тот же EC2 / Lambda, независимо от того, какой пользователь инициировал запрос.
Единственный вариант здесь - защитить его через само приложение. Сохраняйте сопоставление между пользователями и их содержимым S3 в БД и выполняет проверку уровня приложения всякий раз, когда инициируется какой-либо запрос на удаление. Если вы правильно сконфигурируете свое приложение, то единственный способ удалить контент другого человека - получить доступ к своим учетным данным (или вашей учетной записи AWS с правами администратора S3). И если кто-то может выдать себя за другого, то никакая защита, предоставляемая AWS, в любом случае не может быть полезна (возможно, кроме защиты от удаления SFA MFA, но это не применимо для таких сценариев, как этот).
Для этого нужно создать жесткие контрольные примеры для вашего приложения, учитывая эту область, чтобы минимизировать вероятность потенциальной ошибки в приложении.
Вот некоторые другие предложения / лучшие практики, чтобы снизить вероятность злонамеренного / случайного удаления.