TranslateProject/sources/tech/20170209 INTRODUCING DOCKER SECRETS MANAGEMENT.md
2017-12-17 14:44:07 +08:00

8.1 KiB
Raw Blame History

Dockers Secrets 管理介绍

容器正在改变我们对应用程序和基础设施的看法。无论容器内的代码量是大还是小,容器架构引入了一种代码与硬件起作用方式的变化 它从根本上将其从基础设施中抽象出来。对于容器安全来说Docker这里有三个关键部分。且他们共同引起了本质上更安全的应用程序。

Docker Security

构建更安全的应用程序的一个关键因素是与其他应用程序和系统进行安全通信这通常需要证书、tokens、密码和其他类型的验证信息凭证--通常称为应用程序 secret。我们很高兴介绍Docker SercetsDocker Secrets 是容器的本土解决方案,是加强容器安全的可信赖交付组件,用户可以在容器平台上直接集成 secret 分配功能。

有了容器,现在应用程序在多环境下是动态的、可移植的。这使得现存的 secret 分布解决方案略显不足因为他们都是针对静态环境。不幸的是这导致了应用程序secrets不善管理的增加使其总是找到安全的本土的解决方案比如像GitHub嵌入secrets到版本控制系统或着同样糟糕是像马后炮一样的定点解决。

Docker Secerts 管理介绍

根本上我们认为如果有一个标准的接口来访问secrets应用程序就更安全了。任何好的解决方案也必须遵循安全性实践例如在传输的过程中对secrets进行加密在休息的时候对secrets进行加密防止无意中泄露最终应用所消耗的secrets并严格遵守最小特权原则即应用程序只能访问所需的secrets不能多也不能不少。

通过将secrets整合向docker的业务流程我们能够在遵循这些确切的原则下为secrets管理问题提供一种解决方案。

下图提供了一个高层次视图并展示了Docker swarm mode结构是如何将一种新类型的对象安全地传递给我们的容器一个secret对象。

Docker Secrets Management

在Docker中一个secret是任意的数据块比如密码、SSH 密钥、TLS凭证或者对自然界敏感的每一块数据。当你将一个secret加入swarm通过执行docker secret createdocker利用在引导一个新的swarm时自动创建的内置的证书权威通过相互认证的TLS连接把secret交给swarm管理。

$ echo "This is a secret" | docker secret create my_secret_data -

一旦secret 达到一个管理节点它就会被保存在采用NaCl的salsa20poly1305与一个256位的密钥来确保没有任何数据写入磁盘加密的 Raft store 中。 向内部存储写入secrets保证了数据管理的大量获取。

当 swarm 管理器启动的时包含secrets的被加密过的Raft日志通过每一个节点唯一的数据密钥进行解密。此密钥和用于与集群其余部分通信的节点的TLS凭据可以使用一个集群范围的密钥加密密钥进行加密该密钥称为“解锁密钥”还使用Raft进行传播将且会在管理器启动的时候被要求。

当授予新创建或运行的服务访问某个secret时管理器节的其中一个节点只有管理人员可以访问被存储的所有存储secrets将已建立的TLS连接发送给正在运行特定服务的节点。这意味着节点自己不能请求secrets并且只有在管理员提供给他们的secrets时才能访问这些secrets——严格地要求那些需要他们的服务。如果一个服务被删除了或者被重新安排在其他地方管理员能够很快的注意到那些不再需要访问将它从内存中消除的secret 的所有节点且那节点将不能够访问应用程序的secret。

$ docker service  create --name="redis" --secret="my_secret_data" redis:alpine

未加密的 secret 被安装到 /run/secrests/ 内存文件系统的容器中

$ docker exec $(docker ps --filter name=redis -q) ls -l /run/secrets
total 4
-r--r--r--    1 root     root            17 Dec 13 22:48 my_secret_data

如果一个服务被删除了或者被重新安排在其他地方管理员能够很快的注意到那些不再需要访问将它从内存中消除的secret 的所有节点且那节点将不能够访问应用程序的secret。

$ docker service update --secret-rm="my_secret_data" redis

$ docker exec -it $(docker ps --filter name=redis -q) cat /run/secrets/my_secret_data

cat: can't open '/run/secrets/my_secret_data': No such file or directory

为了获得更多的信息和一些说明如何创建和管理secrets的例子可以看Docker secrets 文档。同时特别推荐Docker 安全合作团 Laurens Van Houtven (https://www.lvh.io/) 和是这一特性成为现实的团队。

Get safer apps for dev and ops w/ new #Docker secrets management

CLICK TO TWEET

Docker Security

通过 Docker 更安全地使用应用程序

Docker secrets 为开发者设计成更易于使用且IT 运维团队用它来构建和运行更加安全的运用程序。Docker secrets 是首个被设计为既能保持secret安全又能仅在当被需要secret操作的确切容器需要的使用的容器结构。从通过直接在 Docker 数据中心开发部件文件的IT管理员并使用 Docker 组件来定义应用程序和secrets 来看服务器、secrets、网络和 volumes 将能够安全可靠地使用应用程序。

更多相关学习资源:


via: https://blog.docker.com/2017/02/docker-secrets-management/

作者: Ying Li 译者:HardworkFish 校对:校对者ID

本文由 LCTT 原创编译,Linux中国 荣誉推出