Моя идея заключалась в том, чтобы создать корзину S3, позволяющую пользователям загружать двоичные объекты. Следующим шагом будет подтверждение загрузки, после чего API начнет обработку файла.
Чтобы сделать его более безопасным, клиент сначала запросит место загрузки. Затем API выделяет и предварительно создает каталог одноразового использования на S3 для этой загрузки и устанавливает политику доступа к этому каталогу, чтобы разрешить в него файл, который будет выгружен (но в идеале не должен быть прочитан или даже перезаписан).
После подтверждения клиентом API начинает обработку и очистку.
Проблема, с которой я сталкиваюсь, - это аутентификация и авторизация. Простейшим было бы разрешить публичную запись с трудно угадываемыми каталогами, например
s3: // ведро / год / месяц / день / UUID / UUID / имя файла
Куда добавляется дата, чтобы позднее можно было выполнить очистку потерянных файлов (и, если требуется увеличение объема, можно добавить часы / минуты.
Первый UUID не имеет смысла, кроме предоставления уникального местоположения загрузки. Второй идентифицирует пользователя.
Весь путь создается API. Затем API предоставляет пользователю доступ для записи в этот конечный каталог. (Пользователь не должен иметь права создавать этот каталог).
Вопрос, с которым я застрял, заключается в том, что из-за поиска в Google кажется, что общедоступные записи S3-блоков считаются плохой практикой, даже ужасно.
Какая у меня альтернатива?
а) предоставить клиенту какой-нибудь токен доступа?
б) создать учетную запись IAM для каждого загрузчика (я не хочу, чтобы меня связывали с Amazon)
в) Есть ли другие варианты?
P.S А можно ли контролировать фактическое имя файла, которое клиент может использовать для создания файла из политики?