《OpenShift 4.x HOL教程汇总》
本文在 OpenShift 4.15 + RHACS 4.4.3 环境中进行验证。
部署测试应用
- 向 OpenShift 导入一个老版本的 “httpd” 镜像以作为安全漏洞较多的基础镜像。
$ oc import-image httpd:2.4-el7-120 --from=registry.redhat.io/rhscl/httpd-24-rhel7:2.4-120 --confirm -n openshift
- 基于老版本的 “httpd” 镜像在 “fix-cve” 项目中部署应用,然后再进行确认测试。
$ oc new-project fix-cve
$ oc new-app openshift/httpd:2.4-el7-120~https://github.com/sclorg/httpd-ex.git --name=http-sample -n fix-cve
$ oc expose svc http-sample -n fix-cve
$ curl -o /dev/null -w '%{http_code}\n' $(oc get route http-sample -n fix-cve -o jsonpath={.spec.host})
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 37451 100 37451 0 0 5224k 0 --:--:-- --:--:-- --:--:-- 5224k
200
镜像漏洞分析
- 在RHACS控制台的 Vulnerability Management 中通过 “fix-cve” 的 Namespace 过滤条件找到 “image-registry.openshift-image-registry.svc:5000/fix-cve/http-sample@sha256:b2d0b4f5894b0f84ac0ceab2cbec8f2b70754b29be8165be31195887a32dd743
” 镜像,确认 CVEs 显示有 “37 Fixable”。
- 在 OpenShift 控制台的 “fix-cve” 项目的 “镜像流” 中可以看到识别符同样为 “sha256:b2d0b4f5894b0f84ac0ceab2cbec8f2b70754b29be8165be31195887a32dd743” 的镜像标签。
- 在 OpenShift 控制台查看名为“http-sample”的构建,确认该构建使用了 “OpenShift” 命名空间中名为 “httpd:2.4-el7-120” 的 “ImageStreamTag” 作为基础镜像(在 OpenShift 中也称为 Builder Image)。
- 在 “OpenShift” 命名空间中名为 “http” 的镜像流中找到 “httpd:2.4-el7-120” 标签,确认它是来自红帽的 “registry.redhat.io/rhscl/httpd-24-rhel7:2.4-120” 镜像,且标识符为 “sha256:7622abadb8bf1a8c7b1a3aace288e67a0db37df7bbaa7c5b5d7f52b378a0c8c9”。
- 查看红帽官方 “https://catalog.redhat.com/software/containers/rhscl/httpd-24-rhel7/57ea8d049c624c035f96f42e?tag=2.4-120&push_date=1600138150000&container-tabs=gti>i-tabs=registry-tokens”,这就是上一步使用的 “registry.redhat.io/rhscl/httpd-24-rhel7:2.4-120” 镜像。根据镜像的 Tag 可以知道它不是最新的版本,因此其中包含的 CVE 较多。
应用镜像安全加固
- 在 Tag 中找到 “rhscl/httpd-24-rhel7” 镜像的最新版本(有可能有比下图的 “2.4-172” 更新的版本)。然后复制 “Image Manifest” 后面的字符串。
- 在 OpenShift 控制台中查看 “openshift” 项目中的 “httpd” 镜像流,确认其中也有标识符为“sha256:e41f578420cc135583b3cbc6e9d49f5a3590acce09749ce4eb36bbc2b1a31d39” 的标签,标签名为 “httpd:2.4-el7”。
- 在OpenShift 控制台中修改 “fix-cvs” 项目中名为 “http-sample” 的构建配置。按照下图,使用 ImageStreamTag 名为 “httpd:2.4-el7” 的镜像,再将 “lastTriggeredImageID” 后面改为“sha256:e41f578420cc135583b3cbc6e9d49f5a3590acce09749ce4eb36bbc2b1a31d39”,最后保存修改。
- 查看 “http-sample” 构建配置中的 “构建”,确认有新的 “http-sample-2” 在运行。在完成运行后可再次确认应用可以访问。
- 在 RHACS 中再次找到 “fix-cve” 命名空间的 Image,此时可以看到新的应用镜像已经没有 “Fixable” 的 CVE 了,这样就加固了应用镜像的安全。