Docker镜像仓库的权限认证方法和系统与流程

文档序号:11216748阅读:1066来源:国知局
Docker镜像仓库的权限认证方法和系统与流程

本发明涉及docker技术领域,具体涉及docker镜像仓库的权限认证方法和系统。



背景技术:

docker(docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的linux机器上,也可以实现虚拟化)提供的容器技术允许在同一台主机或虚拟机上运行若干个容器(container),每个容器就是一个独立的虚拟环境或应用。

容器来源于docker镜像(image),而镜像可以由用户自制(build)或由运行中的容器提交(commit)来生成,镜像生成后,可以推送(push)到镜像仓库(registry)中进行保存,也可以从镜像仓库拉取(pull)到本地以运行容器。docker提供了官方镜像仓库(dockerhub),同时允许用户自行搭建私有镜像仓库(privateregistry)。对于大多数机构和组织,使用私有镜像仓库是很有必要的,用以保护仓库的镜像内容及使用。

当用户访问docker镜像时,针对不同镜像仓库内的镜像,需要细化访问权限控制。例如,对于公共镜像(即访问官方镜像仓库),任何用户都能够拉取(pull)镜像,而只有系统管理员可以推送(push)镜像;对于用户自己命名空间(namespace)下的镜像(即私有docker镜像仓库),只有通过了权限验证的该用户才能够拉取/推送镜像,即在访问时需要根据用户终端的身份判断有哪些仓库中的镜像可以拉取,或者可以往哪些仓库中推送镜像,能够提高镜像的安全性。

目前,docker镜像服务器的权限设置比较简单,一般采用两种方式,第一种方式是只检查用户认证信息在请求时是否一并提供,并不验证其真假;第二种方式是配置静态的用户名与密码对,且需要预先生成密码文件,通过简单的用户登录就可以操作镜像服务。

可见上述两种方式的权限控制方式都不够安全,都不能满足镜像安全的要求。因此,现有技术还有待于改进和发展。



技术实现要素:

针对现有技术的上述缺陷,本发明提供一种docker镜像仓库的权限认证方法和系统,主要解决现有docker镜像访问不安全的问题。

本发明解决技术问题所采用的技术方案如下:

一种docker镜像仓库的权限认证方法,包括如下步骤:

访问镜像仓库被拒绝时,接收镜像仓库返回的未授权错误信息,所述未授权错误信息的响应头中包含认证方法提示信息;

解析所述未授权错误信息,并根据认证方法提示信息生成权限认证请求发送给令牌服务器进行权限认证;

接收令牌服务器返回的令牌,并携带所述令牌向镜像仓库发送访问请求;

接收镜像仓库返回的镜像。

所述的docker镜像仓库的权限认证方法中,所述解析所述未授权错误信息,并根据认证方法提示信息生成权限认证请求发送给令牌服务器进行权限认证的步骤包括:

解析所述未授权错误信息,获取未授权错误信息的响应头中包含认证方法提示信息;

根据认证方法提示信息的提示,利用用户认证信息、请求镜像内容范围生成权限认证请求信息;

将所述权限认证请求信息发送给令牌服务器。

所述的docker镜像仓库的权限认证方法中,所述根据认证方法提示信息的提示,利用用户认证信息、请求镜像内容范围生成权限认证请求信息的步骤包括:

根据认证方法提示信息将用户认证信息加密,放在https请求的请求头部,将请求的镜像内容范围置于https请求的请求参数中,基于该https请求的请求头部及请求参数生成权限认证请求信息。

所述的docker镜像仓库的权限认证方法中,在将所述权限认证请求信息发送给令牌服务器的步骤之后、接收令牌服务器返回的令牌,并携带所述令牌向镜像仓库发送访问请求的步骤之前,所述权限认证方法还包括:

令牌服务器解析所述权限认证请求信息,并验证用户认证信息;

在用户认证通过时,根据请求的镜像内容范围判断客户端是否能访问其请求的镜像内容;

当客户端能访问其请求的镜像内容时,根据用户认证信息、请求的镜像内容范围生成令牌返回给客户端。

所述的docker镜像仓库的权限认证方法中,在接收令牌服务器返回的令牌,并携带所述令牌向镜像仓库发送访问请求的步骤之后、接收镜像仓库返回的镜像的步骤之前,还包括:

镜像仓库接收所述令牌,解析并验证所述令牌,在验证通过时,向客户端返回镜像。

所述的docker镜像仓库的权限认证方法中,所述令牌包括头部、载荷和签名,所述签名的生成方法包括:

在头部和载荷中,去掉其格式中的非内容的空格符,分别对头部和载荷进行压缩;

采用编码器分别对压缩的头部和载荷进行编码;

将编码后的头部和载荷用小数点相连;

使用头部中指定的加密算法,利用私钥进行签名生成令牌的签名。

所述的docker镜像仓库的权限认证方法中,所述访问镜像仓库被拒绝时,接收镜像仓库返回的未授权错误信息,所述未授权错误信息的响应头中包含认证方法提示信息的步骤之前,所述的权限认证方法还包括:

将公钥置于镜像仓库中,用于生成令牌头部的密钥标识,将私钥置于令牌服务器中用于对令牌签名。

一种docker镜像仓库的权限认证系统,其包括权限认证设备;所述权限认证设备包括:

访问模块,用于访问镜像仓库;

接收模块,用于访问镜像仓库被拒绝时,接收镜像仓库返回的未授权错误信息,所述未授权错误信息的响应头中包含认证方法提示信息;

解析模块,用于解析所述未授权错误信息,并根据认证方法提示信息生成权限认证请求发送给令牌服务器进行权限认证;

所述接收模块,也用于接收令牌服务器返回的令牌;

权限认证请求模块,用于携带所述令牌向镜像仓库发送访问请求;

所述接收模块,还用于接收镜像仓库返回的镜像;

所述的docker镜像仓库的权限认证系统,还包括令牌服务器,所述令牌服务器包括:

验证模块,用于解析所述权限认证请求信息,并验证用户认证信息;

判断模块,用于在用户认证通过时,根据请求的镜像内容范围判断客户端是否能访问其请求的镜像内容;

令牌处理模块,用于当客户端能访问其请求的镜像内容时,根据用户认证信息、请求的镜像内容范围生成令牌返回给客户端。

所述的docker镜像仓库的权限认证系统,还包括镜像仓库,用于接收所述令牌,解析并验证所述令牌,在验证通过时,向客户端返回镜像。

本发明公开了docker镜像仓库的权限认证方法和系统,其权限认证方法先由访问镜像仓库被拒绝时,接收镜像仓库返回的未授权错误信息,所述未授权错误信息的响应头中包含认证方法提示信息;之后,解析所述未授权错误信息,并根据认证方法提示信息生成权限认证请求发送给令牌服务器进行权限认证;之后,接收令牌服务器返回的令牌,并携带所述令牌向镜像仓库发送访问请求;接收镜像仓库返回的镜像,即完成了私有docker镜像仓库的访问操作。本发明通过将权限认证交由第三方进行验证,根据请求令牌发放权限,提高了镜像的安全性。

附图说明

图1为本发明提供的docker镜像仓库的权限认证方法的较佳实施例的流程图。

图2为本发明提供的docker镜像仓库的权限认证方法中步骤s20的较佳实施例的流程图。

图3为本发明提供的docker镜像仓库的权限认证方法中令牌的签名的方法流程示意图。

图4为本发明提供的docker镜像仓库的权限认证方法中一应用实施例的示意图。

图5为本发明提供的docker镜像仓库的权限认证系统较佳实施例的功能模块图。

图6为本发明提供的docker镜像仓库的权限认证系统中权限认证设备的解析模块的功能模块图。

图7为本发明提供的docker镜像仓库的权限认证系统中令牌服务器的令牌处理模块的功能模块图。

具体实施方式

本发明针对目前镜像权限管理的需求,将认证程序部署在各个镜像仓库中,利用镜像仓库指定外部令牌服务器为用户对私有docker镜像仓库及其镜像的访问提供认证服务。每当镜像仓库接收到对镜像的访问请求时,指示客户端将用户信息、访问的镜像信息、访问动作发送至令牌服务器,令牌服务器根据用户信息决定是否授予用户所请求的访问权限。

具体为:如果访问的是公共镜像,且访问动作为拉取,则授权访问;如果用户信息通过了ldap认证,且访问的镜像位于该用户的命名空间下,则授权访问;如果用户信息通过了ldap认证,且是系统管理员,则授权访问;其他情况不授权,提高了镜像的安全性。本发明利用令牌服务器可以允许第三方更为复杂和完善的认证,同时认证可以结合数据库认证、配置认证、ldap认证等方式,提供多种权限的灵活组合,具有更大的灵活性。

为使本发明的目的、技术方案及优点更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

请参阅图1,其为本发明提供的docker镜像仓库的权限认证方法的较佳实施例的流程图。如图1所示,本发明较佳实施例所述的docker镜像仓库的权限认证方法以下步骤:

s10、访问镜像仓库被拒绝时,接收镜像仓库返回的未授权错误信息,所述未授权错误信息的响应头中包含认证方法提示信息。

本实施例中,所述镜像仓库为私有docker镜像仓库,在访问时,通过客户端使用登录docker镜像仓库、推送docker镜像、拉取docker镜像等命令时,由docker客户端进程对镜像仓库发出请求。

在镜像仓库识别客户端为第一次访问时,向客户端返回未授权错误信息,并在授权错误信息的文件头中提示客户端认证的方法,提示客户端需要去令牌服务器中获取令牌。

s20、解析所述未授权错误信息,并根据认证方法提示信息生成权限认证请求发送给令牌服务器进行权限认证。

客户端收到未授权错误信息,首先对未授权错误信息解析获取认证方法提示信息,再根据认证方法的提示向令牌服务器请求令牌。请参阅图2,其为本发明提供的docker镜像仓库的权限认证方法中步骤s20的较佳实施例的流程图。

如图2所示,所述步骤s20包括:

s21、解析所述未授权错误信息,获取未授权错误信息的响应头中包含认证方法提示信息;

s22、根据认证方法提示信息的提示,利用用户认证信息、请求镜像内容范围生成权限认证请求信息;

s23、将所述权限认证请求信息发送给令牌服务器。

在步骤s22中,在生成权限认证请求信息时,由docker客户端进程根据认证方法提示信息将用户认证信息加密,放在https请求的请求头部,将请求的镜像内容范围置于https请求的请求参数中,基于该https请求的请求头部及请求参数生成权限认证请求信息。

本实施例中,所述认证信息包括用户名和密码,具体实施时,先由docker客户端进程根据镜像仓库返回的提示,将用户的认证信息加密后放在https(hypertexttransferprotocoloversecuresocketlayer,是以安全为目标的http通道,简单讲是http的安全版)请求的authorization头部,同时将用户请求的镜像内容范围置于https请求的请求参数中,发送给令牌服务器,将权限认证工作交由令牌服务器处理。

s30、接收令牌服务器返回的令牌,并携带所述令牌向镜像仓库发送访问请求。

具体实施时,docker客户端进程拿到token(令牌)后,带令牌再次向镜像仓库请求相同的镜像内容。在镜像仓库收到令牌后对令牌进行解析,从而决定对用户的请求进行放行或阻挡。

较佳地,在令牌服务器收到权限认证请求信息之后,令牌服务器将执行如下动作:

首先、由令牌服务器解析所述权限认证请求信息,并验证用户认证信息;

接着、在用户认证通过时,根据请求的镜像内容范围判断客户端是否能访问其请求的镜像内容。在用户认证不能通过时返回错误令牌,告之客户端没有权限访问镜像仓库。

之后、当客户端能访问其请求的镜像内容时,根据用户认证信息、请求的镜像内容范围生成令牌返回给客户端。在用户认证信息通过验证,但客户端不能访问指定的镜像内容时,生成错误信息,返回给docker客户端进程,告之客户端没有权限访问其请求的内容。

由于docker镜像仓库认可令牌格式为jwt(jsonwebtoken)格式,所述令牌包括头部、载荷和签名,并且头部、载荷、签名之间由小数点隔开。

具体而言,jwt格式的令牌由头部(header)、载荷(claim)及签名(signature)三部分组成,各段由"."(即小数点)符号分隔,tokenserver(令牌服务器)按jwt格式生成令牌。

为了更好的理解本发明的令牌生成过程,以下对令牌的三个组成部分进行详细说明:

1)header(头部)

头部(header)包括令牌的类型、生成签名的算法(如rss256算法)、密钥标识等。其中,密钥标识是一个由签名密钥的公共部分生成的唯一id(identificationidentity,身份)。将der加密的公钥截取240字节,分成12个base32的分组。

header的格式为:

{

"typ":"jwt",

"alg":"rs256",

"kid":"abcd:efgh:ijkl:mnop:qrst:uvwx:yz12:3456:abcd:efgh:ijkl:mnop"

}

其中:typ-type(类型),即token的类型,此处为jwt。

alg-algorithm(算法),即生成签名的算法,此处为rs256算法。

kid-keyid(密钥标识),它是一个由签名密钥的公共部分生成的唯一id。通过将der加密的公钥截取240字节,分成12个base32的分组,其生成的kid的格式为:abcd:efgh:ijkl:mnop:qrst:uvwx:yz12:3456:abcd:efgh:ijkl:mnop。

)claim(载荷)

载荷由主题、签发者、权限列表、超时时间、签发时间、起始时间和令牌的观察/查验者等组成。其中,权限列表为由具体涉及的权限组成的数组。每个权限的类型指明访问的类型(例如repository代表镜像仓库),name表示访问的对象名(如镜像仓库名称),actions数组指定要进行的动作(如pull、push等)。

claim的格式为:

{

"sub":"mysubject",

"iss":"token-server",

"access":[

{

"type":"repository",

"name":"official/tomcat",

"actions":[

"pull","push"

]

}

],

"exp":1454289999,

"iat":1454280000,

"nbf":1454280000,

"aud":"registry-server"

}

其中:sub-subject(主题),即token的主题。

iss-issuer(发行人),即token的签发者,此处为令牌服务器。

access-权限列表,由具体涉及的权限组成的数组,每个access的type指明访问的类型(如repository代表镜像仓库),name表示访问的对象名(如仓库名称),actions数组指定要进行的动作(如pull,push等)。

exp-expiration(届期),即token的超时时间。

iat-issuedat(发行时间),即token的签发时间。

nbf-notbefore(起始时间),即token的起始时间,通常与iat相等。

aud-audience(观众),即token的观察者/查验者,此处为docker镜像仓库。

3)signature(签名)

signature为使用私钥对jwt格式的令牌进行签名,如图4所示,所述签名的生成方法包括:s301、在头部和载荷中,去掉其格式中的非内容的空格符,分别对头部和载荷进行压缩;s302、采用编码器分别对压缩的头部和载荷进行编码;s303、将编码后的头部和载荷用小数点相连;s304、使用头部中指定的加密算法,利用私钥进行签名生成令牌的签名,作为令牌的第三段。

在步骤s301中,头部和载荷格式中的非内容的空格符,为头部和载荷组成部分中采用了“[]”前后的空格,即去掉空格符后不会影响头部和载荷各组成部分。

在步骤s302中,使用针对url(网页地址)的base64编码(base64是网络上最常见的用于传输8bit字节代码的编码方式之一)进行编码,分别得到编码后的头部和载荷。

基于上述令牌的生成方式,本发明在步骤s10之前,还可包括:将公钥置于镜像仓库中,用于生成令牌头部的密钥标识,将私钥置于令牌服务器中用于对令牌签名。

本发明在在使用令牌服务器之前,需要预先生成证书、私钥及公钥,用于使客户端实现令牌服务器与镜像仓库之间的通讯,具体将证书置于令牌服务器中,私钥用于令牌服务器对令牌签名,公钥用于生成令牌头部的kid。

其中,公钥私钥对借助openssl(安全套接字层密码库)生成,其生成的方法如下:

生成私钥及证书

opensslreq-nodes-newkeyrsa:4096-keyoutregistry-auth.key-outroot.crt-days3650-x509

-subj"/cn=caas-issuer"

使用私钥生成公钥,将其编码为der格式

opensslrsa-inregistry-auth.key-pubout-outformder-outregistry-auth.der

s40、接收镜像仓库返回的镜像。

在步骤s40之前,本发明的拉取镜像和推送镜像还包括:镜像仓库接收所述令牌,解析并验证所述令牌,在验证通过时,向客户端返回镜像。

在验证通过时,主要利用公钥验证令牌,及请求的请求的镜像内容范围是否与上一次相同,当二者均验证通过时,反正其请求的镜像。

本发明访问镜像仓库和令牌服务器的操作均通过linux系统的用户终端完成,通过第三方进行权限认证的方式提高了docker镜像的安全性。

为了节省网络资源,本发明对令牌服务器预先进行了权限控制,对客户端发送的权限认证请求中,https请求头中不包含用户认证信息的令牌请求一律拒绝。

此外,令牌服务器对仓库访问的请求根据仓库名前缀进行了分类处理,提高了工作效率,具体分类包括:

官方仓库:以official(官方的)/或library(图书馆、文库等)/开头的官方公共仓库,如official/tomcat(服务器),任何用户都可以拉取镜像,但只有管理员可以拉取镜像和推送镜像。

用户仓库:以用户名开头的仓库,如zhangsan001/tomcat,任何用户都可以拉取镜像,但只有该用户自己(如zhangsan001)可以推送镜像。

其它仓库:只有管理员可以拉取镜像和推送镜像,此类仓库通常存放一些内部镜像。

更进一步地,在令牌服务器中验证客户端的身份时,也借助外部ldap(lightweightdirectoryaccessprotocol,轻量目录访问协议)进行验证。在验证时,通常只需要验证用户名是否存在、及密码是否正确,但也可以验证用户的某种权限或身份,从而决定是否授予令牌。

在采用ldap验证时,令牌服务器验证用户身份的方式包括:令牌服务器解析所述权限认证请求信息,并验证用户认证信息;之后,将用户认证信息发送给ldap服务器进行用户的身份及权限的验证;在ldap服务器判断认证通过时,令牌服务器为客户端生成令牌,并将令牌返回给客户端。

为了便于更好的理解docker镜像仓库的权限认证方法,以下例举一应用实施例对本发明的docker镜像仓库的权限认证方法进行详细说明:

如图4所示,本应用实施例提供的docker镜像仓库的权限认证方法包括:

第一步、客户端使用dockerlogin、dockerpush、dockerpull等命令时,均由客户端的docker客户端进程对镜像仓库发出请求;

第二步、镜像仓库接到请求后,向客户端返回未授权错误信息,所述未授权错误信息的响应头中包含提示客户端认证的方法;

第三步、docker客户端进程根据提示将用户的认证信息加密后放在https请求的authorization头部,同时将用户请求的内容范围置于请求参数中,发送给令牌服务器;

第四步、令牌服务器解析并验证用户认证令牌及请求镜像内容范围,在验证通过将相应的令牌发送给客户端。

第五步、docker客户端进程拿到令牌后,带着令牌再次向镜像仓库请求相同的内容;

第六步、镜像仓库拿到令牌后,对令牌进行解析和验证,在验证通过时docker客户端进程返回相应的镜像。

2vip及端口将镜像推送送avip及端口和bvip及端口。

基于上述docker镜像仓库的权限认证方法,本发明还提供了一种docker镜像仓库的权限认证系统,如图5所示,所述权限认证系统包括权限认证设备,所述权限认证设备可认为是一种docker客户端,其包括:访问模块21、接收模块22、解析模块23和权限认证请求模块24。本发明所称的模块是指能够完成特定功能的一系列计算机程序指令段,比程序更适合于描述所述docker镜像仓库的权限认证程序在所述docker客户端中的执行过程。以下描述将具体介绍所述模块21-24的功能。

访问模块21,用于访问镜像仓库;

接收模块22,用于访问镜像仓库被拒绝时,接收镜像仓库返回的未授权错误信息,所述未授权错误信息的响应头中包含认证方法提示信息;

解析模块23,用于解析所述未授权错误信息,并根据认证方法提示信息生成权限认证请求发送给令牌服务器进行权限认证;

所述接收模块22,也用于接收令牌服务器返回的令牌;

权限认证请求模块24,用于携带所述令牌向镜像仓库发送访问请求;

所述接收模块22,还用于接收镜像仓库返回的镜像。

请一并参阅图5和图6,在具体实施时,所述解析模块23包括:

解析单元231,用于解析所述未授权错误信息,获取未授权错误信息的响应头中包含认证方法提示信息;

请求信息生成单元232,用于根据认证方法提示信息的提示,利用用户认证信息、请求镜像内容范围生成权限认证请求信息;

发送单元233,用于将所述权限认证请求信息发送给令牌服务器。

其中,所述请求信息生成单元232,具体用于根据认证方法提示信息将用户认证信息加密,放在https请求的请求头部,将请求的镜像内容范围置于https请求的请求参数中,基于该https请求的请求头部及请求参数生成权限认证请求信息。

请继续参阅图5,本发明的docker镜像仓库的权限认证系统中还包括令牌服务器,所述令牌服务器与权限认证设备进行信息交互,用于生成docker权限认证的令牌,其包括所述令牌服务器包括:验证模块、判断模块和令牌处理模块。

所述验证模块31,用于令牌服务器解析所述权限认证请求信息,并验证用户认证信息;

所述判断模块32,用于在用户认证通过时,根据请求的镜像内容范围判断客户端是否能访问其请求的镜像内容;

所述令牌处理模块33,用于当客户端能访问其请求的镜像内容时,根据用户认证信息、请求的镜像内容范围生成令牌返回给客户端。

其中,所述令牌包括头部、载荷和签名,头部、载荷、签名之间由小数点隔开。

请一并参阅图5和图7,所述令牌处理模块33包括签名处理单元331,用于生成令牌的签名,具体包括:在头部和载荷中,去掉其格式中的非内容的空格符,分别对头部和载荷进行压缩;采用编码器分别对压缩的头部和载荷进行编码;将编码后的头部和载荷用小数点相连;使用头部中指定的加密算法,利用私钥进行签名生成令牌的签名,作为令牌的第三段。

令牌处理模块33包括签名单元332,用于将公钥置于镜像仓库中,来生成令牌头部的密钥标识,将私钥置于令牌服务器中用于对令牌签名。

请继续参阅图5,本发明的docker镜像仓库的权限认证系统还包括镜像仓库,用于接收所述令牌,解析并验证所述令牌,在验证通过时,向客户端返回镜像。

所述镜像仓库还用于将公钥置于镜像仓库中,用于生成令牌头部的密钥标识,将私钥置于令牌服务器中用于对令牌签名。

综上所述,本发明通过将权限认证交由第三方进行验证,根据请求令牌发放权限,提高了镜像的安全性。本发明利用令牌服务器可以允许第三方更为复杂和完善的认证,同时认证可以结合数据库认证、配置认证、ldap认证等方式,提供多种权限的灵活组合,具有更大的灵活性。

当然,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关硬件(如处理器,控制器等)来完成,所述的程序可存储于一计算机可读取的存储介质中,该程序在执行时可包括如上述各方法实施例的流程。其中所述的存储介质可为存储器、磁碟、光盘等。

应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1