Docker机密和RSA密钥
我有一个Docker群,我想在服务中使用一个秘密的RSA密钥,通过SSH连接到另一个容器。
我的安全策略是所有的秘密(密码,密钥等)都存储在与目标服务器(Swarm)不同的机器上。
其实(我不喜欢它),在我的Dockerfile中创build一个临时目录/run/secrets
:
mkdir -p /run/secrets
然后我创build伪造的id_rsa
和id_rsa.pub
文件:
touch /run/secrets/id_rsa touch /run/secrets/id_rsa.pub
现在我创build一个符号链接:
ln -s /run/secrets/id_rsa /root/.ssh/id_rsa ln -s /run/secrets/id_rsa.pub /root/.ssh/id_rsa.pub
我这样做,因为我没有find一种方法来复制我的docker-entrypoint.sh
的秘密:在入口点我不是根,所以我不能复制在/root
目录。
所以,我已经在使用Docker的秘密了,但是这里的问题是容器中的秘密是只读的。 这会影响SSH的使用:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0444 for '/root/.ssh/id_rsa' are too open. It is recommended that your private key files are NOT accessible by others. This private key will be ignored.
我不能修改我的id_rsa
文件的权限,因为它是只读的。
有没有解决方法或只是一个更好的方法来做到这一点?
谢谢
编辑1:
我试图改变我build立我的Docker镜像的方式,以便复制/root/.ssh
目录中的键。
考虑用撰写文件创build一个堆栈。 这使您可以select更改秘密的文件权限。
version: "3.1" services: redis: image: redis:latest deploy: replicas: 1 secrets: - source: my_secret target: redis_secret uid: '103' gid: '103' mode: 0440 secrets: my_secret: file: ./my_secret.txt my_other_secret: external: true
更多信息可以在这里find: https : //docs.docker.com/compose/compose-file/#long-syntax-2