Android内核镜像签名,Docker的镜像签名
应⽤上云的过程中,过了部署关和应⽤改造关之后,安全就是下⼀个⼤问题了。对于容器化应⽤来说,镜像的安全是个⾮常根本的问题,例如 Harbor 中集成了 Clair 组件,⽤于对镜像进⾏漏洞扫描;之前介绍的 Trivy 也能够提供对镜像各层进⾏扫描的能⼒,类似的⼯具还有很多。在完成镜像本⾝的安全保障之后,⼀⽅⾯要把安全构建出来的镜像能够”原汁原味“的提供给运⾏时进⾏使⽤,同时还要对运⾏时环境进⾏约束,只允许获取和运⾏可靠镜像,如此才能够保证镜像供应链的完整。
快速上⼿
Harbor 中提供了 Notary 服务来提供了这⽅⾯的保障,Docker 17.12 之后也提供了对应的运⾏时⽀持。
这⾥⽤ 1.10.0 版本的 Harbor 为例,在安装命令中加⼊参数 --with-notary 就可以启⽤这个服务了。启动 Harbor 之后,使⽤ Docker 客户端的终端设置环境变量:export DOCKER_CONTENT_TRUST=1。启⽤ Docker 的内容信任模式。
使⽤ docker login 命令登录仓库,然后进⾏镜像推送,例如:$ docker push 10.211.55.27/sign/clare:s1
The push refers to repository [10.211.55.27/sign/clare]
bbef02a499c4: Layer already exists
...
47a4bb1cfbc7: Layer already exists
s1: digest: sha256:bafc293fd765dbbad5ed3d57d771f0566e5d63a668213f1f61c469cbb199fca6 size: 1162
Signing and pushing trust metadata
You are about to create a new root signing key passphrase. This passphrase
...
Enter passphrase for new root key with ID b52c1ba:
Repeat passphrase for new root key with ID b52c1ba:android获取真正的签名
Enter passphrase for new repository key with ID c37e6d2:
Repeat passphrase for new repository key with ID c37e6d2:
Error: trust data missing for remote repository 10.211.55.27/sign/clare or remote repository not found: timestamp key trust data unavailable. Has a notary repository been initialized?
再次推送:$ docker push 10.211.55.27/sign/clare:s1
The push refers to repository [10.211.55.27/sign/clare]
...
Repeat passphrase for new repository key with ID d6068a9:
Finished initializing "10.211.55.27/sign/clare"
Successfully signed 10.211.55.27/sign/clare:s1
可以看到,推送已经成功了,并且还有签署成功的反馈。查看⼀下他的签名信息:$ docker trust inspect 10.211.55.27/sign/clare:s1
[
{
"Name": "10.211.55.27/sign/clare:s1",
"SignedTags": [
{
"SignedTag": "s1",
"Digest": "bafc293fd765dbbad5ed3d57d771f0566e5d63a668213f1f61c469cbb199fca6",
"Signers": [
"Repo Admin"
]
}
...
如果我们取消 Docker 内容信任:unset DOCKER_CONTENT_TRUST。接下来推送⼀个新镜像:$ docker push
10.211.55.27/sign/alpine:latest
The push refers to repository [10.211.55.27/sign/alpine]
77cae8ab23bf: Pushed
再次开启 Docker 内容信任开关:export DOCKER_CONTENT_TRUST=1,尝试拉取:$ docker pull
10.211.55.27/sign/alpine:latest
Error: remote trust data does not exist for 10.211.55.27/sign/alpine: 10.211.55.27:4443 does not have trust data for 10.211.55.27/sign/alpine
可以看到 Docker 拒绝了未经签署的镜像。
幕后
Docker 包含了简写为 DCT 的内容签名(Docker Content Trust)⽀持,能够借助 Notary 进⾏内容签署和校验。⾸次签署时会要求⽣成根密钥,每次创建⼀个新的 Repository 时候,会为其单独⽣成签署密钥。接下来,每个 Tag 的推送都会进⾏签署,从⽽保证内容的稳定性。
问题Kubernetes 能享受到这个么?
托管 Kubernetes 怎么办?
多镜像仓库怎么办?
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论