Мультитенантный сайт с высокими требованиями к безопасности - возможные конфигурации?

Мы строим мультитенантную систему для сотен, а не тысяч отдельных арендаторов, с высокими требованиями к безопасности данных. На данный момент в планах:

  • Изолированные базы данных (по одной на арендатора)
  • Веб-сайт и пул приложений (по одному на каждого клиента), работающие под уникальным идентификатором, который является единственным идентификатором, имеющим доступ к соответствующей базе данных.
  • Отдельная структура физических каталогов для каждого арендатора

Очевидно, что развертывание обновлений должно быть полностью автоматизировано, чтобы быть в курсе всего этого, возможно, с использованием сценариев MS Deploy + PowerShell и развертывания по одному клиенту за раз.

Идя по этому пути, мы создаем кошмар обслуживания? Существуют ли другие возможные конфигурации, которые мы должны оценить в этом сценарии, которые могли бы минимизировать наши административные издержки без ущерба для аспекта безопасности?

Спасибо!


person James Crowley    schedule 12.01.2012    source источник
comment
Это не мультитенантный сайт, если это отдельные сайты.   -  person StingyJack    schedule 12.01.2012
comment
@StingyJack - это тот же продукт / сайт. Таким образом, потенциально мы могли бы хранить их как единую физическую файловую систему и единый веб-сайт на сервере, но с изолированными базами данных. Но - наличие отдельного пространства памяти и идентификации пользователя - потенциально дает нам дополнительную безопасность. И, возможно, наличие одной и той же физической файловой системы, но нескольких баз данных может стать проблемой при развертывании обновлений? Отсюда вопрос!   -  person James Crowley    schedule 12.01.2012
comment
Как требования безопасности соотносятся с мультитенантностью? Что вам нужно, кроме того, что для каждой пары арендаторов, Алисы и Чака, Чак не может получить информацию, повлиять на изменения или запретить доступ к данным Алисы исключительно путем использования / злоупотребления приложением Чака?   -  person Mike Samuel    schedule 12.01.2012
comment
@MikeSamuel, они этого не делают. Я больше пытался предоставить некоторый ограниченный контекст относительно того, почему мы, вероятно, будем сидеть на полностью отдельном конце веб-сайта / базы данных, а не на стороне общего интерфейса базы данных / отдельного веб-сайта. Требование безопасности просто ограничивает доступ к данным - я бы сказал, что в нашей области существует ограниченный риск / потребность в злоупотреблении другими арендаторами с целью запретить им доступ.   -  person James Crowley    schedule 12.01.2012
comment
mike / stingy - очень рад перефразировать вопрос, если вы думаете, что я могу его прояснить!   -  person James Crowley    schedule 12.01.2012


Ответы (3)


То, что вы описываете, действительно было бы очень безопасным способом делать что-то, но похоже, что это повлечет за собой много накладных расходов. Одна вещь, которую следует учитывать, - это то, как поступать с логинами. Обязательно ли каждый пользователь указывать TenantId, UserName и Password? Или вы, возможно, собирались назначить каждому арендатору уникальный субдомен?

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

Исключением из этого правила, конечно же, являются такие сайты, как Google и Facebook, у которых слишком много пользователей и слишком много данных для традиционных реляционных баз данных. Но я считаю, что для 95% + сайтов эта модель может работать.

Что касается безопасности, вы можете добавить TenantId в каждую таблицу в своей базе данных и фильтровать по нему каждый запрос. Да, это нетривиально, но и процедуры обслуживания, которые вы описываете, также не описываются.

person dana    schedule 13.01.2012
comment
Спасибо, Дана, я очень хорошо понимаю, что здесь администраторские накладные расходы ... Думаю, я как бы надеюсь, что кто-то еще, кто это сделал, придет и скажет, что они заставили это работать хорошо! Наличие системы, которая по своей сути является более безопасной, ценно для нашей клиентской базы, поскольку мы выступаем против местного программного обеспечения для настольных компьютеров, где вероятность утечки внешних данных гораздо меньше. Что касается входа в систему, то да - наиболее вероятным сценарием будет количество субдоменов на каждого арендатора и SSL с подстановочными знаками. - person James Crowley; 14.01.2012
comment
Основное беспокойство вызывает развертывание развертываний, что, очевидно, требует высокой степени уверенности в нашей автоматизации. Но можем ли мы выполнить развертывание сразу для всех баз данных и обновить структуру единой файловой системы? или прокручивать по одному, чтобы мы могли пропустить арендаторов, если есть какие-то проблемы? Любые мысли приветствуются! - person James Crowley; 14.01.2012
comment
Компания, в которой я работаю, начала создавать приложения описанным вами образом, где каждый клиент получает свой собственный веб-сайт, базу данных и URL-адрес. Мы решили, что вместо того, чтобы идти по пути создания обширных сценариев развертывания, мы изменили приложения для поддержки нескольких клиентов на каждый экземпляр. С учетом сказанного, я извлек несколько уроков. Самая важная из них - не позволять любому клиенту уговаривать вас настраивать свой экземпляр приложения на уровне кода. Вместо этого вся необходимая настраиваемость и расширяемость должна быть встроена в само приложение. - person dana; 14.01.2012
comment
К вашему сведению, есть по крайней мере некоторые люди, которые поддерживают отдельный подход к БД. (ayende.com/blog/3497/multi-tenancy-the -физическая-модель-данных). Обычно у вас есть главное приложение, которое управляет этим, при этом веб-приложение может запрашивать подготовку новых ресурсов из основного приложения. Люди редко бывают вовлечены в общий случай. Обратите внимание: я думаю, что изоляция - это то, что вы получаете от этого, безопасность - это часть этого, но изоляция также включает гораздо больше свободы действий для каждого клиента. - person dana; 14.01.2012

То, что вы описываете, действительно является способом создания нескольких клиентов, но, как уже упоминалось выше, это не то же самое, что и несколько клиентов. См. Статью http://www.ibm.com/developerworks/cloud/library/cl-multitenantsaas/index.html?ca=drs-, чтобы узнать о факторах, которые следует учитывать.

  1. Пожалуйста, подумайте, сколько у вас будет клиентов и сколько пользователей в среднем будет у каждого арендатора.
  2. Если у вас будет большое количество арендаторов, ваша модель может стать слишком дорогой в обслуживании. Десять тысяч арендаторов, каждый со своей собственной базой данных, структурами файловой системы и т. Д., Удачи.
  3. Настоящая многопользовательская среда, такая как «Факторы успеха», SalesForce.com, NetSuite и т. Д., Успешна в первую очередь потому, что они многопользовательская, одна кодовая база, одна модель базы данных и т.д. Все арендаторы получают доступ к одной крупномасштабной системе и видят изолированные данные.
  4. Альтернативой True Multi-Tenancy является виртуализация, а с виртуализацией, такой как VMWare, вы можете съесть свой пирог и съесть его. В каждом образе VMware есть все, что вам нужно, и его можно создать по запросу. Вы можете сделать одно обновление кода и развернуть его при создании экземпляра образа. Это будет намного более рентабельно, чем разрозненные хранилища, которые вы себе представляете сейчас, но в меньшей степени, чем True Multi-Tenancy.
person Mike Oliver    schedule 13.01.2012
comment
Майк, спасибо за ответ. Виртуализация - это то, что мы тоже рассматриваем, но мне любопытно, как вы считаете это более рентабельным, чем наличие нескольких клиентов на одной и той же ОС, но разрозненных? И разве развертывание обновлений для виртуальных машин не было бы таким сложным? Или вы предполагаете где-то общее хранилище и просто заменяете образы виртуальных машин? - person James Crowley; 13.01.2012
comment
Это непрерывный процесс. Самым дорогостоящим, конечно же, является отдельный сервер для каждого арендатора. Далее идет несколько виртуальных серверов на одном физическом сервере. Далее идут виртуальные серверы в облаке. Далее идет настоящая мультиарендность, при которой происходит наибольшее совместное использование. Между ними есть много нечетких областей, которые можно определить как наиболее рентабельные только исходя из потребностей приложения. - person Mike Oliver; 27.01.2012

Есть несколько способов уберечь клиента A от данных клиента B.

  1. Siloing, как вы описали - машины, обслуживающие клиента B, отклоняют все сетевые подключения от машин, выделенных другим клиентам и иметь отдельные физические диски, журналы и т. д. Здесь вас беспокоят нулевые дни, связанные с сетевыми сообщениями и троянами, которые пытаются заразить обновления вашего кода, и любое устройство, которое может подслушивать сетевые сообщения между машинами. в бункере.
  2. Шифрование всех хранимых данных - вместо отдельных машин вы шифруете все данные. Обычно для этого по-прежнему требуются изолированные базы данных, но не файловые системы или журналы. Нулевые дни, о которых вы беспокоитесь, - это дни 1 плюс все, что связано с границами процессов, кешами памяти, блокировкой файловой системы и всем, что влияет на взаимодействие с хранилищем ключей клиента. У меня нет большого опыта в этом, но я скептически отношусь к тому, что это административная победа.
  3. Анализ информационных потоков - убедитесь, что каждая часть данных помечена. Все запросы от программы, которая обслуживает запрос для клиента A, помечены как A, и все программы, которые обслуживают запросы для клиента A, принимают только сообщения, отмеченные A, а не B. Это можно использовать для глубокой защиты поверх других. схемы, поскольку он сам по себе не защищает системы хранения.
person Mike Samuel    schedule 12.01.2012