《OpenShift 4.x HOL教程汇总》
说明:本文已经在 OpenShift 4.14 环境中验证
文章目录
调整在 Pipeline 中 Task 使用的镜像源
由于无法从国内直接访问谷歌 gcr.io 网站的镜像,因此需要进入上一步安装在 cicd 项目 “管道”中的 “任务”,然后修改以下 2 个任务中使用的镜像:
-
dependency-report 任务
将 gcr.io/cloud-builders/mvn:3.5.0-jdk-8 改为 docker.io/library/maven:3.5.0-jdk-8 -
maven 任务
将 gcr.io/cloud-builders/mvn 改为 docker.io/library/maven:latest -
git-update-deployment 任务
将 k8s.gcr.io/kustomize/kustomize:v3.8.7 改为 quay.io/dawnskyliu/kustomize:v3.8.7
用 RHACS 在 CICD 中发现安全违规项目
- 在 OpenShift 控制台进入 Pipelines 菜单,然后运行 cicd 项目中的 petclinic-build-dev。
- 在 Start Pipeline 弹出窗口中按照以下内容为设置 workspace 和 maven-settings 的参数。
workspace
——> PVC: petclinic-build-workspace
maven-settings
——> Config Map: maven-settings
- 确认运行的 Pipeline 在 image-check 任务提示出错。
- 可查看 image-check 任务,确认提示有以下 2 类违规问题。其中 “Fixable Severity at least Important” 严重程度为 HIGH,所以没有通过镜像检查。另外还通过 “Red Hat Package Manager in Image” 策略检查出构建好的应用镜像中包含 yum、rpm 等程序,认为有级别为 Low的安全风险。
注意:由于可能有新的安全漏洞会被发现,因此发现的违规项目可能会更多。
- 在 RHACS 中的 Violations 中也可找到名为 spring-petclinic 的 Deployment 中的 Fixable Severity at least Important 违规项目。
- 进入上图 Fixable Severity at least Important 链接,可以看到违规项目说明。
修复安全问题
修复 “Fixable Severity at least Important” 类问题
在 cicd 项目中找到名为 gogs 的路由,然后用浏览器访问路由地址。用 gogs/gogs 登录后编辑修改 spring-petclinic 仓库中的 pom.xml 文件,将 <version> 中的内容改为下图的 “2.2.13.RELEASE”,最后提交保存更改。
注意:因为有些新发现的安全漏洞不一定立即就有修复方法,如果发现还提示有其它 “Fixable Severity at least Important”,为了能让 CI/CD Pipeline 运行完,可以先在 RHACS 中修改 Fixable Severity at least Important 策略的 Response method,从 Inform and enforce 改为 Inform 即可。
修复 “Red Hat Package Manager in Image” 类问题
- 以下提示在镜像中发现 rpm 和 yum 包管理器,存在一定风险。可以通过右侧的方法删除镜像中的包管理器。
- 运行以下命令更新名为 s2i-java-11 的任务。
$ oc apply -f https://raw.githubusercontent.com/liuxiaoyu-git/SecurityDemos/master/2021Labs/OpenShiftSecurity/documentation/labs-artifacts/s2ijava-mgr.yaml -n cicd
或者找到名为 s2i-java-11 的任务,然后计加入以下 Step 内容。
- args:
- |-
buildah from --storage-driver=vfs --tls-verify=$(params.TLSVERIFY) '$(params.IMAGE_NAME):$(params.IMAGE_TAG)' > imgname
buildah run --user=root --storage-driver=vfs `cat imgname` -- sh -c 'rpm -e $(rpm -qa *dnf*) $(rpm -qa *libsolv*) $(rpm -qa *hawkey*) $(rpm -qa yum*) $(rpm -qa *dnf*) $(rpm -qa *subscription-manager*)'
buildah run --user=root --storage-driver=vfs `cat imgname` -- sh -c 'rpm -e $(rpm -qa *rpm*)'
buildah commit --storage-driver=vfs --tls-verify=$(params.TLSVERIFY) `cat imgname` '$(params.IMAGE_NAME):$(params.IMAGE_TAG)'
command:
- /bin/sh
- -c
image: registry.redhat.io/rhel8/buildah@sha256:180c4d9849b6ab0e5465d30d4f3a77765cf0d852ca1cb1efb59d6e8c9f90d467
name: remove-package-mgr
resources: {}
volumeMounts:
- mountPath: /var/lib/containers
name: varlibcontainers
- mountPath: /gen-source
name: gen-source
workingDir: /gen-source
验证修复结果
再次运行名为 petlinic-build-dev 的 Pipeline,确认已经修复好,并且 CI/CD Pipeline 可以成功运行完成。
演示视频
参考
https://github.com/rcarrata/devsecops-demo
https://github.com/liuxiaoyu-git/DevSecOps-Demos/blob/master/2021Labs/OpenShiftSecurity/documentation/lab4.adoc