CN114978672A - 一种Docker镜像加密及编排方法与系统 - Google Patents
一种Docker镜像加密及编排方法与系统 Download PDFInfo
- Publication number
- CN114978672A CN114978672A CN202210547157.0A CN202210547157A CN114978672A CN 114978672 A CN114978672 A CN 114978672A CN 202210547157 A CN202210547157 A CN 202210547157A CN 114978672 A CN114978672 A CN 114978672A
- Authority
- CN
- China
- Prior art keywords
- docker
- image
- mirror image
- encrypted
- encryption
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 17
- 238000013507 mapping Methods 0.000 claims description 12
- 238000010191 image analysis Methods 0.000 claims description 3
- 238000005215 recombination Methods 0.000 claims description 3
- 230000006798 recombination Effects 0.000 claims description 3
- 230000008520 organization Effects 0.000 claims 3
- 238000007726 management method Methods 0.000 description 14
- 238000010586 diagram Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
- 230000008521 reorganization Effects 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/04—Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks
- H04L63/0428—Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks wherein the data content is protected, e.g. by encrypting or encapsulating the payload
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1095—Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3236—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开了一种Docker镜像加密及编排方法与系统,使用公钥对原始镜像加密,得到加密层数据以及加密特征,以此构成新镜像;构建密钥管理模块KMS插件和vault服务器保护Secret资源对象,在Secret资源对象中录入私钥和对应公钥哈希值;在部署加密应用的清单中加入解密模块作为初始化容器,若目标镜像当前不存在,拉取目标镜像,判断目标镜像是否为加密镜像,若是将目标镜像的镜像描述清单中的公钥哈希值匹配Secret资源,若匹配成功则用对应的私钥解密目标镜像每一层的数据;解密成功后解密初始容器返回成功并继续创建加密镜像的应用容器,解密失败返回错误通知。本发明增加了镜像的安全性,并且使加密镜像可以在Kubernetes中编排部署。
Description
技术领域
本发明涉及计算机软件技术领域,尤其涉及一种Docker镜像加密及编排方法与系统。
背景技术
OCI(开放容器标准)镜像规范是以Docker镜像规范为基础制定的,它定义了镜像的主要格式及内容。Docker镜像作为一种应用打包部署的快捷方式,它确保了应用运行环境的一致性,解决了应用部署环境多变及复杂性问题。用户将应用程序打包为Docker镜像,推送至镜像仓库,但传统无加密的镜像打包方式,很容易泄露源代码或被反编译,存在源代码泄露和被篡改的风险。
Kubernetes,是一个开源的,用于管理云平台中多个主机上的容器化的应用,提供了应用部署,规划,更新,维护的一种机制。Secret资源是Kubernetes中专门用来存储敏感数据的对象,它可以独立与使用它的资源,便于存储和修改敏感数据。默认情况下,Secret资源在Kubernetes中是Base64简单加密后存储在后端,直接采用这个方式可能会造成敏感数据的泄露,不能保障敏感数据的私密性和安全性。
无加密的Docker镜像很容易在Kubernetes中进行编排,但是对于加密后的Docker镜像,Kubernetes在创建加密镜像的容器时无法直接对镜像进行解密,导致加密Docker镜像在Kubernetes中编排部署难以实现。
发明内容
本发明要解决的技术问题:针对现有技术的上述问题,提供一种Docker镜像加密及编排方法与系统,增加了Docker镜像的安全性,并且解决了加密Docker镜像难以在Kubernetes中编排部署的问题。
为了解决上述技术问题,本发明采用的技术方案为:
一种Docker镜像加密及编排方法,包括以下步骤:
S1)使用公钥对原始Docker镜像每一层的数据加密,得到加密层数据以及对应的加密特征,将所述加密特征和公钥哈希值保存在加密Docker镜像的镜像描述清单中,重组加密Docker镜像并将所述加密Docker镜像上传至镜像仓库;
S2)定义Kubernetes的Secret资源对象并录入私钥和对应公钥的哈希值,通过KMS插件和vault服务器对所述Secret资源对象实时加解密;
S3)在Kubernetes中部署加密镜像应用时,如以Deployment、DeamonSet、StatefulSet等部署,在目标Docker镜像的应用清单中加入用于解密镜像的初始化容器,若目标Docker镜像未部署,从镜像仓库中拉取目标Docker镜像,利用初始化容器判断目标Docker镜像是否为加密Docker镜像,是则通过KMS插件和vault服务器对所述Secret资源对象解密得到私钥和对应公钥哈希值,将目标Docker镜像的镜像描述清单中的公钥哈希值匹配Secret资源对象解密得到的公钥哈希值,若匹配成功则用对应的私钥解密目标Docker镜像每一层的数据;
S4)若目标Docker镜像解密成功,Kubernetes中的kubelet继续创建解密后的目标Docker镜像的应用容器,解密后的目标Docker镜像中的应用被部署到所述应用容器中;若目标Docker镜像解密失败,则终止创建应用容器,且kubelet将错误信息上报至Kubernetes的API Server模块。
进一步的,步骤S1)具体包括以下步骤:
S11)解析原始Docker镜像,得到原始Docker镜像每一层数据的层关系、原始Docker镜像的镜像描述清单、以及每一层数据的原始哈希值;
S12)使用公钥逐层加密原始Docker镜像每一层的数据,得到加密Docker镜像每一层的数据,并计算加密后的每一层数据的哈希值;
S13)将加密后的每一层数据的哈希值替换该层的原始哈希值,生成加密特征,计算公钥哈希值,将所述加密特征和公钥哈希值保存在所述原始Docker镜像的镜像描述清单中的Labels字段,得到加密Docker镜像的镜像描述清单,将加密Docker镜像每一层的数据和加密Docker镜像的镜像描述清单重组为加密Docker镜像,根据加密Docker镜像的描述清单计算镜像ID并重命名加密Docker镜像,将重命名后的加密Docker镜像上传至镜像仓库。
进一步的,步骤S2)之前还包括搭建vault服务器和部署KMS插件的步骤,具体包括:在Kubernetes集群中搭建vault服务器,然后在Kubernetes API Server所在节点部署KMS插件。
进一步的,步骤S3)中在目标Docker镜像的应用清单中加入用于解密镜像的初始化容器步骤包括:
S301)获取kubelet创建的初始化容器,将目标Docker镜像的名称作为所述初始化容器的环境变量;
S302)将宿主机的Docker Socket文件映射到所述初始化容器中;
S303)根据所述Docker Socket文件,在初始化容器中使用Docker client API查找宿主机中的目标Docker镜像信息,若存在查找结果,则目标Docker镜像已部署并解密,初始化容器返回成功并执行步骤S4),若不存在查找结果,则目标Docker镜像未部署。
进一步的,步骤S301)还包括将Secret资源对象映射到所述初始化容器中;步骤S302)还包括将镜像存储目录映射到所述初始化容器中;步骤S303)之后具体包括以下步骤:
S31)根据镜像存储目录,从镜像仓库中拉取目标Docker镜像,在初始化容器中使用Docker client API获取目标Docker镜像的镜像描述清单;
S32)若所述描述清单中没有加密特征,则目标Docker镜像不是加密Docker镜像,初始化容器返回成功并执行步骤S4),若所述描述清单中有加密特征,找到被映射的Secret资源对象,并通过KMS插件和vault服务器对所映射的Secret资源对象解密;
S33)在初始化容器中使用Docker client API,将目标Docker镜像的镜像描述清单中的公钥哈希值匹配Secret资源对象,若存在匹配结果,则用对应的私钥解密目标Docker镜像每一层的数据,解密完成后初始化容器返回成功并执行步骤S4),若不存在匹配结果或者解密失败,初始化容器返回失败。
本发明还提出一种Docker镜像加密及编排系统,包括:
镜像加密模块,用于使用公钥对原始Docker镜像每一层的数据加密,得到加密后的层数据以及对应的加密特征,将所述加密特征和公钥哈希值保存在加密Docker镜像的镜像描述清单中,重组加密Docker镜像后,将所述加密Docker镜像上传至镜像仓库;
密钥管理模块,用于定义Kubernetes的Secret资源对象并在Secret资源对象中录入私钥和所述私钥对应公钥的哈希值,通过KMS插件和vault服务器对所述Secret资源对象实时加密;还用于读取Secret资源对象时通过KMS插件和vault服务器对所述Secret资源对象解密;
镜像解密模块,用于在Kubernetes中部署加密镜像应用时,在目标Docker镜像的应用清单中加入用于解密的初始化容器,若目标Docker镜像未部署,从镜像仓库中拉取目标Docker镜像,利用初始化容器判断目标Docker镜像是否为加密Docker镜像,是则通过密钥管理模块读取Secret资源对象得到所述私钥和对应的公钥哈希值,将目标Docker镜像的镜像描述清单中的公钥哈希值匹配Secret资源对象解密得到的公钥哈希值,若匹配成功则用对应的私钥解密目标Docker镜像每一层的数据。
进一步的,所述镜像加密模块具体包括:
镜像解析单元,用于解析原始Docker镜像,得到原始Docker镜像每一层数据的层关系、原始Docker镜像的镜像描述清单、以及每一层数据的原始哈希值;
分层加密单元,用于使用公钥逐层加密原始Docker镜像每一层的数据,得到加密Docker镜像每一层的数据,并计算加密后的每一层的哈希值;
镜像重组单元,用于将加密后的每一层数据的哈希值替换该层数据的原始哈希值,生成加密特征,计算公钥哈希值,将所述加密特征和公钥哈希值保存在所述原始Docker镜像的镜像描述清单中的Labels字段,得到加密Docker镜像的镜像描述清单,将加密Docker镜像每一层的数据、加密Docker镜像的镜像描述清单重组得到加密Docker镜像,根据加密Docker镜像的描述清单计算镜像ID并重命名加密Docker镜像,将重命名后的加密Docker镜像上传至镜像仓库。
进一步的,所述密钥管理模块还用于在Kubernetes集群中搭建vault服务器,然后在Kubernetes API Server所在节点部署KMS插件。
进一步的,所述所述镜像解密模块还被配置以执行:
获取kubelet创建的初始化容器,将目标Docker镜像的名称作为所述初始化容器的环境变量;
将宿主机的Docker Socket文件映射到所述初始化容器中;
根据所述Docker Socket文件,在初始化容器中使用Docker client API查找宿主机中的目标Docker镜像信息,若存在查找结果,则目标Docker镜像已部署并解密,初始化容器返回成功且kubelet继续创建应用容器,若不存在查找结果,则目标Docker镜像未部署。
进一步的,所述镜像解密模块还用于将Secret资源对象映射到所述初始化容器中,以及将镜像存储目录映射到所述初始化容器中,所述镜像解密模块还被配置以执行:
根据镜像存储目录,从镜像仓库中拉取目标Docker镜像,在初始化容器中使用Docker client API获取目标Docker镜像的镜像描述清单;
若所述描述清单中没有加密特征,则目标Docker镜像不是加密Docker镜像,初始化容器返回成功之后kubelet继续创建应用容器,若所述描述清单中有加密特征,通过密钥管理模块读取所映射的Secret资源对象;
在初始化容器中使用Docker client API,将目标Docker镜像的镜像描述清单中的公钥哈希值匹配Secret资源对象,若存在匹配结果,则用对应的私钥解密目标Docker镜像每一层的数据,解密完成后初始化容器返回成功,若不存在匹配结果或者解密失败,初始化容器返回失败。
和现有技术相比,本发明具有下述优点:
1.本发明对于Docker镜像每一层加密,提高了Docker镜像的安全性,避免了敏感数据被泄露的风险。
2.本发明将私钥和公钥信息保存在Secret资源对象中,通过获取Secret资源对象并提取其中的公钥信息和私钥,就可以解密Docker镜像,从而实现了加密Docker镜像在Kubernetes中的编排部署。
3.本发明通过KMS插件和vault服务器对Secret资源对象动态加解密,进一步保障了Secret资源对象的安全性。
附图说明
图1是本发明实施例的系统结构示意图。
图2是本发明实施例的镜像加密模块工作流程示意图。
图3是本发明实施例的密钥管理模块结构示意图。
图4是本发明实施例的镜像解密模块工作流程示意图。
图5是本发明实施例的方法流程示意图。
具体实施方式
以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明的保护范围。
本实施例针对加密Docker镜像在Kubernetes中编排部署难以实现的情况,提出一种Docker镜像加密及编排系统,如图1所示,该系统包括以下几部分
镜像加密模块,用于对原始Docker镜像进行加密,得到加密Docker镜像;
密钥管理模块,用于对解密的私钥以Secret资源对象的形式进行加解密管理;
镜像解密模块,用于验证和解密Docker镜像。
本实施例中,镜像加密模块为Docker镜像提供了一种加密方式,其使用公钥对原始Docker镜像每一层的数据加密,得到加密层数据以及对应的加密特征,将所述加密特征和公钥哈希值保存在加密Docker镜像的镜像描述清单中,在此基础上重组加密Docker镜像,并将所述加密Docker镜像上传至镜像仓库,从而提高了Docker镜像的安全性,避免了敏感数据被泄露的风险。
本实施例中,镜像加密模块内部包括:
镜像解析单元,用于解析原始Docker镜像,得到原始Docker镜像每一层数据的层关系、原始Docker镜像的镜像描述清单、以及每一层数据的原始哈希值,本实施例中,哈希值采用SHA256算法得到;
分层加密单元,用于使用公钥逐层加密原始Docker镜像每一层的数据,得到加密Docker镜像每一层的数据,并计算加密后的每一层数据的哈希值,公钥采用国密SM2椭圆曲线算法,是一种更先进更安全的非对称加密算法,在我们国家商用密码体系中被用来替换RSA算法。它具有密码复杂性高、处理速度快、机器性能消耗更小的特点;
镜像重组单元,用于将加密后的每一层数据的哈希值替换该层数据的原始哈希值,生成加密特征,加密特征可以是镜像描述清单中预设位置的值,例如每一层数据的哈希值均发生改变,则该位置的值也改变,表示Docker镜像已加密,否则该位置的值保持不变,表示Docker镜像未加密,计算公钥哈希值,将所述加密特征和公钥哈希值保存在所述原始Docker镜像的镜像描述清单中的Labels字段,得到加密Docker镜像的镜像描述清单,将加密Docker镜像每一层的数据、加密Docker镜像的镜像描述清单重组得到加密Docker镜像,根据加密Docker镜像的描述清单计算镜像ID并重命名加密Docker镜像,将重命名后的加密Docker镜像上传至镜像仓库。
各功能单元的工作流程如图2所示,分层加密单元解析原始Docker镜像,以获取原始镜像的层关系和镜像描述清单,分层加密单元使用SM2公钥对镜像进行逐层加密,并重新计算每层的SHA256值,镜像重组单元在镜像描述清单加入加密特征和公钥SHA256值、重构得到新镜像、重命名新镜像、重新计算镜像ID、打包新镜像上传至镜像仓库。
本实施例中,密钥管理模块提供了对于私钥的保护和管理,如图4所示,其在Kubernetes集群中搭建独立的vault服务器,然后在Kubernetes API Server所在节点部署KMS插件,以提供Secret资源对象的加解密功能,如图3所示,在Secret资源对象中录入私钥和所述私钥对应公钥的哈希值之后,利用KMS插件的加密接口,vault服务器对所述Secret资源对象实时动态加密,即每次加密的密码均不相同,加密后的Secret资源对象最后会存储到到集群中的Etcd中;当Secret资源对象要被读取使用时,利用KMS插件的加密接口,vault服务器对所述Secret资源对象进行解密,得到解密后的Secret资源对象以供使用。
本实施例中,镜像解密模块将解密的实施过程以容器化的形式,追加在Kubernetes的加密镜像应用清单中的初始化阶段如Deployment、DaemonSet、StatefulSet等部署清单中,以在初始化过程中对于Docker镜像进行解密。本实施例中Kubernetes的加密镜像应用清单的代码如下所示:
上述代码表示在kubernetes中部署加密Docker镜像的应用时,在定义的应用清单中解密该Docker镜像。其中,InitContainer中的decryptimg:v1.0为初始化容器,其作为解密的核心模块,被隐藏至加密应用清单中的初始化阶段,将在应用容器创建之前执行解密待部署的Docker镜像;ENCIMAGENAME环境变量为要部署的Docker镜像名;Volumes中的Secret secretName是所存储的secret资源对象的名字;ENCIMAGENAME和Volumes中的Secret secretName可根据不同的应用进行调整。
本实施例中,镜像解密模块提供了初始化的同时对加密Docker镜像进行解密的功能,其在目标Docker镜像未部署时,从镜像仓库中拉取目标Docker镜像,利用初始化容器获取目标Docker镜像的镜像描述清单,根据目标Docker镜像的镜像描述清单中的加密特征,判断目标Docker镜像是否为加密Docker镜像,是则通过密钥管理模块读取Secret资源对象得到其中的私钥和对应的公钥哈希值,将目标Docker镜像的镜像描述清单中的公钥哈希值匹配Secret资源对象解密得到的公钥哈希值,若匹配成功则用对应的私钥解密目标Docker镜像每一层的数据,具体的,如图4所示,镜像解密模块被配置以执行:
获取kubelet创建的初始化容器,并加入目标Docker镜像的镜像描述清单中,将目标Docker镜像的名称作为所述初始化容器的环境变量,根据Secret资源对象的名称,将对应的Secret资源对象映射到所述初始化容器中;
将宿主机的Docker Socket文件和镜像存储目录映射到所述初始化容器中;
根据所述Docker Socket文件,在初始化容器中使用Docker client API查找宿主机中的目标Docker镜像信息,若存在查找结果,则目标Docker镜像已部署并解密,初始化容器返回成功,kubelet继续创建应用容器,若不存在查找结果,则目标Docker镜像未部署;
若目标Docker镜像未部署,根据镜像存储目录,从镜像仓库中拉取目标Docker镜像,在初始化容器中使用Docker client API获取目标Docker镜像的镜像描述清单;
从目标Docker镜像的镜像描述清单的labels字段获取加密特征和公钥哈希值,若所述描述清单中没有加密特征,例如前文中预设位置的值未改变、不是目标值或者不存在,均可认为目标Docker镜像没有被加密,则目标Docker镜像不是加密Docker镜像,则初始化容器返回成功,kubelet继续创建应用容器,若所述描述清单中有加密特征,即前文中预设位置的值发生改变或者是目标值,则说明目标Docker镜像被加密;
若目标Docker镜像被加密,根据所映射的Secret资源对象的名称,通过密钥管理模块读取所映射的Secret资源对象,即对所映射的Secret资源进行解密,得到其中的私钥和对应的公钥哈希值;
在初始化容器中使用Docker client API,将目标Docker镜像的镜像描述清单中的公钥哈希值匹配解密后的Secret资源中的公钥哈希值,若存在匹配结果,则用对应的私钥解密目标Docker镜像每一层的数据,解密完成后初始化容器返回成功消息并且kubelet将继续创建应用容器,若不存在匹配结果或者解密失败,初始化容器返回失败消息到kubernetes的API Server。
基于本实施例中的Docker镜像加密及编排系统,本实施例还提出一种Docker镜像加密及编排方法,如图5所示:
首先,依次构建前述的镜像加密模块、密钥管理模块和镜像解密模块,然后执行以下步骤:
S1)镜像加密模块使用公钥对原始Docker镜像每一层的数据加密,得到加密层数据以及对应的加密特征,将所述加密特征和公钥哈希值保存在加密Docker镜像的镜像描述清单中,重组加密Docker镜像将所述加密Docker镜像上传至镜像仓库;
S2)密钥管理模块定义Kubernetes的Secret资源对象并在Secret资源对象中录入私钥和所述私钥对应公钥的哈希值,通过KMS插件和vault服务器对所述Secret资源对象实时加解密;
S3)镜像解密模块在Kubernetes中部署加密镜像应用时,如以Deployment、DeamonSet、StatefulSet等部署,在目标Docker镜像的应用清单中加入用于解密镜像的初始化容器,在目标Docker镜像未部署时,从镜像仓库中拉取目标Docker镜像,利用初始化容器判断判断目标Docker镜像是否为加密Docker镜像,是则由密钥管理模块通过KMS插件和vault服务器对所述Secret资源对象解密得到其中的私钥和对应公钥哈希值,将目标Docker镜像的镜像描述清单中的公钥哈希值匹配Secret资源对象解密得到的公钥哈希值,若匹配成功则用对应的私钥解密目标Docker镜像每一层的数据;
S4)若目标Docker镜像解密成功,镜像解密模块的初始化容器返回成功后,Kubernetes中的kubelet继续创建应用容器,解密后的目标Docker镜像中的应用被部署到所述应用容器中;若目标Docker镜像解密失败,镜像解密模块的初始化容器返回失败,kubelet终止创建应用容器,并将错误信息上报至Kubernetes的API Server模块。
本实施例中,步骤S1)中,镜像加密模块具体执行以下步骤:
S11)解析原始Docker镜像,得到原始Docker镜像每一层数据的层关系、原始Docker镜像的镜像描述清单、以及每一层数据的原始哈希值;
S12)使用公钥逐层加密原始Docker镜像每一层的数据,得到加密Docker镜像每一层的数据,并计算加密后的每一层数据的哈希值;
S13)将加密后的每一层数据的哈希值替换该层数据的原始哈希值,生成加密特征,计算公钥哈希值,将所述加密特征和公钥哈希值保存在所述原始Docker镜像的镜像描述清单中的Label字段,得到加密Docker镜像的镜像描述清单,将加密Docker镜像每一层的数据和加密Docker镜像的镜像描述清单重组为加密Docker镜像,根据加密Docker镜像的描述清单计算镜像ID并重命名加密Docker镜像,将重命名后的加密Docker镜像上传至镜像仓库。
本实施例中,密钥管理模块在步骤S2)之前还执行搭建vault服务器和部署KMS插件的步骤,具体包括:在Kubernetes集群中搭建vault服务器,然后在Kubernetes APIServer所在节点部署KMS插件。
本实施例中,镜像解密模块在步骤S3)中在目标Docker镜像的应用清单中加入用于解密镜像的初始化容器步骤包括:
S301)获取kubelet创建的初始化容器,将目标Docker镜像的名称作为所述初始化容器的环境变量;
S302)将宿主机的Docker Socket文件映射到所述初始化容器中;
S303)根据所述Docker Socket文件,在初始化容器中使用Docker client API查找宿主机中的目标Docker镜像信息,若存在查找结果,则目标Docker镜像已部署并解密,初始化容器返回成功并执行步骤S4),若不存在查找结果,则目标Docker镜像未部署。
本实施例中,镜像解密模块在步骤S301)中还将Secret资源对象映射到所述初始化容器中;在步骤S302)中还将镜像存储目录映射到所述初始化容器中;镜像解密模块在步骤S303)之后具体执行以下步骤:
S31)根据镜像存储目录,从镜像仓库中拉取目标Docker镜像,在初始化容器中使用Docker client API获取目标Docker镜像的镜像描述清单;
S32)若所述描述清单中没有加密特征,则目标Docker镜像不是加密Docker镜像,初始化容器返回成功并执行步骤S4),若所述描述清单中有加密特征,找到被映射的Secret资源对象,并通过KMS插件和vault服务器对所映射的Secret资源对象解密;
S33)在初始化容器中使用Docker client API,将目标Docker镜像的镜像描述清单中的公钥哈希值匹配Secret资源对象,若存在匹配结果,则用对应的私钥解密目标Docker镜像每一层的数据,解密完成后初始化容器返回成功并执行步骤S4),若不存在匹配结果或者解密失败,初始化容器返回失败。
上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。因此,凡是未脱离本发明技术方案的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落在本发明技术方案保护的范围内。
Claims (10)
1.一种Docker镜像加密及编排方法,其特征在于,包括以下步骤:
S1)使用公钥对原始Docker镜像每一层的数据加密,得到加密后的层数据以及对应的加密特征,将所述加密特征和公钥哈希值保存在原始Docker镜像的镜像描述清单中,重组加密Docker镜像,将所述加密Docker镜像上传至镜像仓库;
S2)定义Kubernetes的Secret资源对象并录入私钥和对应公钥的哈希值,通过KMS插件和vault服务器对所述Secret资源对象实时加解密;
S3)在Kubernetes中部署加密镜像应用时,在目标Docker镜像的应用清单中加入用于解密的初始化容器,若目标Docker镜像未部署,从镜像仓库中拉取目标Docker镜像,利用初始化容器判断目标Docker镜像是否为加密Docker镜像,是则通过KMS插件和vault服务器对所述Secret资源对象解密得到所述私钥和对应的公钥哈希值,将目标Docker镜像的镜像描述清单中的公钥哈希值匹配Secret资源对象解密得到的公钥哈希值,若匹配成功则用对应的私钥解密目标Docker镜像每一层的数据;
S4)若目标Docker镜像解密成功,Kubernetes中的kubelet继续创建应用容器,解密后的目标Docker镜像中的应用被部署到所述应用容器中;若目标Docker镜像解密失败,则终止创建应用容器,且kubelet将错误信息上报至Kubernetes的API Server模块。
2.根据权利要求1所述的Docker镜像加密及编排方法,其特征在于,步骤S1)具体包括以下步骤:
S11)解析原始Docker镜像,得到原始Docker镜像每一层数据的层关系、原始Docker镜像的镜像描述清单、以及每一层数据的原始哈希值;
S12)使用公钥逐层加密原始Docker镜像每一层的数据,得到加密Docker镜像每一层的数据,并计算加密后的每一层数据的哈希值;
S13)用加密后的每一层数据的哈希值替换该层的原始哈希值,生成加密特征,计算公钥哈希值,将它们保存在所述原始Docker镜像的镜像描述清单中的Labels字段,得到加密Docker镜像的描述清单,并重组得到加密Docker镜像,根据加密Docker镜像的描述清单计算镜像ID并重命名加密Docker镜像,将重命名后的加密Docker镜像上传至镜像仓库。
3.根据权利要求1所述的Docker镜像加密及编排方法,其特征在于,步骤S2)之前还包括搭建vault服务器和部署KMS插件的步骤,具体包括:在Kubernetes集群中搭建vault服务器,然后在Kubernetes API Server所在节点部署KMS插件。
4.根据权利要求1所述的Docker镜像加密及编排方法,其特征在于,步骤S3)中在目标Docker镜像的应用清单中加入用于解密镜像的初始化容器步骤具体包括:
S301)获取kubelet创建的初始化容器,将目标Docker镜像的名称作为所述初始化容器的环境变量;
S302)将宿主机的Docker Socket文件映射到所述初始化容器中;
S303)根据所述Docker Socket文件,在初始化容器中使用Docker client API查找宿主机中的目标Docker镜像信息,若存在查找结果,则目标Docker镜像已部署并解密,初始化容器返回成功并执行步骤S4),若不存在查找结果,则目标Docker镜像未部署。
5.根据权利要求4所述的Docker镜像加密及编排方法,其特征在于,步骤S301)还包括将Secret资源对象映射到所述初始化容器中;步骤S302)还包括将镜像存储目录映射到所述初始化容器中;步骤S303)之后具体包括以下步骤:
S31)根据镜像存储目录,从镜像仓库中拉取目标Docker镜像,在初始化容器中使用Docker client API获取目标Docker镜像的镜像描述清单;
S32)若所述描述清单中没有加密特征,则目标Docker镜像不是加密Docker镜像,初始化容器返回成功并执行步骤S4),若所述描述清单中有加密特征,找到被映射的Secret资源对象,并通过KMS插件和vault服务器对所映射的Secret资源对象解密;
S33)在初始化容器中使用Docker client API,将目标Docker镜像的镜像描述清单中的公钥哈希值匹配Secret资源对象,若存在匹配结果,则用对应的私钥解密目标Docker镜像每一层的数据,解密完成后初始化容器返回成功并执行步骤S4),若不存在匹配结果或者解密失败,初始化容器返回失败。
6.一种Docker镜像加密及编排系统,其特征在于,包括:
镜像加密模块,用于使用公钥对原始Docker镜像每一层的数据加密,得到加密后的层数据以及对应的加密特征,将所述加密特征和公钥哈希值保存在原始Docker镜像的镜像描述清单中并重组为加密Docker镜像,将所述加密Docker镜像上传至镜像仓库;
密钥管理模块,用于定义Kubernetes的Secret资源对象并在Secret资源对象中录入私钥和所述私钥对应公钥的哈希值,通过KMS插件和vault服务器对所述Secret资源对象实时加密;还用于读取Secret资源对象时通过KMS插件和vault服务器对所述Secret资源对象解密;
镜像解密模块,用于在Kubernetes中部署加密镜像应用时,加密镜像的应用清单中加入用于解密的初始化容器,若目标Docker镜像未部署,从镜像仓库中拉取目标Docker镜像,利用初始化容器判断目标Docker镜像是否为加密Docker镜像,是则通过密钥管理模块读取Secret资源对象得到所述私钥和对应的公钥哈希值,将目标Docker镜像的镜像描述清单中的公钥哈希值匹配Secret资源对象解密得到的公钥哈希值,若匹配成功则用对应的私钥解密目标Docker镜像每一层的数据。
7.根据权利要求6所述的Docker镜像加密及编排系统,其特征在于,所述镜像加密模块具体包括:
镜像解析单元,用于解析原始Docker镜像,得到原始Docker镜像每一层数据的层关系、原始Docker镜像的镜像描述清单、以及每一层数据的原始哈希值;
分层加密单元,用于使用公钥逐层加密原始Docker镜像每一层的数据,得到加密Docker镜像每一层的数据,并计算加密后的每一层的哈希值;
镜像重组单元,用于将加密后的每一层数据的哈希值替换该层数据的原始哈希值,生成加密特征,计算公钥哈希值,将所述加密特征和公钥哈希值保存在所述原始Docker镜像的镜像描述清单中的Labels字段,得到加密Docker镜像的镜像描述清单,将加密Docker镜像每一层的数据、加密Docker镜像的镜像描述清单重组得到加密Docker镜像,根据加密Docker镜像的描述清单计算镜像ID并重命名加密Docker镜像,将重命名后的加密Docker镜像上传至镜像仓库。
8.根据权利要求6所述的Docker镜像加密及编排系统,其特征在于,所述密钥管理模块还用于在Kubernetes集群中搭建vault服务器,然后在Kubernetes API Server所在节点部署KMS插件。
9.根据权利要求6所述的Docker镜像加密及编排系统,其特征在于,所述镜像解密模块还被配置以执行:
获取kubelet创建的初始化容器,将目标Docker镜像的名称作为所述初始化容器的环境变量;
将宿主机的Docker Socket文件映射到所述初始化容器中;
根据所述Docker Socket文件,在初始化容器中使用Docker client API查找宿主机中的目标Docker镜像信息,若存在查找结果,则目标Docker镜像已部署并解密,初始化容器返回成功且kubelet继续创建应用容器,若不存在查找结果,则目标Docker镜像未部署。
10.根据权利要求9所述的Docker镜像加密及编排系统,其特征在于,所述镜像解密模块还用于将Secret资源对象映射到所述初始化容器中,以及将镜像存储目录映射到所述初始化容器中,所述镜像解密模块还被配置以执行:
根据镜像存储目录,从镜像仓库中拉取目标Docker镜像,在初始化容器中使用Dockerclient API获取目标Docker镜像的镜像描述清单;
若所述描述清单中没有加密特征,则目标Docker镜像不是加密Docker镜像,则返回成功之后kubelet继续创建应用容器,若所述描述清单中有加密特征,通过密钥管理模块读取所映射的Secret资源对象;
在初始化容器中使用Docker client API,将目标Docker镜像的镜像描述清单中的公钥哈希值匹配Secret资源对象,若存在匹配结果,则用对应的私钥解密目标Docker镜像每一层的数据,解密完成后初始化容器返回成功,若不存在匹配结果或者解密失败,初始化容器返回失败。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210547157.0A CN114978672B (zh) | 2022-05-19 | 2022-05-19 | 一种Docker镜像加密及编排方法与系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210547157.0A CN114978672B (zh) | 2022-05-19 | 2022-05-19 | 一种Docker镜像加密及编排方法与系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114978672A true CN114978672A (zh) | 2022-08-30 |
CN114978672B CN114978672B (zh) | 2024-03-26 |
Family
ID=82984310
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210547157.0A Active CN114978672B (zh) | 2022-05-19 | 2022-05-19 | 一种Docker镜像加密及编排方法与系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114978672B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102025743A (zh) * | 2010-12-20 | 2011-04-20 | 北京世纪互联工程技术服务有限公司 | 一种云计算中虚拟机镜像导出方法及装置 |
US20170180346A1 (en) * | 2015-12-18 | 2017-06-22 | Amazon Technologies, Inc. | Software container registry service |
CN109587233A (zh) * | 2018-11-28 | 2019-04-05 | 深圳前海微众银行股份有限公司 | 多云容器管理方法、设备及计算机可读存储介质 |
CN112054899A (zh) * | 2020-08-28 | 2020-12-08 | 航天科工网络信息发展有限公司 | 一种基于加密机的容器镜像加密管理方法 |
US20210303365A1 (en) * | 2020-03-26 | 2021-09-30 | Vmware, Inc. | System and method for benchmarking a container orchestration platform |
CN113572619A (zh) * | 2021-09-22 | 2021-10-29 | 银河麒麟软件(长沙)有限公司 | 一种基于notary的容器云镜像可信实现方法及系统 |
CN114254399A (zh) * | 2021-12-23 | 2022-03-29 | 中国工商银行股份有限公司 | 一种镜像安全检查方法、装置、电子设备和存储介质 |
CN114266060A (zh) * | 2021-12-28 | 2022-04-01 | 航天科工智能运筹与信息安全研究院(武汉)有限公司 | 一种模型容器加密与部署方法 |
-
2022
- 2022-05-19 CN CN202210547157.0A patent/CN114978672B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102025743A (zh) * | 2010-12-20 | 2011-04-20 | 北京世纪互联工程技术服务有限公司 | 一种云计算中虚拟机镜像导出方法及装置 |
US20170180346A1 (en) * | 2015-12-18 | 2017-06-22 | Amazon Technologies, Inc. | Software container registry service |
CN109587233A (zh) * | 2018-11-28 | 2019-04-05 | 深圳前海微众银行股份有限公司 | 多云容器管理方法、设备及计算机可读存储介质 |
US20210303365A1 (en) * | 2020-03-26 | 2021-09-30 | Vmware, Inc. | System and method for benchmarking a container orchestration platform |
CN112054899A (zh) * | 2020-08-28 | 2020-12-08 | 航天科工网络信息发展有限公司 | 一种基于加密机的容器镜像加密管理方法 |
CN113572619A (zh) * | 2021-09-22 | 2021-10-29 | 银河麒麟软件(长沙)有限公司 | 一种基于notary的容器云镜像可信实现方法及系统 |
CN114254399A (zh) * | 2021-12-23 | 2022-03-29 | 中国工商银行股份有限公司 | 一种镜像安全检查方法、装置、电子设备和存储介质 |
CN114266060A (zh) * | 2021-12-28 | 2022-04-01 | 航天科工智能运筹与信息安全研究院(武汉)有限公司 | 一种模型容器加密与部署方法 |
Non-Patent Citations (3)
Title |
---|
TORKURA等: "CAVAS: Neutralizing Application and Container Security Vulnerabilities in the Cloud Native Era", 《 SECURITY AND PRIVACY IN COMMUNICATION NETWORKS》, 31 December 2018 (2018-12-31) * |
李翔;: "在私有Kubernetes集群中实现服务的负载均衡", 电子技术与软件工程, no. 14, 15 July 2020 (2020-07-15) * |
许丽婷;傅翔君;杨晶晶;: "基于Docker技术的分层式数据安全性防护系统", 信息化研究, no. 01, 20 February 2017 (2017-02-20) * |
Also Published As
Publication number | Publication date |
---|---|
CN114978672B (zh) | 2024-03-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10043029B2 (en) | Cloud storage encryption | |
WO2022252632A1 (zh) | 一种数据加密处理方法、装置、计算机设备及存储介质 | |
US10445517B1 (en) | Protecting data in insecure cloud storage | |
JP5679018B2 (ja) | データベース暗号化システムと方法及びプログラム | |
US9430211B2 (en) | System and method for sharing information in a private ecosystem | |
US8213620B1 (en) | Method for managing cryptographic information | |
EP3565174B1 (en) | Access management system, access management method, and program | |
US20180341556A1 (en) | Data backup method and device, storage medium and server | |
CN111884986B (zh) | 一种数据加密处理方法、装置及存储介质 | |
GB2522971A (en) | Unclonable ID based chip-to-chip communication | |
Virvilis et al. | Secure cloud storage: Available infrastructures and architectures review and evaluation | |
US10963593B1 (en) | Secure data storage using multiple factors | |
US10630722B2 (en) | System and method for sharing information in a private ecosystem | |
Dowsley et al. | A survey on design and implementation of protected searchable data in the cloud | |
CN103546547A (zh) | 一种云存储文件加密系统 | |
Virvilis et al. | A cloud provider-agnostic secure storage protocol | |
EP4020265A1 (en) | Method and device for storing encrypted data | |
CN111901105B (zh) | 一种基于UEFI架构EDK2支持Openssl算法的方法与设备 | |
CN117061126A (zh) | 一种管理云盘文件加密与解密的系统和方法 | |
CN116132041A (zh) | 密钥处理方法、装置、存储介质及电子设备 | |
CN114978672B (zh) | 一种Docker镜像加密及编排方法与系统 | |
CN114266060B (zh) | 一种模型容器加密与部署方法 | |
CN110430046B (zh) | 一种面向云环境的可信平台模块两阶段密钥复制方法 | |
CN111130788B (zh) | 数据处理方法和系统、数据读取方法和iSCSI服务器 | |
US20240204986A1 (en) | Data protection using portable data structures |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |