Защищен ли сервис, работающий в сети docker, от внешнего соединения, даже от локального хоста? - PullRequest
0 голосов
/ 04 февраля 2020

Вопрос: Может ли кто-либо, имеющий доступ к хост-компьютеру, подключиться к сети Docker или службы, работающие в сети docker, видны только другим службам, работающим в сети Docker, при условии, что порты не отображаются?

Справочная информация: В настоящее время у меня есть веб-приложение с базой данных postgresql, где оба компонента проходят через docker на одном компьютере и только веб-приложение отображает порты на главном компьютере. У веб-приложения нет проблем с подключением к БД, так как они находятся в одной сети docker. Я собирался удалить пароль из своей базы данных, чтобы мне не приходилось хранить пароль на хосте и передавать его в контейнер веб-приложения в качестве секрета. Прежде чем сделать это, я хочу выяснить, насколько безопасна сеть docker.

Вот пример моей docker -композиции:

version: '3.3'
services:

    database:
        image: postgres:9.5
        restart: always
        volumes:
              #preserves the database between containers
            - /var/lib/my-web-app/database:/var/lib/postgresql/data                

    web-app:
        image: my-web-app
        depends_on:
            - database
        ports:
            - "8080:8080"
            - "8443:8443"
        restart: always
        secrets:
            - source: DB_USER_PASSWORD

secrets:
  DB_USER_PASSWORD:
    file: /secrets/DB_USER_PASSWORD

Любая помощь приветствуется.

1 Ответ

2 голосов
/ 04 февраля 2020

На собственном хосте Linux любой, кто имеет или может найти частный IP-адрес контейнера, может напрямую связаться с контейнером. (Непривилегированное перетаскивание с помощью ifconfig может дать вам некоторые подсказки, что оно там есть.) На не-Linux обычно есть скрытая Linux ВМ, и если вы можете получить оболочку в этом, то тот же прием работает. И, конечно, если вы можете запустить любую команду docker, тогда вы можете docker exec оболочку в контейнере. Защита на уровне сети

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

(Обратите внимание, что путь docker exec особенно эффективен: поскольку незашифрованные секреты в конечном итоге записываются в путь в контейнере, возможность запуска docker exec означает, что вы можете легко извлечь их. Ограничение docker доступа только к root также является хорошей практикой безопасности.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...