docker - 在 docker compose 中为运行状况检查指定 postgres 参数的安全方法
问题描述
我正在使用 Secrets 来管理用户名、密码和 dbname,并使用 Docker 堆栈将 Postgres 作为数据库。我现在想使用 Docker 提供的健康检查功能。
码头工人-compose.yml
x-db-secrets: &db_secrets
- psql_user
- psql_pass
- psql_dbname
services:
db:
image: postgres:13.1
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
- POSTGRES_USER_FILE=/run/secrets/psql_user
- POSTGRES_DB_FILE=/run/secrets/psql_dbname
- POSTGRES_PASSWORD_FILE=/run/secrets/psql_pass
secrets: *db_secrets
healthcheck:
test: pg_isready -U myuser -d db_prod
interval: 10s
timeout: 3s
retries: 3
(... other services...)
volumes:
postgres_data:
static_content:
media_content:
secrets:
psql_user:
external: true
psql_pass:
external: true
psql_dbname:
external: true
正如本healthcheck:
节中所指出的,我将使用运行状况检查公开数据库用户名和数据库名称。我的问题(根据答案进行一些跟进):
- 有关系吗?docker-compose.yml 文件不在运行此代码的主机上。因此,潜在的攻击者将无法从那里访问此信息......但是,由于 docker 将执行运行状况检查,它可能会在该容器中实时跟踪(shell?docker configs 存储该过程的文件?)
- 如果它确实重要,我如何在不暴露该信息的情况下执行健康检查?我必须直接使用这些秘密,但是我不知道如何使用docker-compose文件中的秘密......
想法?解决方法?
额外细节:
- 我目前正在检查数据库是否从使用它的(烧瓶)容器中启动。例如,烧瓶服务检查它是否可以 ping 数据库。但是,我宁愿将事物分开,而 DB 容器应该是一个告诉它是否健康的容器(imo)。
解决方案
由于 docker 套接字在主机上,因此 healthcheck 命令是通过 可见的docker inspect
,因此只有在可以从用户名和/或 dbname 中检索到密码时才(真的)很重要。
可以说它总是很重要,但这取决于您的需求。
推荐阅读
- c# - 为什么我无法获得与我的模型相关的所有数据?
- python - 使用 discord.py,我将如何检查用户在特定频道中发送了多少消息
- ruby-on-rails - 我们很抱歉,但有些不对劲。- Heroku 托管
- postgresql - 使用 NHibernate 映射复合键的问题(已添加列)
- python - LeetCode 的“迷宫 II”问题:为什么这个解决方案会超过时间限制?
- java - 响应 HTML 是重复行
- android - 具有交互性的 android 中的 3D 模型渲染
- json - 如何构建一个滑块,该滑块从 Laravel 中的 JSON 数据中获取图像的 url
- angular - 选择选项时如何动态添加表格行?
- python - 使用启用了 Cookie 的 Python 请求进行 Web 爬网