Pan*_*mit 5 java security docker spring-boot microservices
最近,开始为我的应用程序构建 docker 镜像。应用程序使用很少的密钥来连接其他微服务。我读到了关于群体模式的 docker 秘密,它保存了应用程序的秘密,并且我在应用程序中进行了更改以接受 docker 秘密。我使用命令创建了秘密..
printf "my-secrets12345" | docker secret create adminpassword
Run Code Online (Sandbox Code Playgroud)
然后我使用以下命令和 docker-compose 文件部署服务。
version: '3.1'
services:
testService:
secrets:
- adminpassword
image: "test-docker-secret:latest"
#container_name: test-docker-secret
ports:
- "8080:8080"
environment:
SPRING_PROFILES_ACTIVE: dev
SERVER_SSL_ENABLED: "true"
volumes:
- /home/tridev/pathtocerts/:/tmp/certificates/
secrets:
adminpassword:
external: true
Run Code Online (Sandbox Code Playgroud)
以及部署的
docker stack deploy --compose-file=test-stack-compose.yml testservice
Run Code Online (Sandbox Code Playgroud)
在此之后,我的服务开始并按预期工作,在这里,我认为我的秘密现在对任何人都无法以纯文本形式可见,并且是安全的。但是当我进入容器并浏览目录时/run/secrets/,我可以在这里以纯文本形式看到我的所有秘密。我也可以通过使用从主机查看我的秘密
docker container exec $(docker ps --filter name=testservice -q) cat /run/secrets/adminpassword
Run Code Online (Sandbox Code Playgroud)
在这里,我看到如果有人可以访问我的容器或服务,他可以看到秘密并访问其他服务的数据。这里感觉docker的秘密是幻术师的,秘密是可见的。
docker 还有其他方法可以安全地存储密钥吗?
小智 0
是的,这总结得很好,我也不满意 Docker 容器中的秘密基本上是纯文本,只读,但仍然是纯文本。
您必须添加另一层加密:
https://medium.com/javarevisited/how-to-encrypt-secrets-in-an-spring-boot-application-57a60c8abaa7
基本上,您需要预先加密秘密,然后让插件在配置文件读取级别处理解密。多久以及是否更改/轮换密钥取决于您(每次密钥更改都需要使用新的/更新的密钥重新触发容器重新启动)
不管怎样,5 分钟之内就可以解决这个问题。
| 归档时间: |
|
| 查看次数: |
1534 次 |
| 最近记录: |