Мультиарендность с AWS Timestream и Appsync
Мы планируем мультитенантное приложение с использованием базы данных AWS Timestream. К сожалению, база данных не поддерживает политику на основе ресурсов . Чтобы получить изоляцию, нам нужно каким-то образом проксировать запрос через лямбда-функцию, где мы можем управлять запросом (см. Ниже). Мы заложили это в API Appsync. В конечном итоге мы хотим запускать запросы из пользовательского интерфейса пользователем, который связан с определенным клиентом.
Пользователь -> Webapp -> Appsync -> Lambda -> Timestream
Запрос должен иметь определенное условие, например:
SELECT * FROM <database>.<table> WHERE tenantId = <tenantId>
В идеале мы могли бы смоделировать запрос в Webapp и отправить его на бэкэнд. Но поскольку нам нужно защищаться от атак с использованием sql-инъекций, мне интересно, есть ли возможность (например, глобальная область видимости sql или правильная проверка и т. Д.) Совершать вызовы в базу данных безопасным (изолированным) способом?
В противном случае нам пришлось бы моделировать каждый запрос на бэкэнде или указывать некоторые параметры запроса в качестве входных данных для фиксированного запроса на бэкэнде. Это выполнимо, но не так гибко, как хотелось бы.
1 ответ
@pfried Что насчет того, что у каждого арендатора есть собственная таблица Timestream, тогда разным арендаторам могут быть назначены разные роли выполнения IAM, чтобы гарантировать, что они могут получить доступ только к своей собственной таблице. Получив этот уровень защиты, вы можете смоделировать запрос в клиентском веб-приложении, не беспокоясь о доступе к данным между клиентами.
Примечания:
- Максимальное количество таблиц для Timestream — 50 000 на аккаунт AWS.
- У каждого арендатора может быть своя база данных, при этом максимальное количество баз данных для Timestream составляет 500 на одну учетную запись AWS.
См. сервисные квоты по адресу: https://docs.aws.amazon.com/general/latest/gr/timestream.html .