Это не полный ответ, но это слишком долго, чтобы быть комментарием.
Я думаю, вы должны использовать API-шлюз в качестве прокси для S3, чтобы скрыть путь.Вы по-прежнему можете использовать предварительно подписанные URL-адреса, но вам может потребоваться создать предварительно подписанные URL-адреса шлюза API, а не предварительно подписанные URL-адреса S3.Я никогда не делал это сам - и я не смогу попробовать это в ближайшем будущем - но я приложу все усилия, чтобы изложить, как я думаю, что это сделано, и, возможно, кто-то еще может попробовать это и написать более полнуюответ.
Во-первых, нам нужно настроить конечную точку шлюза API, которая будет выступать в качестве прокси-сервера для S3.
У AWS очень подробное описание как сделатьобщий прокси для S3 , и я думаю, что вы можете настроить свою пользовательскую конечную точку на конкретную корзину и папку в S3, изменив PathOverride прокси.Если вы посмотрите на скриншот PathOverrides в этом разделе документации AWS, вы увидите, что они установили переопределение пути на {bucket}/{object}
, но я думаю, что вы можете установить PathOverride на mySecretBucket/my/secret/folder/{object}
,и затем соответствующим образом обновите сопоставления путей.
Далее, вы должны иметь возможность использовать предварительно подписанные URL с этим прокси.Есть два способа, которыми вы могли бы сделать это.
Первое, что может сработать, - это заставить подпись URL-адреса проходить через API-шлюз к S3.Я знаю, что можно сопоставить параметры запроса аналогично параметрам пути.Возможно, вам придется выполнить некоторую кодировку URL для параметра подписи предварительно подписанного URL-адреса, чтобы он работал - я не совсем уверен.
Другой вариант - разрешить Api Gateway всегда выполнять запись в S3 и запрашивать подписанный запрос для вызова конечной точки прокси. На этот ТАК вопрос есть довольно подробный ответ, который, как мне кажется, должен работать.
Опять же, я знаю, что это не полный ответ, и я не пытался проверить, что это работает, но, надеюсь, кто-то может начать с этого и получить полный ответ на ваш вопрос.