Это неполный ответ, но он слишком длинный, чтобы быть комментарием.
Я думаю, вы сможете использовать API Gateway в качестве прокси для 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 и потребовать подписанный запрос для вызова вашей конечной точки прокси. На этот вопрос SO есть довольно подробный ответ, который выглядит мне вроде должно работать.
Опять же, я знаю, что это неполный ответ, и я не пытался проверить, работает ли это, но, надеюсь, кто-нибудь сможет начать с этого и получить полный ответ на ваш вопрос.
person
Matthew Pope
schedule
03.03.2019