Анонимный читатель с амазонкой
Я хотел бы запросить Simpledb непосредственно с клиента, используя JavaScript. Мое приложение предназначено для чтения, и я скорее не направляю запрос через сервер приложений. Можно ли выполнить запрос на выборку без аутентификации?
Я мог бы настроить сервер аутентификации, но это довольно нелегко, поскольку он будет просто говорить "да" каждому запросу на чтение и вводить другое узкое место / скорость / удар / точку отказа.
Есть ли в других облачных решениях db (microsoft, google) эта функциональность?
3 ответа
Это возможно с помощью AWS IAM ( Identity and Access Management) и " автомата по продаже токенов" на стороне сервера. Документы AWS содержат статью, специально написанную для варианта использования. Аутентификация пользователей мобильных приложений AWS с помощью торгового автомата Token, а также пример кода для сервера, iOS и Android в GitHub. Общая методика может быть использована для немобильных и / или для клиентов JavaScript.
Примечание: серверный компонент все еще требуется для продажи временных токенов доступа. Тем не менее, объем этих запросов может быть значительно уменьшен (до одного раза в 36 часов). Остальные запросы поступают от ненадежного клиента к SimpleDB напрямую, без посредников.
Общая техника
- анонимный клиент вызывает ваш торговый автомат токенов (ваш сервер)
- Торговый автомат токенов знает секретный ключ, вызывает AWS для генерации временного токена
- токен создается с политикой доступа только для чтения (пример ниже)
- токен длится не более 36 часов, по умолчанию 12 часов ( api docs)
- торговый автомат возвращает токен клиенту
- клиент вызывает API SimpleDB с использованием анонимного временного токена; не может написать в SimpleDB
Политика доступа только для чтения
Из примера кода AWS " Политика доступа только для чтения"
{
"Statement": [
{
"Action": ["sdb:GetAttributes", "sdb:List*", "sdb:Select*"],
"Effect": "Allow",
"Resource": "*"
}
]
}
Это выходит за рамки SimpleDB. Вы можете установить политику доступа для нескольких других ресурсов AWS (см. Пример политики полного доступа).
Вариант для замены динамических вызовов клиент-сервер статическим ресурсом
Хотя вы не можете удалить серверный компонент, клиентам не обязательно общаться напрямую с торговым автоматом:
- запланированная работа генерирует
token
каждые N секунд, гдеN + fudge == token expiry
- работа пишет
token
в публичный сегмент S3 (или любой другой статический ресурс)- установить соответствующий заголовок maxAge cache-control на основе
fudge
- установить соответствующий заголовок maxAge cache-control на основе
- анонимный клиент читает
token
из статического URI - клиент аутентифицируется с
token
, делает вызовы SimpleDB только для чтения
Вам нужно будет подписать все запросы на вашем сервере. Я думаю, это то, что вы имеете в виду в любом случае. Вы все еще можете сэкономить пропускную способность.
Я бы сказал, как только клиент JavaScript сможет аутентифицировать себя, каждый сможет.
Требуется сервер аутентификации, для этого вы можете использовать EC2.