Анонимный читатель с амазонкой

Я хотел бы запросить Simpledb непосредственно с клиента, используя JavaScript. Мое приложение предназначено для чтения, и я скорее не направляю запрос через сервер приложений. Можно ли выполнить запрос на выборку без аутентификации?

Я мог бы настроить сервер аутентификации, но это довольно нелегко, поскольку он будет просто говорить "да" каждому запросу на чтение и вводить другое узкое место / скорость / удар / точку отказа.

Есть ли в других облачных решениях db (microsoft, google) эта функциональность?

3 ответа

Это возможно с помощью AWS IAM ( Identity and Access Management) и " автомата по продаже токенов" на стороне сервера. Документы AWS содержат статью, специально написанную для варианта использования. Аутентификация пользователей мобильных приложений AWS с помощью торгового автомата Token, а также пример кода для сервера, iOS и Android в GitHub. Общая методика может быть использована для немобильных и / или для клиентов JavaScript.

Примечание: серверный компонент все еще требуется для продажи временных токенов доступа. Тем не менее, объем этих запросов может быть значительно уменьшен (до одного раза в 36 часов). Остальные запросы поступают от ненадежного клиента к SimpleDB напрямую, без посредников.

Общая техника

  1. анонимный клиент вызывает ваш торговый автомат токенов (ваш сервер)
  2. Торговый автомат токенов знает секретный ключ, вызывает AWS для генерации временного токена
  3. торговый автомат возвращает токен клиенту
  4. клиент вызывает API SimpleDB с использованием анонимного временного токена; не может написать в SimpleDB

Политика доступа только для чтения

Из примера кода AWS " Политика доступа только для чтения"

{
  "Statement": [
    {
      "Action": ["sdb:GetAttributes", "sdb:List*", "sdb:Select*"],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}

Это выходит за рамки SimpleDB. Вы можете установить политику доступа для нескольких других ресурсов AWS (см. Пример политики полного доступа).

Вариант для замены динамических вызовов клиент-сервер статическим ресурсом

Хотя вы не можете удалить серверный компонент, клиентам не обязательно общаться напрямую с торговым автоматом:

  1. запланированная работа генерирует token каждые N секунд, где N + fudge == token expiry
  2. работа пишет token в публичный сегмент S3 (или любой другой статический ресурс)
    • установить соответствующий заголовок maxAge cache-control на основе fudge
  3. анонимный клиент читает token из статического URI
  4. клиент аутентифицируется с token, делает вызовы SimpleDB только для чтения

Вам нужно будет подписать все запросы на вашем сервере. Я думаю, это то, что вы имеете в виду в любом случае. Вы все еще можете сэкономить пропускную способность.

Я бы сказал, как только клиент JavaScript сможет аутентифицировать себя, каждый сможет.

Требуется сервер аутентификации, для этого вы можете использовать EC2.

Другие вопросы по тегам