Как защитить исходный код и структуру базы данных в Контейнер как услуга (caas)?
Контейнер как услуга (caas) - это шум, который мы слышим вокруг нас. Но есть некоторая путаница в этой модели, которую я не нашел в интернете.
На самом деле, мы предоставляем услуги нашим клиентам, которые включают конфиденциальные данные (финансовые документы и т. Д.). Поэтому некоторые наши клиенты не решаются делиться данными с нами.
Итак, они требуют решения в виде док-контейнера. Таким образом, в этом случае все данные и наше приложение будут размещаться на своих собственных серверах. У нас не будет доступа к их данным. И мы будем взимать их ежемесячно.
Короче говоря, нам нужно доставить все наше приложение (исходный код и базу данных) в контейнер Docker в виде черного ящика. Таким образом, клиент может просто взаимодействовать с Docker-контейнером по сети, но не может войти в Docker-контейнер, чтобы увидеть наш исходный код и структуру БД.
Вот почему меня смущает то, как мы можем защитить наш исходный код и структуру БД. (Исходный код на PHP, а БД - PGSQL)
Во-вторых, как мы можем синхронизировать код этого Docker-контейнера с обновленным кодом?
Любая помощь по этому вопросу будет высоко оценена.
1 ответ
Как мы можем защитить наш исходный код
Используйте скомпилированный язык, который тривиально не декомпилируется (C++, Go). Если вы используете интерпретированный язык, который включает в себя источник в контейнере (Javascript, Python, Ruby), когда у клиента есть копия изображения, для него тривиально запустить его или иным образом открыть его и посмотреть на ваш источник.
и структура БД
Нет конкретного способа сделать это, кроме защиты базы данных и кода приложения. Любой, кто может подключиться к базе данных, может довольно легко запросить схему.
Как мы можем синхронизировать код этого Docker-контейнера с обновленным кодом?
Отправьте клиенту новое изображение и попросите его удалить существующий контейнер и создать новый.
Это важно и требует некоторого предварительного проектирования. Когда вы сделаете это, все, что было в локальной файловой системе контейнера, будет потеряно, а это значит, что вы никогда не сохраните в локальной файловой системе контейнера ничего, что вы не можете просто восстановить. У вас уже есть база данных, поэтому планируйте хранить там большую часть фактических данных. Если вы генерируете журналы, либо сгенерируйте их в stdout вашего процесса (чтобы основная система журналов Docker могла их собирать), либо воспользуйтесь каталогом хоста bind-mount, чтобы поместить их куда-то, чтобы их можно было легко просмотреть.
Это также механизм, используемый менеджерами кластеров, такими как Kubernetes. Вы можете сообщить контроллеру Kubernetes Deployment, что вам нужно 3 копии образа me/abc:123. Если впоследствии вы скажете ему, что вместо этого вам нужно 3 копии me/abc:246, он запустит новые контейнеры с новым изображением, а затем удалит старые.
И наоборот, вам никогда не нужно думать о "синхронизации кода" или иным образом входить в контейнеры вообще, и docker ps
Должен быть в состоянии сразу сказать вам, какая версия системы запущена клиентом (по определенным тегам изображения).