在容器化环境中保护敏感信息(如API密钥、数据库凭证等)是Linux服务器安全的关键环节。以下是一套系统化的解决方案:
-e
或--env-file
传递)。bash
docker run -e DB_PASSWORD=secret my-app
bash
echo "my_secret" | docker secret create db_password -
docker service create --secret db_password my-service
yaml
apiVersion: v1
kind: Secret
metadata:
name: db-secret
type: Opaque
data:
password: $(echo -n "s3cret" | base64)
bash
vault write kubernetes/roles/my-role \
service_account_name=default
多阶段构建:避免在最终镜像中包含敏感文件。
FROM alpine AS builder
COPY . /app
RUN make /app
FROM alpine
COPY --from=builder /app/bin /usr/local/bin
bash
docker run --read-only my-container
dockerfile
USER 1000
bash
docker network create secure-net
docker run --network secure-net my-service
yaml
rule: Sensitive File Access
desc: Detect access to sensitive files
condition: container and open_write and /etc/shadow
bash
oscap-docker image-cve my-image
bash
docker run -v encrypted_vol:/data my-app
gpg
加密后存储。alpine
或distroless
。敏感信息保护路径:
1. 开发阶段 → 使用环境变量/Secrets API
2. 构建阶段 → 多阶段构建+镜像扫描
3. 部署阶段 → Kubernetes Secrets/Vault注入
4. 运行时 → 只读/无root/网络隔离
5. 监控 → 审计日志+Falco告警
通过分层防御(Defense in Depth)策略,可显著降低容器环境中敏感信息泄露的风险。根据实际环境复杂度,选择适合的组合方案。