设置 DevSecOps 基础设施和 CI 工具链,以便部署安全应用程序
通过使用基于 Terraform 的快速启动模板,本教程可为您的 CI 和 CD 工具链自动设置和配置基础架构。 该模板采用 DevSecOps 的合规性与安全性最佳实践。 该模板采用 IBM Cloud® Schematics 工作区,可自动创建所需的基础架构,用于将应用程序安全地部署至 Kubernetes 或 Red Hat® OpenShift®。模板采用 DevSecOps 的 IBM Cloud® Continuous Delivery 工具链管道结构。 工具链经过预配置,可通过清单集成、变更管理、证据收集和部署实现持续交付。
IBM Cloud Schematics 提供 Terraform 即服务,支持您使用高级脚本语言对 IBM Cloud 环境中所需的资源建模,并启用基础架构即代码 (IaC)。 Terraform 是由 HashiCorp 开发的开源软件。 Terraform 可实现可预测和一致的资源调配,以快速构建复杂的多层云环境。
在本教程中,你将按照三个简单步骤创建 Schematics 工作区、应用 Terraform 执行计划和更新环境属性值。 当您应用该计划时,Schematics 工作区会设置您的安全基础架构。 该基础架构可与团队共享,并适用于 DevSecOps将安全实践与软件开发和操作生命周期相集成的方法。 合并的目标是优先考虑发展速度和安全性的平衡。 CI 和 CD 工具链模板。
自动基础架构设置会创建资源,这些资源会使用 DevSecOps CI 和 CD 模板中的默认值自动调配。 您可以在 Schematics 工作区的变量部分找到默认值。 创建了以下资源:
- IBM Cloud® Kubernetes Service 中的集群或 IBM Cloud 上的 Red Hat OpenShift。
- 一个标准的 IBM Cloud Object Storage 实例和水桶。
- IBM Cloud® Secrets Manager. 请注意,只允许使用一个 Secrets Manager 实例。 如果已经有 Secrets Manager 服务,请确保覆盖 步骤 2 中的
sm_service_name默认值。 - GPG 图像签名密钥。
- 功能齐全的 DevSecOps CI 工具链,可通过使用 DevSecOps 合规性和安全性最佳实践来构建、测试和部署 Node.js 示例应用程序。
准备工作
- 要完成本教程,请使用 " 即用即付 "或 "订阅 IBM Cloud "账户,您是该账户的所有者或拥有 完全的管理员权限。 如果您已经拥有 IBM Cloud 账户并需要升级,请参阅升级 账户。
- 如果想在创建工具链或基础架构元素后与其交互,请 安装 IBM Cloud CLI。
- 获取 GitLab 个人访问令牌。 输入个人访问令牌的名称。 在与 CI 工具链相同的区域创建令牌。 请务必复制并保存令牌,因为您稍后会用到它,而且您无法再次访问它。
- 创建 IBM Cloud API 密钥。 请务必复制并保存或下载 API 密钥值,因为您稍后会用到它,而且您无法再次访问它。
创建 Schematics 工作区
应用 Terraform 执行计划
-
在 Schematics 设置页面的变量部分,输入每个变量的值。 必填字段没有默认值。 您可以覆盖默认值。
如果覆盖
sm_service_name值,Terraform 执行计划将使用现有资源,而不是创建新资源。 -
在
gitlab_token变量中,输入您之前获得的个人访问令牌。 -
在
ibmcloud_api_key变量中,输入您之前获得的 IBM Cloud API 密钥。 -
registry_namespace变量,输入容器注册表命名空间值。 要创建命名空间,请参阅 Container Registry 命名空间。 -
对于
kube_version变量,可在命令行中运行:ibmcloud ks versions查看可用版本。 -
可选。 如果已有 Secrets Manager 实例,请为
sm_service_name变量输入其名称。 否则,请勿更改此变量。 -
可选。 如果要调整群集的大小或位置,可以覆盖以下变量:
datacenter,default_pool_size,machine_type,hardware,public_vlan_num,或private_vlan_num(默认值为 dal12/us-south 数据中心)。 -
可选。 单击生成计划。 此操作将创建 Terraform 执行计划,并检查配置是否存在语法错误。 在 Schematics 作业页面,可以查看日志文件中的错误,以及必须创建、修改或删除的 IBM Cloud 资源,以实现 Terraform 模板的正确状态。
-
输入所有变量值并对更改满意后,单击“应用计划”运行基础架构代码。
此步骤需要一定时间才能完成(通常为20至30分钟,但可能耗时更长),因为需要创建新的 Kubernetes 或 OpenShift 集群。
-
在 Schematics 作业页面,可以通过展开作业名称来查看日志。
-
应用计划后,查看 URL 到生成的 IBM Cloud DevSecOps CI 工具链。 URL 位于日志文件末尾以
View the toolchain at:开头的一行。
若再次应用该计划,先前创建的 Kubernetes 或 OpenShift 集群及其部署的应用程序将被删除,并创建新的集群。 但是,如果覆盖默认群集名称,则会使用该群集。
部署应用程序
请按照以下步骤运行管道。
- 转到新创建的 DevSecOps CI 工具链。
- 点击 Git 以
compliance-app开头的磁贴。 - 要触发 PR 管道,请更新
README.md文件中的某些文本,然后针对main分支启动 PR。 - 在目标分支字段中,将分支名称从
main改为其他名称。 例如,mybranch。 - 确保选中“用这些更改启动新的合并请求”复选框。
- 单击“提交更改”。
- 可选。 在“新合并请求”页面,添加说明。
- 单击创建合并请求。
ci 工具链中的 pr 管道被触发。 完成以下步骤,验证管道是否正在运行:
-
返回您的 CI 工具链,然后单击 Delivery Pipeline 您的
pr-pipeline的磁贴。 在 pr-pipeline 控制面板页面,你可以看到 pr-pipeline 正在运行。 -
要查看进度,请单击
pr-pipeline链接。
图 1. pr-pipeline 控制面板
注释:
-
如果发现任何漏洞,代码pr-finish 步骤就会失败。
-
要查找漏洞,请访问
code-unit-tests>run-stage查看日志。截图 -
解决漏洞,然后触发 pr-管道。
-
返回应用程序软件仓库磁贴。
-
在导航窗格中,单击合并申请。
-
选择 PR。
-
可选。 单击 “批准” 按钮(如果没有,您会在 ci-pipeline 运行结束时看到错误)。
-
选择“删除源分支”
-
单击合并。
合并此 PR 将自动触发 ci-pipeline 要进行验证,请返回工具链中的 ci-pipeline 磁贴,验证管道是否正在运行。 点击管道链接查看进度。
此步骤将应用程序部署到新创建的群集。 应用程序 URL 可在 ci-pipeline 的 deploy-dev > run-stage 步骤的日志文件底部找到。
后续步骤
继续 下一教程 的 "探索您的 CI 工具链 "部分,并运行 CI-PR 和 CI 管道。 然后,继续完成该教程中的其余步骤,部署安全应用程序。
点击菜单图标,选择资源列表,即可随时查看本教程创建的所有资源。 您可以查看 Schematics 工作区、群集、IBM Cloud Object Storage 实例、Secrets Manager 服务、持续交付服务和工具链。