complete the translation

This commit is contained in:
TRsky 2017-12-17 22:06:08 +08:00
parent ac7e0d0291
commit 3932b5e0bc

View File

@ -2,42 +2,41 @@
Dockers Secrets 管理介绍 Dockers Secrets 管理介绍
========================= =========================
容器正在改变我们对应用程序和基础设施的看法。无论容器内的代码量是大还是小,容器架构引入了一种代码与硬件起作用方式的变化 它从根本上将其从基础设施中抽象出来。对于容器安全来说Docker这里有三个关键部分。且他们共同引起了本质上更安全的应用程序。 容器正在改变我们对应用程序和基础设施的看法。无论容器内的代码量是大还是小,容器架构都会引起代码如何与硬件相互作用方式的改变 —— 它从根本上将其从基础设施中抽象出来。对于容器安全来说,在 Docker 中,容器的安全性有三个关键组成部分,他们相互作用构成本质上更安全的应用程序。
![Docker Security](https://i2.wp.com/blog.docker.com/wp-content/uploads/e12387a1-ab21-4942-8760-5b1677bc656d-1.jpg?w=1140&ssl=1) ![Docker Security](https://i2.wp.com/blog.docker.com/wp-content/uploads/e12387a1-ab21-4942-8760-5b1677bc656d-1.jpg?w=1140&ssl=1)
构建更安全的应用程序的一个关键因素是与其他应用程序和系统进行安全通信这通常需要证书、tokens、密码和其他类型的验证信息凭证--通常称为应用程序 secret。我们很高兴介绍Docker SercetsDocker Secrets 是容器的本土解决方案,是加强容器安全的可信赖交付组件,用户可以在容器平台上直接集成 secret 分配功能。 构建更安全的应用程序的一个关键因素是与其他应用程序和系统进行安全通信这通常需要证书、tokens、密码和其他类型的验证信息凭证 —— 通常称为应用程序 涉密数据。我们很高兴可以推出Docker 涉密数据一个容器的原生解决方案它是加强容器安全的可信赖交付组件用户可以在容器平台上直接集成涉密数据secret 分发功能。
有了容器,现在应用程序在多环境下是动态的、可移植的。这使得现存的 secret 分布解决方案略显不足因为他们都是针对静态环境。不幸的是这导致了应用程序secrets不善管理的增加使其总是找到安全的本土的解决方案比如像GitHub嵌入secrets到版本控制系统或着同样糟糕是像马后炮一样的定点解决 有了容器,现在应用程序在多环境下是动态的、可移植的。这使得现存的涉密数据secret 分发的解决方案略显不足因为它们都是针对静态环境。不幸的是这导致了应用程序涉密数据secrets应用不善管理的增加使得不安全的本地解决方案变得十分普遍比如像GitHub嵌入涉密数据secrets到版本控制系统或者在这之后考虑了其他同样不好的解决方案
### Docker Secerts 管理介绍 ### Docker 涉密数据(Secrets 管理介绍
根本上我们认为,如果有一个标准的接口来访问secrets,应用程序就更安全了。任何好的解决方案也必须遵循安全性实践,例如在传输的过程中,对secrets进行加密在休息的时候对secrets进行加密防止无意中泄露最终应用所消耗的secrets并严格遵守最小特权原则即应用程序只能访问所需的secrets,不能多也不能不少。 根本上我们认为,如果有一个标准的接口来访问涉密数据,应用程序就更安全了。任何好的解决方案也必须遵循安全性实践,例如在传输的过程中,对涉密数据进行加密;在空闲的时候也对涉密数据 进行加密;防止涉密数据在应用最终使用时被无意泄露;并严格遵守最低权限原则,即应用程序只能访问所需的涉密数据,不能多也不能不少。
通过将secrets整合向docker的业务流程我们能够在遵循这些确切的原则下为secrets管理问题提供一种解决方案。 通过将涉密数据整合到 docker 的业务流程,我们能够在遵循这些确切的原则下为涉密数据的管理问题提供一种解决方案。
下图提供了一个高层次视图,并展示了Docker swarm mode结构是如何将一种新类型的对象安全地传递给我们的容器一个secret对象 下图提供了一个高层次视图,并展示了 Docker swarm mode 体系架构是如何将一种新类型的对象 —— 一个涉密数据对象,安全地传递给我们的容器
![Docker Secrets Management](https://i0.wp.com/blog.docker.com/wp-content/uploads/b69d2410-9e25-44d8-aa2d-f67b795ff5e3.jpg?w=1140&ssl=1) ![Docker Secrets Management](https://i0.wp.com/blog.docker.com/wp-content/uploads/b69d2410-9e25-44d8-aa2d-f67b795ff5e3.jpg?w=1140&ssl=1)
在 Docker 中一个涉密数据是任意的数据块比如密码、SSH 密钥、TLS 凭证,或者任何其他本质上敏感的数据。当你将一个 涉密数据 加入集群(通过执行 `docker secret create` 利用在引导新集群时自动创建的内置证书颁发机构Docker 通过相互认证的 TLS 连接将密钥发送给集群管理器。
在Docker中一个secret是任意的数据块比如密码、SSH 密钥、TLS凭证或者对自然界敏感的每一块数据。当你将一个secret加入swarm通过执行`docker secret create`docker利用在引导一个新的swarm时自动创建的内置的证书权威通过相互认证的TLS连接把secret交给swarm管理。
``` ```
$ echo "This is a secret" | docker secret create my_secret_data - $ echo "This is a secret" | docker secret create my_secret_data -
``` ```
一旦,secret 达到一个管理节点它就会被保存在采用NaCl的salsa20poly1305与一个256位的密钥来确保没有任何数据写入磁盘加密的 Raft store 中。 向内部存储写入secrets保证了数据管理的大量获取 一旦,涉密数据到达一个管理节点,它将被保存到内部的 Raft 存储区中该存储区使用NACL 开源加密库中的Salsa20Poly1305加密算生成的256 位密钥加密。以确保没有任何数据被永久写入未加密的磁盘。向内部存储写入涉密数据,给予了涉密数据跟其他集群数据一样的高可用性
swarm 管理器启动的时包含secrets的被加密过的Raft日志通过每一个节点唯一的数据密钥进行解密。此密钥和用于与集群其余部分通信的节点的TLS凭据可以使用一个集群范围的密钥加密密钥进行加密该密钥称为“解锁密钥”还使用Raft进行传播将且会在管理器启动的时候被要求 集群管理器启动的时,包含 涉密数据 的被加密过的 Raft 日志通过每一个节点唯一的数据密钥进行解密。此密钥以及用于与集群其余部分通信的节点的 TLS 证书可以使用一个集群范围的加密密钥进行加密。该密钥称为“解锁密钥”也使用Raft进行传播将且会在管理器启动的时候被使用
当授予新创建或运行的服务访问某个secret时管理器节的其中一个节点只有管理人员可以访问被存储的所有存储secrets将已建立的TLS连接发送给正在运行特定服务的节点。这意味着节点自己不能请求secrets并且只有在管理员提供给他们的secrets时才能访问这些secrets——严格地要求那些需要他们的服务。如果一个服务被删除了或者被重新安排在其他地方管理员能够很快的注意到那些不再需要访问将它从内存中消除的secret 的所有节点且那节点将不能够访问应用程序的secret 当授予新创建或运行的服务权限访问某个涉密数据时其中一个管理器节点只有管理人员可以访问被存储的所有涉密数据将已建立的TLS连接分发给正在运行特定服务的节点。这意味着节点自己不能请求涉密数据并且只有在管理员提供给他们的时候才能访问这些涉密数据 —— 严格地控制请求 涉密数据 的服务
``` ```
$ docker service  create --name="redis" --secret="my_secret_data" redis:alpine $ docker service  create --name="redis" --secret="my_secret_data" redis:alpine
``` ```
未加密的 secret 被安装到 /run/secrests/<secret name> 内存文件系统的容器中 未加密的涉密数据被挂载到一个容器,该容器位于 /run/secrets/<secret_name> 的内存文件系统中。
``` ```
$ docker exec $(docker ps --filter name=redis -q) ls -l /run/secrets $ docker exec $(docker ps --filter name=redis -q) ls -l /run/secrets
@ -45,7 +44,7 @@ total 4
-r--r--r--    1 root     root            17 Dec 13 22:48 my_secret_data -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 service update --secret-rm="my_secret_data" redis
@ -55,7 +54,7 @@ $ docker exec -it $(docker ps --filter name=redis -q) cat /run/secrets/my_secret
cat: can't open '/run/secrets/my_secret_data': No such file or directory 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/) 和是这一特性成为现实的团队。 查看Docker sercet文档以获取更多信息和示例了解如何创建和管理您的涉密数据。同时特别推荐Docker 安全合作团 Laurens Van Houtven (https://www.lvh.io/) 和使这一特性成为现实的团队。
[Get safer apps for dev and ops w/ new #Docker secrets management][5] [Get safer apps for dev and ops w/ new #Docker secrets management][5]
@ -66,7 +65,7 @@ cat: can't open '/run/secrets/my_secret_data': No such file or directory
### 通过 Docker 更安全地使用应用程序 ### 通过 Docker 更安全地使用应用程序
Docker secrets 为开发者设计成更易于使用且IT 运维团队用它来构建和运行更加安全的运用程序。Docker secrets 是首个被设计为既能保持secret安全又能仅在当被需要secret操作的确切容器需要的使用的容器结构。从通过直接在 Docker 数据中心开发部件文件的IT管理员并使用 Docker 组件来定义应用程序和secrets 来看服务器、secrets、网络和 volumes 将能够安全可靠地使用应用程序 Docker 涉密数据旨在让开发人员和IT运营团队轻松使用以用于构建和运行更安全的应用程序。它是是首个被设计为既能保持涉密数据安全又能仅在当被需要涉密数据操作的确切容器需要的使用的容器结构。从使用Docker Compose定义应用程序和涉密数据到 IT 管理人员直接在Docker Datacenter中部署Compose文件、涉密数据涉密数据networks 和卷 volumes 都将加密、安全地跟应用程序一起传输
更多相关学习资源: 更多相关学习资源: