Docker Secret 的工作原理以及开发人员如何滥用它们
Docker Secret 是为了安全地管理 API 密钥、数据库密码和令牌等敏感数据而引入的。它们的工作原理是将 Secret 作为文件挂载到 /运行/秘密 位于容器内部,仅容器化服务可访问。这种机制至少在理论上可以将机密信息隐藏在环境变量和日志之外。 当开发人员绕过这个机制时,问题就开始了。而不是使用 Docker Compose secrets 功能正常,秘密通常被硬编码到 Dockerfile, commit导入到 Git,或通过环境变量注入。这些快捷方式使得机密信息容易通过日志、容器层或版本历史记录意外泄露。
# Risky
ENV DB_PASSWORD=mysecretpassword
⚠️ 不安全的示例,请勿在生产中使用
一旦添加了这行,它就会被分层到镜像中。任何有权访问该镜像的人(构建缓存、注册表或 CI/CD 日志)可以提取它。更糟糕的是,这种模式在审查过程中经常被忽视,因为它“就是有效”。
Docker Compose 的秘密和共享配置中的隐藏风险
Docker Compose 简化了多容器应用程序,但是 Docker Compose 机密 存在隐藏风险。开发人员经常分享 Docker Compose.yml or .ENV 通过 Git、Slack 或共享驱动器跨团队和环境创建文件。
services:
app:
image: myapp
secrets:
- db_password
secrets:
db_password:
file: ./secrets/db_password.txt
⚠️ 演示示例,不要在版本化文件中包含真正的秘密
问题是什么?这些 Docker撰写 秘密 引用假设本地文件,但实际上,这些文件会被版本控制或不安全地分发。秘密会潜入 Git 仓库,出现在 pull requests或复制到其他文件夹。“我们都知道不要 commit 秘密”并不是一项安全政策。
更糟糕的是,像暂存和生产这样的环境可能会重复使用相同的 泊坞窗,compose.yml,造成一种虚假的分离感。一个错误配置的 .ENV 文件和生产机密被注入到测试环境中。
CI/CD Pipelines:Docker 秘密处理出现问题的地方
In CI/CD, 码头工人的秘密 如果不隔离就会分崩离析。 秘密经常泄露 在三个地方:日志、图像层和共享运行器。
日志:CI 步骤打印 回显 $SECRET_KEY 调试问题。但这些日志会被存储,有时是公开的。像 GitHub动作 or GitLab 存储几天或几周的日志。
图像层:如果 Dockerfile 在构建期间添加了机密:
RUN echo "$SECRET_KEY" > /app/config.txt
⚠️ 不安全的示例,这会暴露图像层中的秘密
那个 Docker 秘密 现在是镜像层的一部分。即使您稍后删除该文件,前一层仍会保留在镜像历史记录中。
共享跑步者: 许多 CI/CD 平台使用共享运行器。如果机密信息未正确限定范围或清理,其他构建程序就可以访问它们。更糟糕的是,机密信息有时会默认作为环境变量传递给所有步骤。
在代码中保护 Docker, Pipelines 和注册表
锁定 码头工人的秘密,开发团队需要分层防御:
- 使用秘密管理器 例如 AWS Secrets Manager、HashiCorp Vault 或 Doppler。这些工具可以在运行时安全地将机密信息轮换并注入到您的容器中。
- 限制范围:切勿在开发/测试环境中泄露生产机密。使用基于角色的访问控制 (RBAC) 来限制谁可以注入或读取机密。
- 避免使用 ENV 变量来存储机密信息。 使用 Docker 秘密 卷或将机密明确地作为文件挂载。
- 清理构建:确保秘密不会被嵌入到图像中或留在中间文件中。
- 扫描容器和存储库:使用检查图像、git 历史记录和 CI/CD 泄露机密的配置。
防止 Docker 机密泄露的最佳实践
- 短暂的秘密:在 CI 运行期间生成一次性密钥。这些密钥一旦被盗,就会过期且无法重复使用。
- 密封的秘密:使用 Kubernetes Sealed Secrets 或 SOPS 加密 Git 中的机密。这可确保机密得到安全版本控制。
- CI/CD 政策:执行以下政策 Dockerfile 中没有秘密,基于秘密检测的块构建,以及日志使用情况 码头工人的秘密 为 pipeline.
- Pre-commit hooks: 堵塞 commit使用诸如 git-秘密 or 检测秘密.
- 不可变的基础设施:不要修改容器中的机密。重建并使用新的 码头工人的秘密 代替。
结语
当被滥用时, 码头工人的秘密 成为一种负担,而不是一种安全特性。从 Docker Compose 机密 通过 YAML 文件泄漏到 CI/CD pipelines 在日志或层中暴露秘密,风险是真实存在的,并且可以预防。
利用 西吉尼,团队可以检测暴露 秘密 尽早执行秘密处理策略,并扫描代码、容器和 pipelines. 对待你的 D袜子秘密 将其战略视为关键基础设施。务必确保其安全。





