Как защитить исходный код и структуру базы данных в контейнере как услуга (caas)? - PullRequest
0 голосов
/ 24 января 2019

Контейнер как услуга (caas) - это шум, который мы слышим вокруг нас.Но есть некоторая путаница в этой модели, которую я не нашел в интернете.

На самом деле мы предоставляем нашим клиентам услугу, включающую конфиденциальные данные (финансовые документы и т. Д.).Поэтому некоторые наши клиенты не решаются делиться данными с нами.

Таким образом, они требуют решения в виде контейнера Docker. Таким образом, в этом случае все данные и наше приложение будут размещаться на своих собственных серверах.У нас не будет доступа к их данным.И мы будем взимать их ежемесячно.

Короче говоря, нам нужно доставить все наше приложение (исходный код и базу данных) в контейнер докера в виде черного ящика .Таким образом, клиент может просто взаимодействовать с Docker-контейнером по сети, но не может войти в Docker-контейнер, чтобы увидеть наш исходный код и структуру БД.

Вот почему меня смущает, что как мы можем защитить наш исходный код и структуру БД. (Исходный код на PHP, а БД - PGSQL)

Во-вторых, Как мы можем синхронизировать код этого Docker-контейнера с обновленным кодом?

Любая помощь по этому вопросу будет высоко оценена.

1 Ответ

0 голосов
/ 24 января 2019

Как мы можем защитить наш исходный код

Используйте скомпилированный язык, который тривиально не декомпилируется (C ++, Go).Если вы используете интерпретированный язык, который включает в себя источник в контейнере (Javascript, Python, Ruby), когда у клиента есть копия изображения, для него тривиально запустить его или иным образом открыть его и посмотреть на ваш источник.

и структура БД

Нет конкретного способа сделать это, кроме защиты базы данных и кода приложения.Любой, кто может подключиться к базе данных, может довольно легко запросить схему.

Как мы можем синхронизировать код контейнера Docker с обновленным кодом?

Отправить клиенту новое изображениеи попросите их удалить существующий контейнер и создать новый.

Это важно и требует некоторого предварительного проектирования.Когда вы сделаете это, все, что было в локальной файловой системе контейнера, будет потеряно, а это значит, что вы никогда не сохраните в локальной файловой системе контейнера ничего, что вы не можете просто восстановить.У вас уже есть база данных, поэтому планируйте хранить там большую часть фактических данных.Если вы генерируете журналы, либо сгенерируйте их в stdout вашего процесса (чтобы основная система журналов Docker могла их собирать), либо используйте директорию хоста bind-mount, чтобы поместить их куда-то, их можно легко просмотреть.

Это такжемеханизм, используемый менеджерами кластеров, такими как Kubernetes.Вы можете сообщить контроллеру Kubernetes Deployment, что вам нужно 3 копии образа me / abc: 123.Если впоследствии вы скажете ему, что вместо этого вам нужно 3 реплики me / abc: 246, он запустит новые контейнеры с новым изображением, а затем удалит старые.

Обратно, вам никогда не придется думатьо «синхронизации кода» или иным способом входа в контейнеры вообще, и docker ps должен быть в состоянии немедленно сообщить вам, какую версию системы использует клиент (по определенным тегам изображения).

...