利用 Apps Stack 部署 DevSecOps 解决方案

为应用程序堆栈部署解决方案 DevSecOps,需要将自动化安全控制、持续监控和合规性检查嵌入到持续集成(CI)或持续部署(CD)管道中。 堆栈的呈现方式是,只需要几个变量就能部署所有内容。

部署前

在开始部署之前,可以确保部署 DevSecOps for Apps 堆栈的先决条件已经就绪。

添加到项目中

  1. 转到 IBM Cloud 目录中 Apps 目录条目的 DevSecOps 解决方案
  2. 架构部分选择最新版本。
  3. 如果有多个变体,请选择一个。
  4. 单击“添加到项目”按钮。
  5. 在“为 DevSecOps Solution For Apps 选择一个项目”部分,设置项目名称并查看配置名称、区域和资源组,然后单击“创建”按钮。 或者,从现有项目中进行选择。

配置可部署架构

现在,您可以通过服务 API 密钥和标准 API 密钥配置步骤,为默认部署配置安全性、必选变量和可选变量。

  1. 在“配置”部分,选择身份验证方法。 您可以使用 Secrets Manager 中的现有秘密,直接添加 API 密钥,或设置受信任的配置文件。 有关详细信息,请参阅 使用 API 密钥或秘密授权项目部署架构
  2. “必填”选项卡中,输入必填字段的值。 通常情况下,您可以使用默认选项。 有关必填变量的更多信息,请参阅 必填输入变量
  3. 可选选项卡中,找到以下变量并按照说明设置值。
    • create_git_token- 切换到 true
    • repo_git_token_secret_name- 为令牌设置一个名称。 这是 Secrets Manager 中 Git 令牌秘密的名称。
    • repo_git_token_secret_value- 设置 Git 用于访问团队资料库的个人访问令牌。
    • repo_group- 设置版本库组名称或所有者名称。
    • 若需在默认创建的管道操作标准API密钥之外,可选地使用服务API密钥,请将该选项 force_create_standard_api_key 设置为 false。 在此情况下,必须设置前一步骤中与个人 Git 访问令牌相关的变量。 此选项的优势在于,服务API密钥将在90天后自动轮换。 此设置还将导致自动生成的 cos-api-key 被创建为服务 API 密钥。
    • prefix- 设置一个值。 它是已配置资源名称的前缀。
    • resource_group_name- 为堆栈创建的资源组设置名称。 创建时,它以上一步的值为前缀。

(可选步骤)部署到现有资源组

作为管理员,可以选择将资源部署到现有资源组。

  1. 可选选项卡中,找到以下变量并按照说明设置值。
    • resource_group_name- 设置堆栈提供资源的现有资源组的名称。
    • use_existing_resource_group- 设置为 true.
  2. 单击保存。 此时请勿验证。
  3. 导航至项目层,找到当前堆栈。 展开堆栈,找到 Compliance Manager 成员。 点击选项或烤肉菜单。
  4. 选择编辑 > 可选选项卡,找到变量 resource_groups_scope 并单击编辑。 用方括号内的引号设置现有资源组的名称。 例如 ["my-resource-group"(我的资源组] )。
  5. 单击保存

运行堆栈

  1. 导航至项目的顶级目录。
  2. 单击项目级“管理”>“设置”。
  3. Auto-deploy 设置为开启。 它可以部署堆栈的所有配置,而无需对每个配置进行手动验证和部署启动。
  4. 单击“配置”选项卡。
  5. 单击堆栈配置的选项Kebab 菜单展开。
  6. 单击验证和部署开始验证并开始部署。

服务配置和部署的输入变量

服务配置和部署的输入变量包括必要值和可选值,用于指导如何设置和管理服务。 本文涵盖了服务ID创建和操作所需的关键变量,同时包含针对 Code Engine、Kubernetes Service 和等场景定制的可选输入参数,以及常用的共享配置项。

必需的输入变量

为确保顺利部署,需要定义指导配置所需的输入变量。

必需的输入变量
姓名 描述 类型 缺省值
region 部署所有资源的区域,但 Security and Compliance Center 和 IBM Cloud® Event Notifications 除外。 这些资源应单独设置,默认设置为 us-south。 string us-south
en-region 配置 Event Notifications 实例的区域。 string us-south
scc-region 配置 Security and Compliance Center 实例的区域。 string us-south
app_repo_existing_url 通过提供 URL.NET Framework 2.0,您可以使用自己现有的应用程序资源库。 它会为你的应用程序库创建一个集成,而不是克隆默认示例。 不同组织的存储库需要使用 Git 令牌。 请参见 app_repo_git_token_secret_name 可选变量。 string ``

创建和运行服务 ID 时需要

创建服务 ID 及其相关服务 API 密钥需要 Git 令牌,以便成功进行管道操作。 表格提供了变量的详细信息。

变量 force_create_standard_api_key 决定创建的是标准 API 密钥还是服务 API 密钥。 如果 force_create_standard_api_key 设置为 false,表示创建了服务 ID,则需要设置以下变量 create_git_token, repo_git_token_secret_name,和 repo_git_token_secret_value

配置服务 ID 所需的输入变量
姓名 描述 类型 缺省值
create_git_token 设置为 true 时,将使用 repo_git_token_secret_name 中设置的名称和 repo_git_token_secret_value 中设置的值,在指定的 Secrets Manager 中创建 Git 令牌机密。 boolean false
repo_git_token_secret_name Secrets Manager 中 Git 令牌秘密的名称。 string ``
repo_git_token_secret_value Git 令牌密文的值,如果 create_git_token 设置为 true,则会创建该密文。 string ``
force_create_standard_api_key 设置为 true 会创建一个标准 API 密钥,访问权限仅限于为用户分配的访问组。 boolean false

可选 Code Engine 专用输入变量

IBM Cloud Code Engine 设置输入
姓名 描述 类型 缺省值
project_ci_name IBM Cloud Code Engine CI 项目的名称。 string CI_Project
project_cd_name IBM Cloud Code Engine CD 项目的名称。 string CD_Project
app_repo_branch 这是默认示例应用程序使用的版本库分支。 或者,如果提供了 app_repo_existing_url,则分支必须反映该版本库的默认分支。 这些分支通常是主分支或主分支。 string master

可选 Kubernetes 专用输入变量

Kubernetes 设置输入
姓名 描述 类型 缺省值
ci_cluster_name 集群 dev 的名称。 string ""
ci_cluster_namespace dev 集群命名空间的名称。 string dev
ci_cluster_region 包含集群的区域。 string ""
ci_cluster_resource_group 包含群集的资源组。 string ""
cd_cluster_name 生产集群的名称。 string ""
cd_cluster_namespace 生产群集命名空间的名称。 string prod
app_repo_branch 默认示例应用程序使用的版本库分支。 或者,如果提供了 app_repo_existing_url,那么分支必须反映该版本库的默认分支。 这些分支通常是 mainmaster string main

可选的通用输入变量

可选输入
姓名 描述 类型 缺省值
prefix 值集是创建各种资源的前缀。 hyphen - 会自动插入,作为前缀和资源名称之间的分隔符。 string devsecops
resource_group_name 创建所有资源的资源组名称。 string devsecops
bucket_name 作为 DevSecOps 工具链的证据存储而创建的 {{site.data.keyword.os_full_notm}} 桶的名称。 string devsecops
create_icr_namespace 设置为 true 可让 Terraform 创建注册表命名空间。 如果命名空间不存在,设置为 false 会让 CI 管道创建该命名空间。 注意:如果使用 Terraform 销毁,ICR 命名空间和所有图像都会被移除。 boolean true
registry_namespace 存储图像的注册表命名空间的名称。 string devsecops
create_cd_instance 设置为 true 以创建 CD 服务。 这是运行 DevSecOps 工具链管道和成功与 DevOps Insights 集成交互所必需的。 boolean true
pipeline_ibmcloud_api_key_secret_name Secrets Manager 中用于运行管道的 IBM Cloud API 密钥名称。 string ibmcloud-api-key
ci_signing_key_secret_name 签名密钥的名称(以 Secrets Manager 为单位),用于签名图像。 string signing-key
cd_code_signing_cert_secret_name Secrets Manager 中签名证书的名称,用于验证签名图像的完整性。 string signing-certificate
cos_api_key_secret_name Secrets Manager 中用于读取或写入证据桶的 IBM Cloud Object Storage API 密钥名称。 string cos-api-key
sm_secret_group Secrets Manager 中创建的秘密组,其中包含 DevSecOps 工具链所需的秘密。 string devsecops
sm_service_plan Secrets Manager 的定价计划。 可选择 trialstandard string standard
scc_service_plan 定价计划用于 Security and Compliance Center。 可选择 trialstandard string standard
use_existing_resource_group 设置为 true 会将 resource_group_name 视为现有资源组。 设置 false 可根据 resource_group_name 中的值设置一个新的资源组。 string false
app_repo_git_token_secret_name 用于访问示例(或自带)应用程序存储库的 Git 令牌秘密提供程序的名称 string ""
existing_secrets_manager_crn 现有 Secrets Manager 实例的 CRN string ""
force_create_standard_api_key 设置为 true 会创建一个标准 API 密钥,访问权限仅限于为用户分配的访问组。 boolean false
ibmcloud_api 环境 URL。 未设置时默认为 https://cloud.ibm.com string ""
create_git_token 设置为 true 可在指定的 Secrets Manager 中创建 Git 令牌密文,使用 repo_git_token_secret_name 中设置的名称和 repo_git_token_secret_value 中设置的值。 boolean false
repo_apply_settings_to_compliance_repos 设置为 true 可将相同设置应用于所有默认合规性存储库。 设置为 false 可将这些设置仅应用于示例应用程序、管道配置和部署存储库。 boolean false
repo_git_token_secret_name Secrets Manager 中 Git 令牌秘密的名称。 string ``
repo_git_token_secret_value 如果 create_git_token 设置为 true,则会创建 Git 令牌密文的值。 string ``
repo_group 配置 Security and Compliance Center 实例的区域。 string us-south
repo_git_provider 默认设置为 hostedgit,否则 GitHub 存储库设置为 githubconsolidated,GitLab 存储库设置为 gitlab。 适用于创建的所有默认 DevSecOps 资源库。 Compliance Pipelines 存储库是个例外。 默认情况下,它总是使用 hostedgit。 要在相同设置下包含 Compliance 管道版本库,请将 compliance_pipeline_repo_use_group_settings 设置为 true。 string ""
repo_title 服务器的名称。 例如,My Git Enterprise Server string ""
repo_root_url (可选)服务器的根 URL。 例如,https://git.example.com string us-south
repo_blind_connection 将值设为 true 意味着服务器无法在公共互联网上寻址。IBM Cloud 无法验证您提供的连接详细信息。 禁用需要访问 Git 服务器 API 的某些功能。 交付管道的工作原理是使用可通过网络访问 Git 服务器的专用工作者。 boolean false
repo_git_id 将此值设为 github (用于 github.com )、gitlabcustom (用于 GitLab )或自定义 GitHub Enterprise 服务器的 ID。 string ""
evidence_repo_existing_url 设置为使用现有证据库。 string ""
issues_repo_existing_url 设置为使用现有问题库。 string ""
inventory_repo_existing_url 设置为使用现有清单存储库。 string ""
cd_deployment_repo_existing_url 覆盖以带来自己现有的部署资源库 URL,直接使用而不是克隆默认的部署示例。 string ""
change_management_existing_url 覆盖可带来自己现有的变更管理库 URL,直接使用,而不是克隆默认的变更管理库。 string ""
create_triggers 设置为 true 可创建 DevSecOps 管道使用的触发器。 boolean true
create_git_triggers 设置为 true 可创建 DevSecOps 管道使用的 Git 触发器。 boolean true
compliance_pipeline_repo_use_group_settings 设置为 true 可将组级版本库设置应用到合规管道版本库。 请参见 repo_git_provider boolean false
compliance_pipeline_repo_git_provider 默认情况下,它被设置为 hostedgit,否则 GitHub 存储库设置为 githubconsolidated,GitLab 存储库设置为 gitlab string ""
compliance_pipeline_repo_git_id 将此值设为 github (用于 github.com )、gitlabcustom (用于 GitLab )或自定义 GitHub Enterprise 服务器的 ID。 string ""
compliance_pipeline_existing_repo_url 覆盖,将你自己现有的合规管道资源库 URL,直接使用,而不是克隆默认的更改合规管道资源库。 string ""
add_pipeline_definitions 设置为 true 可将合规管道定义添加到 DevSecOps 管道中。 boolean true
create_privateworker_secret 设置为 true 可将指定的私有 Worker 服务 API 密钥添加到秘密提供程序。 boolean false
enable_privateworker 设置为 true,以启用 CI、CD、CC 和 PR 管道的私人工人。 必须在 Secrets Manager 中设置有效的服务 API 密钥。 可以使用 privateworker_credentials_secret_name 指定该秘密的名称。 boolean false
privateworker_credentials_secret_name 秘密提供者中私人工作者秘密的名称。 string ""
privateworker_secret_value 私人 Worker 服务 API 密钥,已添加到秘密提供程序中的 privateworker_credentials_secret_name 秘密中。 password ""
toolchain_access_group_name 创建的 DevSecOps 访问组的名称。 string "devsecops-toolchain"
use_legacy_ref 设置为 true,则 Secrets Manager 秘密将使用旧的秘密参考格式。 boolean true

工具链操作权限

工具链支持两种情况,两种情况的步骤都有概述。

  • 工具链由一个服务 API 密钥操作,用于访问 IBM Cloud Object Storage 桶。 用于运行管道的服务 API 密钥,以及为开发人员或用户提供权限的访问组。 访问资源库还需要 Git 令牌。

  • 工具链由用于访问 IBM Cloud Object Storage 桶的服务 API 密钥以及用于管道操作和开发人员或用户访问的 API 密钥的访问组操作。 Git 令牌可用于配置资源库访问权限。

IBM Cloud Object Storage 服务 API 密钥(cos-api-key)

cos-api-key 密钥会在服务 ID 和标准 API 密钥设置中创建。

IBM Cloud Object Storage 水桶权限
服务 资源 角色 注释
IBM Cloud Object Storage
  1. 资源实例应设置为 IBM Cloud Object Storage 实例 ID(而不是 CRN)。2) 资源类型应设置为 bucket。3) 资源必须设置为资源桶的名称。
Object Reader, Writer 水桶访问权限需要这些特定的权限和角色。

服务 ID 和服务 API 密钥(ibmcloud-api-key)

ibmcloud-api-key 密钥在服务 ID 设置中创建,force_create_standard_api_key 设置为 false

ibmcloud-api-key 的服务 API 密钥权限
服务 资源 角色 注释
Container Registry 全部 Manager 如果存在命名空间,权限可缩减为 ReaderWriter,并扩展到资源组。
Toolchain 作用域为 dev-team-rg 资源组 Editor
Resource group 作用域为 dev-team-rg 资源组 Editor
IBM Cloud Code Engine 作用域为 dev-team-rg 资源组。 Manager, Editor
或者 Kubernetes Service 作用域为 dev-team-rg 资源组。 Manager, Editor

访问组

创建的访问组提供了比所需更广泛的访问权限,因为它同时提供了对开发人员和标准 API 密钥设置中的 API 密钥的访问权限,force_create_standard_api_key 设置为 true。 并允许对各个组件进行测试。

ibmcloud-api-key 的标准 API 密钥权限
服务 资源 角色 注释
Container Registry 全部 Manager 如果存在命名空间,权限可缩减为 ReaderWriter,并扩展到资源组。
Toolchain 作用域为 dev-team-rg 资源组。 Editor
Resource group 作用域为 dev-team-rg 资源组 Editor
Secrets Manager Airgapped-StackALM 资源组 Manager
IBM Cloud Code Engine 作用域为 dev-team-rg 资源组。 Manager, Editor
或者 Kubernetes Service 作用域为 dev-team-rg 资源组。 Manager, Editor

限制访问组

使用服务 API 密钥运行管道可进一步减少开发人员的访问权限。 堆栈不会创建此版本的访问组。

限制访问组
服务 资源 角色 注释
Toolchain 作用域为 dev-team-rg 资源组。 View, PipelineRunner PipelineRunner 更改为 Operator 开发,以修改工具链设置。
Resource group 作用域为 dev-team-rg 资源组。 Viewer
Secrets Manager Airgapped-StackALM 资源组。 Reader

创建具有创建可部署架构权限的 IBM Cloud® API 密钥

创建 IBM Cloud® API 密钥,以创建可部署架构。

根据您的 IBM Cloud 账户类型,某些资源的访问权限可能会受到限制。 根据您的账户计划限制,某些 DevSecOps 工具链所需的功能可能无法使用。 有关更多信息,请参阅 《 IBM Cloud 设置您的账户》 和《 升级您的账户 》。

创建 IBM Cloud® 受信任配置文件,并赋予其创建可部署架构的权限

创建 IBM Cloud® 受信任的配置文件,并参考 使用受信任的配置文件授权项目部署架构