Postgresql 在docker网络中运行的服务从外部连接(甚至从本地主机)安全吗?
问题: 可以访问主机的任何人都可以连接到Docker网络吗?或者,如果端口不公开,Docker网络中运行的服务是否仅对Docker网络中运行的其他服务可见 背景: 我目前有一个带有postgresql数据库后端的web应用程序,其中两个组件都在同一台机器上通过docker运行,只有web应用程序在主机上公开端口。web应用程序连接到db没有问题,因为它们位于同一docker网络中。我正在考虑从我的数据库用户中删除密码,这样我就不必将密码存储在主机上并将其作为秘密传递到web应用程序容器中。在此之前,我想确定docker网络的安全性 以下是我的docker compose示例:Postgresql 在docker网络中运行的服务从外部连接(甚至从本地主机)安全吗?,postgresql,docker,docker-compose,Postgresql,Docker,Docker Compose,问题: 可以访问主机的任何人都可以连接到Docker网络吗?或者,如果端口不公开,Docker网络中运行的服务是否仅对Docker网络中运行的其他服务可见 背景: 我目前有一个带有postgresql数据库后端的web应用程序,其中两个组件都在同一台机器上通过docker运行,只有web应用程序在主机上公开端口。web应用程序连接到db没有问题,因为它们位于同一docker网络中。我正在考虑从我的数据库用户中删除密码,这样我就不必将密码存储在主机上并将其作为秘密传递到web应用程序容器中。在此之
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
非常感谢您的帮助。在本机Linux主机上,任何拥有或能够找到容器专用IP地址的人都可以直接与容器联系。(使用
ifconfig
进行无特权的推动可以给你一些提示,说明它就在那里。)在非Linux上,通常有一个隐藏的Linux虚拟机,如果你能在其中获得一个shell,同样的技巧也会起作用。当然,如果您可以运行任何docker
命令,那么您就可以docker exec
容器中的shell
Docker的网络级保护不够强大,无法成为保护数据库的唯一工具。仍然需要使用标准用户名和密码凭据
(请注意,
docker exec
路径功能特别强大:由于未加密的机密最终会写入容器中的一个路径,因此能够运行docker exec
意味着您可以轻松地提取它们。限制docker仅访问根目录也是一种良好的安全做法。)在本机Linux主机上,任何拥有或能够找到容器专用IP地址的人都可以直接与容器联系。(使用ifconfig
进行无特权的推动可以给你一些提示,说明它就在那里。)在非Linux上,通常有一个隐藏的Linux虚拟机,如果你能在其中获得一个shell,同样的技巧也会起作用。当然,如果您可以运行任何docker
命令,那么您就可以docker exec
容器中的shell
Docker的网络级保护不够强大,无法成为保护数据库的唯一工具。仍然需要使用标准用户名和密码凭据
(请注意,
docker exec
路径特别强大:由于未加密的机密最终会写入容器中的路径中,因此能够运行docker exec
意味着您可以轻松提取它们。限制docker
仅访问根目录也是一种良好的安全做法。)谢谢!这正是我想要确认的,是的,我正在确保docker exec需要sudo运行。谢谢!这正是我想要确认的,是的,我正在确保docker exec需要sudo来运行。