AWS S3 публичный хостинг json filie с ограниченным доступом - PullRequest
0 голосов
/ 05 февраля 2019

Итак, я пытался разместить несколько .json файлов в моих s3 корзинах, которые можно извлечь с помощью простых GET запросов.

Я следовал этому руководству aws и удалось разместить некоторые файлы, которые могут быть доступны общественности.Прямо сейчас я могу просто напечатать что-то вроде этого в адресной строке браузера и получить свой файл json:

https://s3.amazonaws.com/[my-bucket-name]/[my-file-name].json

, или я также могу сделать это в консоли:

curl -X GET https://s3.amazonaws.com/[my-bucket-name]/[my-file-name].json


Что я хочу сделать сейчас, так это добавить очень простую защиту в мое хранилище файлов: я хочу разрешить доступ, только если запрос содержит определенный ключ API в заголовке.На данный момент мне нужен только один тип API-ключа, в котором все пользователи используют один и тот же точный API-ключ, и любой, у кого есть этот ключ, должен иметь доступ к любому файлу в корзине.

Что-то вроде этой команды curl:

 curl -X GET --header "X-ApiKey: wow-such-secret" https://s3.amazonaws.com/[my-bucket-name]/[my-file-name].json

Мне интересно, возможно ли это только с S3.Если мне нужно использовать другие сервисы Amazon, на какие сервисы мне следует обратить внимание?

Моя политика корзины (я в основном скопирован из учебника aws):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::[my-bucket-name]/*"
        }
    ]
}

Также у меня есть ~10 часов AWS и ~ 1 месяц опыта разработки серверов.

1 Ответ

0 голосов
/ 05 февраля 2019

Вы можете использовать AWS API GATEWAY вместе с лямбда-функцией для достижения вашей цели

Используйте API-шлюз для вызовов покоя, который будет содержать ваш заголовок в запросе, API-шлюз уже имеет такую ​​реализацию в своих Планы использования с ключами API , это позволит вам создать свой собственный ключ API , который будет передан в запросе, убедившись, что разрешен только запрос с вашим заголовком.

Затем вы можете подключить лямбда-функцию к конечной точке вашего шлюза API.Лямбда-функция может дать подписанный URL-адрес для вашего ресурса S3 или вернуть данные json из корзины, но это зависит от ваших предпочтений.

У вас есть два решения и их потоки:

Подписанный URL-адресрешение:

(запрос с вашим заголовком) <-> (API GateWay) <-> (лямбда) - [генерирует подписанный URL] другой запрос, чтобы получить файл в корзину.(клиент) + (подписанный URL) <-> s3Bucket

Без подписанного URL: функция Lambda прочитает / получит файл для вас.(запрос с вашим заголовком) <-> (API GateWay) <-> (лямбда) <-> S3

ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ Установите разрешения для аутентифицированного чтения только на вашем S3Bucket.

Если вы храните только данные JSON-файлов в своем хранилище, я предлагаю использовать dynamodb , так как он уже оптимизирован для хранения данных JSON.

...