gpt4 book ai didi

docker - 以安全的方式使用 docker 的远程 API

转载 作者:行者123 更新时间:2023-12-02 18:21:03 24 4
gpt4 key购买 nike

我正在尝试找到一种有效的方法来安全地使用 docker 远程 API。
我有一个在远程主机上运行的 docker 守护进程,以及在另一台机器上运行的 docker 客户端。我需要我的解决方案不依赖于客户端/服务器操作系统,以便它与任何具有 docker 客户端/守护进程等的机器相关。

到目前为止,我发现这样做的唯一方法是使用 openssl 在 Linux 机器上创建证书并手动将证书复制到客户端/服务器,如下例所示:

https://docs.docker.com/engine/security/https/

然后在双方配置docker使用证书进行加密和认证。

在我看来,这种方法相当笨拙,因为有时复制文件并将它们放在我想使用远程 API 的每台机器上是个问题。

我正在寻找更优雅的东西。

我发现的另一个解决方案是使用代理进行基本 HTTP 身份验证,但在这种方法中,流量没有加密,而且这种方式并不真正安全。

有没有人对不同的解决方案或改进上述之一的方法有建议?

最佳答案

您最喜欢的系统自动化工具(ChefSaltStackAnsible)可能可以直接管理远程主机上正在运行的 Docker 容器,而无需打开另一个等效于 root 的网络路径。有一些面向 Docker 的集群工具( Docker SwarmNomadKubernetesAWS ECS )可以在本地或远程运行容器,但您对具体位置的控制较少(您通常并不关心)他们倾向于接管他们正在运行的机器。

如果我真的必须以这种方式管理系统,我可能会使用某种集中式存储来保存 TLS 客户端 key ,很可能是 Vault ,它具有存储加密 key 的属性,需要某种级别的身份验证才能检索它们,并且能够访问控制它们。您可以编写这样的 shell 函数(未经测试):

dockerHost() {
mkdir -p "$HOME/.docker/$1"
JSON=$(vault kv get -format=json "secret/docker/$1")
for f in ca.pem cert.pem key.pem; do
echo "$JSON" | jq ".data.data.[\"$f\"]" > "$HOME/.docker/$1/$f"
done
export DOCKER_HOST="https://$1:2376"
export DOCKER_CERT_PATH="$HOME/.docker/$1"
}

虽然您的问题清楚表明您理解这一点,但值得重复: 不要启用对 Docker 守护程序的未经身份验证的远程访问 ,因为如果您完全可以访问套接字,那么接管具有不受限制的 root 访问权限的主机是微不足道的。

关于docker - 以安全的方式使用 docker 的远程 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53276839/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com