利用 Apps Stack 部署 DevSecOps 解决方案
为应用程序堆栈部署解决方案 DevSecOps,需要将自动化安全控制、持续监控和合规性检查嵌入到持续集成(CI)或持续部署(CD)管道中。 堆栈的呈现方式是,只需要几个变量就能部署所有内容。
部署前
在开始部署之前,可以确保部署 DevSecOps for Apps 堆栈的先决条件已经就绪。
添加到项目中
- 转到 IBM Cloud 目录中 Apps 目录条目的 DevSecOps 解决方案。
- 在架构部分选择最新版本。
- 如果有多个变体,请选择一个。
- 单击“添加到项目”按钮。
- 在“为 DevSecOps Solution For Apps 选择一个项目”部分,设置项目名称并查看配置名称、区域和资源组,然后单击“创建”按钮。 或者,从现有项目中进行选择。
配置可部署架构
现在,您可以通过服务 API 密钥和标准 API 密钥配置步骤,为默认部署配置安全性、必选变量和可选变量。
- 在“配置”部分,选择身份验证方法。 您可以使用 Secrets Manager 中的现有秘密,直接添加 API 密钥,或设置受信任的配置文件。 有关详细信息,请参阅 使用 API 密钥或秘密授权项目部署架构。
- 在“必填”选项卡中,输入必填字段的值。 通常情况下,您可以使用默认选项。 有关必填变量的更多信息,请参阅 必填输入变量。
- 在可选选项卡中,找到以下变量并按照说明设置值。
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- 为堆栈创建的资源组设置名称。 创建时,它以上一步的值为前缀。
(可选步骤)部署到现有资源组
作为管理员,可以选择将资源部署到现有资源组。
- 在可选选项卡中,找到以下变量并按照说明设置值。
resource_group_name- 设置堆栈提供资源的现有资源组的名称。use_existing_resource_group- 设置为true.
- 单击保存。 此时请勿验证。
- 导航至项目层,找到当前堆栈。 展开堆栈,找到
Compliance Manager成员。 点击选项或烤肉菜单。 - 选择编辑 > 可选选项卡,找到变量
resource_groups_scope并单击编辑。 用方括号内的引号设置现有资源组的名称。 例如 ["my-resource-group"(我的资源组] )。 - 单击保存。
运行堆栈
- 导航至项目的顶级目录。
- 单击项目级“管理”>“设置”。
- 将
Auto-deploy设置为开启。 它可以部署堆栈的所有配置,而无需对每个配置进行手动验证和部署启动。 - 单击“配置”选项卡。
- 单击堆栈配置的选项或 Kebab 菜单展开。
- 单击验证和部署开始验证并开始部署。
服务配置和部署的输入变量
服务配置和部署的输入变量包括必要值和可选值,用于指导如何设置和管理服务。 本文涵盖了服务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。
| 姓名 | 描述 | 类型 | 缺省值 |
|---|---|---|---|
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 专用输入变量
| 姓名 | 描述 | 类型 | 缺省值 |
|---|---|---|---|
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 专用输入变量
| 姓名 | 描述 | 类型 | 缺省值 |
|---|---|---|---|
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,那么分支必须反映该版本库的默认分支。 这些分支通常是 main 或 master。 |
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 的定价计划。 可选择 trial 或 standard。 |
string |
standard |
scc_service_plan |
定价计划用于 Security and Compliance Center。 可选择 trial 或 standard。 |
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 |
|
Object Reader, Writer |
水桶访问权限需要这些特定的权限和角色。 |
服务 ID 和服务 API 密钥(ibmcloud-api-key)
ibmcloud-api-key 密钥在服务 ID 设置中创建,force_create_standard_api_key 设置为 false。
| 服务 | 资源 | 角色 | 注释 |
|---|---|---|---|
Container Registry |
全部 | Manager |
如果存在命名空间,权限可缩减为 Reader 和 Writer,并扩展到资源组。 |
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。 并允许对各个组件进行测试。
| 服务 | 资源 | 角色 | 注释 |
|---|---|---|---|
Container Registry |
全部 | Manager |
如果存在命名空间,权限可缩减为 Reader 和 Writer,并扩展到资源组。 |
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 设置您的账户》 和《 升级您的账户 》。