Docker机密和RSA密钥

时间:2017-11-14 11:43:50

标签: docker ssh docker-swarm

我有一个Docker群,我想在服务中使用秘密RSA密钥通过SSH连接到另一个容器。

我的安全策略是所有机密(密码,密钥等)都存储在与目标服务器(Swarm)不同的机器上。

实际上(我不喜欢它),在我的Dockerfile中我创建了一个临时目录/run/secrets

mkdir -p /run/secrets

然后我创建了假id_rsaid_rsa.pub个文件:

touch /run/secrets/id_rsa
touch /run/secrets/id_rsa.pub

现在我创建了一个符号链接:

ln -s /run/secrets/id_rsa /root/.ssh/id_rsa
ln -s /run/secrets/id_rsa.pub /root/.ssh/id_rsa.pub

我这样做是因为我没有找到一种方法来复制docker-entrypoint.sh中的秘密:在入口点我不是root,所以我无法复制到/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:

我正在尝试更改构建Docker镜像的方式,以便复制/root/.ssh目录中的密钥。

1 个答案:

答案 0 :(得分:3)

考虑使用撰写文件创建堆栈。 这使您可以选择更改秘密的文件权限。

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

可以在此处找到更多信息:https://docs.docker.com/compose/compose-file/#long-syntax-2