安全服务接入

概述

Zadig 具备管理软件开发全生命周期的能力,几乎支持市面上所有的安全工具和服务。比如 SAST 工具 SonarQube安全服务接入 - 图1 (opens new window)Fortify安全服务接入 - 图2 (opens new window)Coverity安全服务接入 - 图3 (opens new window),SCA 工具 CleanSource安全服务接入 - 图4 (opens new window),DAST 工具 DongTai安全服务接入 - 图5 (opens new window)。Zadig 可以很方便的将这些工具编排到整个交付链路中,借助强大的运行时环境和自定义工作流能力,为安全团队提供强有力的支持。
Zadig 帮助安全团队将安全服务和能力向左移动到开发、测试和运维团队,尽早发现安全问题,使其他角色也参与解决安全性和合规性问题,从而避免因修复此类问题而造成额外成本。

安全服务接入

静态安全 SAST - Sonar

第一步:配置代码扫描

新增代码扫描,选择 SonarQube 扫描工具,填写代码扫描配置,参考文档:代码扫描

安全服务接入手册

第二步:在工作流中编排代码扫描

编辑工作流,按需在指定阶段(比如:构建任务之前)添加代码扫描任务,参考文档:配置工作流

安全服务接入手册

软件成分分析 SCA - Fortify

第一步:构建自定义镜像

  1. 构建自定义镜像并上传到镜像仓库中,参考文档:自定义镜像
  2. 在 Zadig 中添加自定义镜像,参考文档:添加自定义镜像

安全服务接入手册

第二步:配置 SCA 扫描

新增测试,并完成 Fortify SCA 代码扫描的具体配置,相关参数说明如下,更细节的介绍可参考文档:测试

  • 操作系统:第一步中添加的自定义镜像
  • 测试脚本:执行代码扫描的具体命令,可参考 Fortify SCA 官方文档
  • 测试结果导出:配置扫描结果所在的路径

安全服务接入 - 图9 安全服务接入 - 图10

第三步:编排 SCA 扫描

在工作流中编排 SCA 扫描,参考文档:编排任务

安全服务接入 - 图11 安全服务接入 - 图12

运行工作流,待 Fortify SCA 执行完毕后,可下载扫描结果进行分析。

安全服务接入手册

动态安全 IAST - DongTai

第一步:将 IAST 能力集成到服务中

修改服务的 YAML 配置内容,安装 DongTai IAST Agent,并修改服务启动命令。服务 YAML 样例如下:

提示

可以在服务的 YAML 配置内容中灵活使用 Zadig 的服务变量能力,按需控制是否需要为服务安装 Agent 进行动态安全检测,参考文档:服务变量

  1. // 服务原始配置内容
  2. apiVersion: apps/v1
  3. kind: Deployment
  4. metadata:
  5. labels:
  6. app: service1
  7. name: service1
  8. spec:
  9. selector:
  10. matchLabels:
  11. app: service1
  12. template:
  13. metadata:
  14. labels:
  15. app: service1
  16. spec:
  17. containers:
  18. - name: service1
  19. image: dongtai/dongtai-java-agent-demo:0.0.1
  1. // 安装 DongTai IAST Agent 后的服务配置内容
  2. apiVersion: apps/v1
  3. kind: Deployment
  4. metadata:
  5. labels:
  6. app: service1
  7. name: service1
  8. spec:
  9. selector:
  10. matchLabels:
  11. app: service1
  12. template:
  13. metadata:
  14. labels:
  15. app: service1
  16. spec:
  17. {{- if .iast }}
  18. volumes:
  19. - name: dongtai-iast-agent
  20. emptyDir: {}
  21. initContainers:
  22. - name: agent-init-container
  23. image: curlimages/curl
  24. volumeMounts:
  25. - name: dongtai-iast-agent
  26. mountPath: /tmp
  27. args:
  28. - "-k"
  29. - "-X"
  30. - "GET"
  31. - "从洞态管理后台获取到的 Agent 下载请求地址"
  32. - "-H"
  33. - "从洞态管理后台获取到的 Agent 下载请求的 Header 信息"
  34. - "-o"
  35. - "/tmp/agent.jar"
  36. {{- end}}
  37. containers:
  38. - name: service1
  39. image: dongtai/dongtai-java-agent-demo:0.0.1
  40. {{- if .iast }}
  41. volumeMounts:
  42. - name: dongtai-iast-agent
  43. mountPath: /agent
  44. env:
  45. - name: JAVA_TOOL_OPTIONS
  46. value: "-javaagent:/agent/agent.jar"
  47. {{- end}}

第二步:将服务部署到环境中

将注入 IAST Agent 的服务部署到环境中,参考文档:添加服务

安全服务接入手册

DevSecOps 核心用户场景介绍

开发阶段静态安全注入

流程包含:代码提交 > 静态扫描 > 构建 > 部署> 自测联调

代码实现完毕提交代码变更 PR 后,会自动触发静态代码扫描执行。扫描结果会反馈在 PR 中,点击可跳转 Zadig 查看失败原因,在开发源头有效规避代码中的质量隐患、安全隐患。

安全服务接入手册 安全服务接入手册

对于使用 SonarQube 工具的代码扫描,点击链接可跳转 Sonar 系统分析代码扫描的更多结果,有针对性的修复,修复完毕后执行 dev 工作流进行日常自测联调。

安全服务接入手册 安全服务接入手册

测试阶段组合安全策略

流程包含:静态扫描(开启质量门禁) > 构建 > 部署 > 自动化测试(业务测试 + 动态安全检测)

研发提测后,测试工程师基于代码分支 + PR 执行工作流,部署集成测试验证环境并对环境做自动化测试。工作流执行后会自动通知到 IM 中。登录管理后台可查看动态安全检测漏洞详情,推进团队及时修复,尽早规避安全风险。

安全服务接入手册 安全服务接入手册

如果静态扫描任务执行失败,将会阻止后续的构建和部署任务运行。未通过验收的代码变更将被拒绝合并,以便从源代码层面捕获安全隐患,并建立有效的质量门禁措施。这种做法可以防止潜在问题进入到系统中。

安全服务接入手册

发布阶段全巡检审批

流程包含:安全委员会审核 > 分批次灰度发布 > 自动化测试

当测试验收通过后,执行 prod 工作流执行生产发布,审批通过后方可发布,建议几种配置策略:

  1. 建设发布门禁,通过自定义任务自动获取安全扫描、单元测试、回归测试等质量结果来判断是否允许上线,作为上线过程的卡点,确保版本验收通过并且符合企业安全要求后再做上线操作。
  2. 灵活编排 MSE 灰度、蓝绿、金丝雀、分批次灰度、Istio 等发布策略,以确保发布可靠性,可参考:发布策略
  3. 发布阶段增加安全团队人工审批,以确保业务流程上的发布合规性。

安全服务接入手册 安全服务接入手册