relizaio/rearm-cli

GitHub: relizaio/rearm-cli

ReARM 系统的命令行客户端,用于管理软件发布版本、SBOM/xBOM 及相关构件的完整生命周期。

Stars: 7 | Forks: 0

![Docker Image CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/23f2e63ad7064609.svg) [![Go Report Card](https://goreportcard.com/badge/github.com/relizaio/rearm-cli)](https://goreportcard.com/report/github.com/relizaio/rearm-cli) # Rearm CLI 该工具允许通过命令行与 [ReARM](https://github.com/relizaio/rearm)(目前处于公开测试阶段)进行交互。ReARM 是一个用于管理软件及(未来的)硬件发布版本及其元数据(包括 SBOM / xBOM 和其他构件)的系统。我们主要支持 [CycloneDX](https://cyclonedx.org/) 标准。 社区论坛和支持可通过 [Discord](https://discord.com/invite/UTxjBf9juQ) 获取 - 请使用 #rearm 频道。 容器镜像地址:registry.relizahub.com/library/rearm-cli。 ## 下载 Rearm CLI 以下是最新版本 Rearm CLI (26.03.1) 的可用下载链接。请根据您的操作系统和架构下载相应的包。 该 CLI 以单个二进制文件形式分发。通过解压并将其移动到系统 PATH 包含的目录中即可完成安装。 [SHA256 校验和](https://d7ge14utcyki8.cloudfront.net/rearm-download/26.03.1/sha256sums.txt) macOS: [AMD64](https://d7ge14utcyki8.cloudfront.net/rearm-download/26.03.1/rearm-26.03.1-darwin-amd64.zip) | [Arm64](https://d7ge14utcyki8.cloudfront.net/rearm-download/26.03.1/rearm-26.03.1-darwin-arm64.zip) FreeBSD: [32-bit](https://d7ge14utcyki8.cloudfront.net/rearm-download/26.03.1/rearm-26.03.1-freebsd-386.zip) | [64-bit](https://d7ge14utcyki8.cloudfront.net/rearm-download/26.03.1/rearm-26.03.1-freebsd-amd64.zip) | [Arm](https://d7ge14utcyki8.cloudfront.net/rearm-download/26.03.1/rearm-26.03.1-freebsd-arm.zip) Linux: [32-bit](https://d7ge14utcyki8.cloudfront.net/rearm-download/26.03.1/rearm-26.03.1-linux-386.zip) | [64-bit](https://d7ge14utcyki8.cloudfront.net/rearm-download/26.03.1/rearm-26.03.1-linux-amd64.zip) | [Arm](https://d7ge14utcyki8.cloudfront.net/rearm-download/26.03.1/rearm-26.03.1-linux-arm.zip) | [Arm64](https://d7ge14utcyki8.cloudfront.net/rearm-download/26.03.1/rearm-26.03.1-linux-arm64.zip) OpenBSD: [32-bit](https://d7ge14utcyki8.cloudfront.net/rearm-download/26.03.1/rearm-26.03.1-openbsd-386.zip) | [64-bit](https://d7ge14utcyki8.cloudfront.net/rearm-download/26.03.1/rearm-26.03.1-openbsd-amd64.zip) Solaris: [64-bit](https://d7ge14utcyki8.cloudfront.net/rearm-download/26.03.1/rearm-26.03.1-solaris-amd64.zip) Windows: [32-bit](https://d7ge14utcyki8.cloudfront.net/rearm-download/26.03.1/rearm-26.03.1-windows-386.zip) | [64-bit](https://d7ge14utcyki8.cloudfront.net/rearm-download/26.03.1/rearm-26.03.1-windows-amd64.zip) 可以通过显式标志、login 命令(见下文)或以下环境变量来设置身份验证数据: - REARM_APIKEYID - 用于 API Key ID - REARM_APIKEY - 用于 API Key 本身 - REARM_URI - 用于 ReARM Uri # 目录 - 用例 1. [从 ReARM 获取版本分配](#1-use-case-get-version-assignment-from-rearm) 2. [向 ReARM 发送发布元数据](#2-use-case-send-release-metadata-to-rearm) 3. [检查构件哈希是否已存在于某个发布中](#3-use-case-check-if-artifact-hash-already-present-in-some-release) 4. [按组件或产品请求最新版本](#4-use-case-request-latest-release-per-component-or-product) 5. [在配置文件中持久化 ReARM 凭据](#5-use-case-persist-rearm-credentials-in-a-config-file) 6. [在 ReARM 中创建新组件](#6-use-case-create-new-component-in-rearm) 7. [将实时 Git 分支与 ReARM 同步](#7-use-case-synchronize-live-git-branches-with-rearm) 8. [向发布添加出站交付物](#8-use-case-add-outbound-deliverables-to-release) 9. [xBOM 实用工具](docs/bomutils.md) 1. [修复 cdxgen 生成的错误 OCI purl](docs/bomutils.md#91-fix-incorrect-oci-purl-generated-via-cdxgen) 2. [使用 BEAR 进行 BOM 供应商富化](docs/bomutils.md#92-bom-supplier-enrichment-with-bear) 3. [将 SPDX 转换为 CycloneDX](docs/bomutils.md#93-convert-spdx-to-cyclonedx) 4. [合并多个 BOM](docs/bomutils.md#94-merge-multiple-boms) 10. [CI 完成后定稿发布](#10-use-case-finalize-release-after-ci-completion) 11. [Transparency Exchange API (TEA) 命令](docs/tea.md) 1. [Transparency Exchange API (TEA) 发现](docs/tea.md#111-transparency-exchange-api-tea-discovery) 2. [完整 TEA 流程 - 产品和组件详情](docs/tea.md#112-complete-tea-flow---product-and-component-details) 12. [Oolong TEA 服务器内容管理命令](docs/oolong.md) 1. [添加产品](docs/oolong.md#121-add-product) 2. [添加组件](docs/oolong.md#122-add-component) 3. [添加组件发布](docs/oolong.md#123-add-component-release) 4. [添加产品发布](docs/oolong.md#124-add-product-release) 5. [添加构件](docs/oolong.md#125-add-artifact) 6. [向发布添加构件](docs/oolong.md#126-add-artifact-to-releases) 13. [基于 VCS 的组件解析](#13-use-case-vcs-based-component-resolution) 1. [创建组件](#141-creating-components) 2. [获取版本](#142-getting-versions) 3. [添加发布](#143-adding-releases) 4. [Monorepo 支持](#144-monorepo-support) 14. [向现有发布添加构件](#14-use-case-add-artifacts-to-existing-release) 15. [DevOps 命令](docs/devops.md) 1. [导出实例 CycloneDX BOM](docs/devops.md#151-export-instance-cyclonedx-bom) 2. [在实例上设置 Sealed Secret 证书](docs/devops.md#152-set-sealed-secret-certificate-on-instance) 3. [替换 GitOps 部署模板的标签](docs/devops.md#153-replace-tags-on-deployment-templates-for-gitops) 4. [检索实例属性和机密信息](docs/devops.md#154-retrieve-instance-properties-and-secrets) 5. [覆盖并获取合并后的 Helm Chart 值](docs/devops.md#155-override-and-get-merged-helm-chart-values) 6. [获取交付物下载机密信息](docs/devops.md#156-get-deliverable-download-secrets) 7. [检查实例是否具有 Sealed Secret 证书](docs/devops.md#157-check-if-instance-has-sealed-secret-certificate) 8. [从实例发送部署元数据](docs/devops.md#158-send-deployment-metadata-from-instance) ## 1. 用例:从 ReARM 获取版本分配 此用例从 ReARM 为我们的组件请求版本。请注意,在使用此 API 之前,必须在 ReARM 上预设组件模式。还必须从 ReARM 为组件生成 API 密钥。 semver 版本模式的示例命令: ``` docker run --rm registry.relizahub.com/library/rearm-cli \ getversion \ -i component_or_organization_wide_rw_api_id \ -k component_or_organization_wide_rw_api_key \ -b main \ --pin 1.2.patch ``` 包含 git commit 详情的示例命令: ``` docker run --rm registry.relizahub.com/library/rearm-cli \ getversion \ -i component_or_organization_wide_rw_api_id \ -k component_or_organization_wide_rw_api_key \ -b main \ --vcstype git \ --commit $CI_COMMIT_SHA \ --commitmessage $CI_COMMIT_MESSAGE \ --vcsuri $CI_PROJECT_URL \ --date $(git log -1 --date=iso-strict --pretty='%ad') ``` 仅获取版本信息并跳过创建发布的示例命令: ``` docker run --rm registry.relizahub.com/library/rearm-cli \ getversion \ -i component_or_organization_wide_rw_api_id \ -k component_or_organization_wide_rw_api_key \ -b main \ --onlyversion ``` 使用基于 VCS 的组件解析的示例命令: ``` docker run --rm registry.relizahub.com/library/rearm-cli \ getversion \ -i organization_wide_rw_api_id \ -k organization_wide_rw_api_key \ --vcsuri github.com/myorg/myapp \ -b main ``` 此方法通过 VCS URI 而不是组件 UUID 来识别组件,从而简化了 CI/CD 集成。对于在一个代码库中包含多个组件的 monorepo,添加 `--repo-path` 以指定子目录(例如 `--repo-path frontend`)。 标志含义: - **getversion** - 表示我们正在获取该分支下一个可用发布版本的命令。请注意,如果调用成功,版本分配将被记录,并且 ReARM 不会再次分配该版本,即使未被使用。它将创建生命周期为 'PENDING' 的发布。 - **-i** - 组件 api id 的标志(必需)。 - **-k** - 组件 api key 的标志(必需)。 - **-b** - 表示分支的标志(必需)。如果该分支尚未记录,ReARM 将尝试创建它。 - **component** - 表示组件 uuid 的标志(可选)。如果使用组织范围的读写密钥,则此标志为必需;如果使用组件特定的 api key,则忽略此标志。 - **--pin** - 表示分支 pin 的标志(对于现有分支是可选的,对于新分支是必需的)。如果为现有分支提供且 pin 与当前不同,它将覆盖当前的 pin。 - **--vcsuri** - 表示 vcs uri 的标志(可选)。如果我们想为发布设置 commit,则需要此标志。但是,很快它将仅在该组件尚未设置 vcs uri 时才需要。 - **--vcstype** - 表示 vcs 类型的标志(可选)。支持的值:git、svn、mercurial。与 vcsuri 一样,如果我们想为发布设置 commit,则需要此标志。但是,很快它将仅在该组件尚未设置 vcs uri 时才需要。 - **--commit** - 表示 vcs commit id 或 hash 的标志(可选)。这是将源代码条目元数据提供给发布所需的。 - **--commitmessage** - 表示 vcs commit 消息的标志(可选)。与 *commit* 标志一起使用,这将用于将源代码条目元数据提供给发布。 - **--commits** - 以 *git log --date=iso-strict --pretty='%H|||%ad|||%s|||%an|||%ae' | base64 -w 0* 格式提供 base64 编码的 commit 列表的标志(可选)。如果未设置 *commit* 标志,则顶部 commit 将用作绑定到发布的 commit。 - **--date** - 表示进行 commit 时的日期时间(带时区)的标志,需要带时区的 iso 严格格式,即对于 git 使用 git log --date=iso-strict(可选)。 - **--vcstag** - 表示 vcs tag 的标志(可选)。如果存在,这是将 vcs tag 包含在 commit 中所需的。 - **--metadata** - 设置版本元数据的标志(可选)。这可能是 semver 元数据或自定义版本模式元数据。 - **--modifier** - 设置版本修饰符的标志(可选)。这可能是 semver 修饰符或自定义版本模式元数据。 - **--manual** - 指示手动发布的标志(可选)。将生命周期设置为 'DRAFT',否则设置为 'PENDING' 生命周期。 - **--onlyversion** - 跳过创建发布的布尔标志(可选)。默认为 false。 - **--repo-path** - monorepo 组件的代码库路径(可选)。 - **--action** - Bump 操作名称:bump | bumppatch | bumpminor | bumpmajor | bumpdate(可选)。 - **--createcomponent** - 如果组件不存在则创建它的标志(可选)。**需要组织范围的读写 API key。** 设置后,如果由 `--vcsuri`(以及可选的 `--repo-path`)标识的组件不存在,它将被自动创建。 - **--createcomponent-version-schema** - 新组件的版本模式(可选)。仅与 `--createcomponent` 一起使用。支持的值:semver, calver_reliza, calver_ubuntu, calver_yy_mm, calver_yyyy_mm, calver_yy_0m, calver_yyyy_0m,基于 Reliza Versioning 中的选项的自定义值(见[此处](https://github.com/relizaio/versioning?tab=readme-ov-file#25-known-version-elements))。**需要组织范围的读写 API key。** - **--createcomponent-branch-version-schema** - 新组件的特性分支版本模式(可选)。仅与 `--createcomponent` 一起使用。支持的值与 `--createcomponent-version-schema` 相同。**需要组织范围的读写 API key。** - **--vcs-display-name** - VCS 代码库的显示名称(可选,在自动创建 VCS 时使用 - 如果在自动创建 VCS 时未设置,将解析为 ReARM 默认值)。 ## 2. 用例:向 ReARM 发送发布元数据 此用例通常用于 CI 工作流中,以将发布元数据流式传输到 ReARM。与前面的情况一样,在发送发布详情之前,必须在 ReARM 上为组件生成 API 密钥。 发送发布详情的示例命令: ``` docker run --rm registry.relizahub.com/library/rearm-cli \ addrelease \ -i component_or_organization_wide_rw_api_id \ -k component_or_organization_wide_rw_api_key \ -b master \ -v 20.02.3 \ --vcsuri github.com/registry.relizahub.com/library/rearm-cli \ --vcstype git \ --commit 7bfc5ce7b0da277d139f7993f90761223fa54442 \ --vcstag 20.02.3 \ --odelid registry.relizahub.com/library/rearm-cli \ --odelbuildid 1 \ --odelcimeta Github Actions \ --odeltype CONTAINER \ --odeldigests sha256:4e8b31b19ef16731a6f82410f9fb929da692aa97b71faeb1596c55fbf663dcdd ``` 包含所有三种构件类型(源代码条目、发布和交付物构件)的示例命令: ``` docker run --rm registry.relizahub.com/library/rearm-cli \ addrelease \ -i component_or_organization_wide_rw_api_id \ -k component_or_organization_wide_rw_api_key \ -b main \ -v 1.0.0 \ --vcsuri github.com/myorg/myapp \ --vcstype git \ --commit abc123def456 \ --vcstag v1.0.0 \ --date 2025-11-20T15:30:00Z \ --scearts '[{"displayIdentifier":"build-log","type":"BUILD_META","storedIn":"REARM","filePath":"./build.log"}]' \ --releasearts '[{"displayIdentifier":"release-notes-v1.0.0","type":"RELEASE_NOTES","storedIn":"EXTERNALLY","downloadLinks":[{"uri":"https://docs.example.com/releases/v1.0.0","content":"Release Notes"}]},{"displayIdentifier":"security-report","type":"USER_DOCUMENT","storedIn":"REARM","filePath":"./security-report.pdf"}]' \ --odelid myapp-docker-image \ --odeltype CONTAINER \ --odeldigests sha256:abc123def456 \ --odelartsjson '[{"displayIdentifier":"myapp-sbom","type":"BOM","bomFormat":"CYCLONEDX","storedIn":"REARM","inventoryTypes":["SOFTWARE"],"filePath":"./sbom.json"},{"displayIdentifier":"myapp-attestation","type":"ATTESTATION","storedIn":"REARM","filePath":"./attestation.json"}]' ``` **了解构件类型:** addrelease 命令支持三种类型的构件,每种都有不同的用途: 1. **源代码条目构件 (`--scearts`)**:附加到 commit/源代码条目的构件 - 示例:源代码 SBOM - 使用场景:该构件特定于该 commit 的源代码 2. **发布构件 (`--releasearts`)**:直接附加到发布的构件 - 示例:发布说明、安全报告、用户文档、认证 - 使用场景:该构件描述或记录整体发布情况 3. **交付物构件 (`--odelartsjson`)**:附加到特定交付物的构件 - 示例:SBOM、证明、签名、VEX 文档 - 使用场景:该构件特定于某个交付物(容器、二进制文件、包) - 注意:每个 `--odelid` 交付物必须有一个 `--odelartsjson` 条目 **在构件上使用标签:** 可以使用 `tags` 字段将标签添加到 `--releasearts`、`--scearts` 和 `--odelartsjson` 中的构件。标签是用于分类、过滤和元数据的键值对。 带有发布构件标签的示例: ``` --releasearts '[{"displayIdentifier":"security-report","type":"USER_DOCUMENT","storedIn":"REARM","filePath":"./security-report.pdf","tags":[{"key":"category","value":"security"},{"key":"reviewed","value":"true"}]}]' ``` 带有 SCE 构件标签的示例: ``` --scearts '[{"displayIdentifier":"source-sbom","type":"BOM","bomFormat":"CYCLONEDX","storedIn":"REARM","filePath":"./source-sbom.json","tags":[{"key":"generator","value":"cdxgen"},{"key":"scope","value":"source"}]}]' ``` 带有交付物构件标签的示例: ``` --odelartsjson '[{"displayIdentifier":"container-sbom","type":"BOM","bomFormat":"CYCLONEDX","storedIn":"REARM","inventoryTypes":["SOFTWARE"],"filePath":"./sbom.json","tags":[{"key":"format","value":"cyclonedx"},{"key":"version","value":"1.5"}]}]' ``` 带有标签的嵌套构件(构件中的构件)示例: ``` --odelartsjson '[{"displayIdentifier":"main-sbom","type":"BOM","bomFormat":"CYCLONEDX","storedIn":"REARM","filePath":"./main-sbom.json","tags":[{"key":"primary","value":"true"}],"artifacts":[{"displayIdentifier":"nested-vex","type":"VEX","storedIn":"REARM","filePath":"./vex.json","tags":[{"key":"type","value":"openvex"}]}]}]' ``` **构件覆盖类型标签:** 要使用覆盖类型(例如 DEV、TEST、BUILD_TIME)标记构件,请在构件 JSON 的 `tags` 字段中包含 `COVERAGE_TYPE` 标签。这些标签指示构件中包含的依赖项类型,可用于在 BOM 导出期间过滤构件。 支持的覆盖类型值:`DEV`、`TEST`、`BUILD_TIME`。 带有单个覆盖类型的示例: ``` --odelartsjson '[{"displayIdentifier":"dev-sbom","type":"BOM","bomFormat":"CYCLONEDX","storedIn":"REARM","filePath":"./sbom.json","tags":[{"key":"COVERAGE_TYPE","value":"DEV"}]}]' ``` 同一构件上带有多个覆盖类型的示例: ``` --releasearts '[{"displayIdentifier":"build-sbom","type":"BOM","bomFormat":"CYCLONEDX","storedIn":"REARM","filePath":"./sbom.json","tags":[{"key":"COVERAGE_TYPE","value":"DEV"},{"key":"COVERAGE_TYPE","value":"BUILD_TIME"}]}]' ``` 使用基于 VCS 的组件解析的示例命令: ``` docker run --rm registry.relizahub.com/library/rearm-cli \ addrelease \ -i organization_wide_rw_api_id \ -k organization_wide_rw_api_key \ --vcsuri github.com/myorg/myapp \ -b main \ -v 1.0.0 \ --commit abc123def456 ``` 此方法通过 VCS URI 而不是组件 UUID 来识别组件,从而无需在 CI/CD 工作流中跟踪 UUID。对于在一个代码库中包含多个组件的 monorepo,添加 `--repo-path` 以指定子目录(例如 `--repo-path frontend`)。 标志含义: - **addrelease** - 表示我们正在向 ReARM 发送组件的发布元数据的命令。 - **-i** - 组件 api id 或组织范围的读写 api id 的标志(必需)。 - **-k** - 组件 api key 或组织范围的读写 api key 的标志必需)。 - **-b** - 表示分支的标志(必需)。如果该分支尚未记录,ReARM 将尝试创建它。 - **-v** - 版本(必需)。请注意,如果该组件已存在具有此确切版本的发布,ReARM 将拒绝该调用。 - **endpoint** - 表示测试端点 URI 的标志(可选)。这对于每个版本都获得测试 URI 的系统很有用。 - **component** - 表示组件 uuid 的标志(可选)。如果使用组织范围的读写密钥,则此标志为必需;如果使用组件特定的 api key,则忽略此标志。 - **vcsuri** - 表示 vcs uri 的标志(可选)。目前,如果我们想为发布设置 commit,则需要此标志。但是,很快它将仅在该组件尚未设置 vcs uri 时才需要。 - **commit** - 表示 vcs commit id 或 hash 的标志(可选)。这是将源代码条目元数据提供给发布所需的。 - **commitmessage** - 表示 vcs commit 主题的标志(可选)。与 *commit* 标志一起使用,这将用于将源代码条目元数据提供给发布。 - **commits** - 以 *git log --date=iso-strict --pretty='%H|||%ad|||%s|||%an|||%ae' | base64 -w 0* 格式提供 base64 编码的 commit 列表的标志(可选)。如果未设置 *commit* 标志,则顶部 commit 将用作绑定到发布的 commit。 - **scearts** - 表示在源代码条目 - 或 commit 上设置的元数据构件的标志(可选)。需要 JSON 数组表示形式,每个对象包含以下键:type、bomFormat、filePath。示例条目: ``` [{"bomFormat": "CYCLONEDX","type": "BOM","filePath": "./fs.cdx.bom.json"}] ``` - **releasearts** - 表示直接附加到发布的元数据构件的标志(可选)。需要 JSON 数组表示形式,每个对象包含以下键:displayIdentifier、type、storedIn、filePath(或用于外部存储的 downloadLinks)。内部存储的示例条目: ``` [{"displayIdentifier": "release-notes-v1.0.0","type": "RELEASE_NOTES","storedIn": "REARM","filePath": "./release-notes.md"}] ``` 外部存储的示例条目: ``` [{"displayIdentifier": "release-notes-v1.0.0","type": "RELEASE_NOTES","storedIn": "EXTERNALLY","downloadLinks": [{"uri": "https://docs.example.com/releases/v1.0.0","content": "Release Notes"}]}] ``` - **date** - 表示进行 commit 时的日期时间(带时区)的标志,需要带时区的 iso 严格格式,即对于 git 使用 git log --date=iso-strict(可选,如果存在 commit 则为必需)。 - **vcstag** - 表示 vcs tag 的标志(可选)。如果存在,这是将 vcs tag 包含在 commit 中所需的。 - **lifecycle** - 表示发布生命周期的标志(可选)。对于失败的发布设置为 'REJECTED',否则使用 'DRAFT',也可以设置为 'ASSEMBLED'。 - **odelid** - 表示输出交付物标识符的标志(可选)。这是将输出交付物元数据添加到发布中所需的。 - **odelbuildid** - 表示输出交付物构建 id 的标志(可选)。此标志是可选的,可用于指示发布版本的构建系统 id(即,这可以是 circleci 构建号)。 - **odelbuilduri** - 表示输出交付物构建 uri 的标志(可选)。此标志是可选的,用于指示构建发生的 uri。 - **odelcimeta** - 表示输出交付物 CI 元数据的标志(可选)。此标志是可选的,与 odelbuildid 一样,可用于以自由格式指示构建系统元数据。 - **odeltype** - 表示输出交付物类型的标志(可选)。类型基于 [CycloneDX 1.6 规范](https://github.com/CycloneDX/specification/blob/master/schema/bom-1.6.schema.json) - 请参阅规范中的第 836-850 行。支持的值(不区分大小写):Application、Framework、Library、Container、Platform、Operatine-system、Device、Device-driver、Firmware、File、Machine-learning-model、Data、Cryptographic-asset。 - **--odelidentifiers** - 交付物标识符(即 PURL)IdentifierType-Value 对(允许多个,用逗号分隔一个交付物的多个 IdentifierType-Value 对,用冒号分隔一对中的 IdentifierType-Value,例如 --odelidentifiers "PURL:somepurl,TEI:sometei") - **datestart** - 表示输出交付物构建开始日期和时间的标志,必须符合 ISO 严格日期(在 bash 中,使用 *date -Iseconds*,如果使用,则每个交付物必须有一个 datestart 标志条目,可选)。 - **dateend** - 表示输出交付物构建结束日期和时间的标志,必须符合 ISO 严格日期(在 bash 中,使用 *date -Iseconds*,如果使用,则每个交付物必须有一个 datestart 标志条目,可选)。 - **odelpublisher** - 表示输出交付物发布者的标志(如果使用,则每个交付物必须有一个 publisher 标志条目,可选)。 - **odeldigests** - 表示输出交付物摘要的标志(可选)。按照惯例,摘要必须以类型为前缀,后跟冒号,然后是实际的摘要哈希,即 *sha256:4e8b31b19ef16731a6f82410f9fb929da692aa97b71faeb1596c55fbf663dcdd* - 这里类型是 *sha256*,摘要 是 *4e8b31b19ef16731a6f82410f9fb929da692aa97b71faeb1596c55fbf663dcdd*。支持多个摘要,必须用逗号分隔。即: ``` --odeldigests sha256:4e8b31b19ef16731a6f82410f9fb929da692aa97b71faeb1596c55fbf663dcdd,sha1:fe4165996a41501715ea0662b6a906b55e34a2a1 ``` - **odelartsjson** - 表示在输出交付物上设置的元数据构件的标志(可选)。格式类似于 *scearts* - 需要 JSON 数组表示形式,每个对象包含以下键:type、bomFormat、filePath - **--repo-path** - monorepo 组件的代码库路径(可选)。 - **--releasearts** - 发布构件 json 数组(可选)。 - **--odelgroup** - 交付物组(允许多个,可选)。 - **--odelpackage** - 交付物包类型(允许多个,可选)。 - **--osarr** - 交付物支持的 OS 数组(允许多个,对每个交付物使用逗号分隔值,可选)。 - **--cpuarr** - 交付物支持的 CPU 数组(允许多个,对每个交付物使用逗号分隔值,可选)。 - **--odelversion** - 交付物版本,如果与发布版本不同(允许多个,可选)。 - **--tagsarr** - 交付物标签键值对(允许多个,用逗号分隔一个交付物的多个标签键值对,用冒号分隔一对中的键值,可选)。 - **--stripbom** - 切换是否剥离 bom 元数据以进行哈希比较的标志(可选)。默认值为 true。支持的值:true|false。 - **--createcomponent** - 如果组件不存在则创建它的标志(可选)。**需要组织范围的读写 API key。** 设置后,如果由 `--vcsuri`(以及可选的 `--repo-path`)标识的组件不存在,它将被自动创建。 - **--createcomponent-version-schema** - 新组件的版本模式(可选)。仅与 `--createcomponent` 一起使用。支持的值:semver, calver_reliza, calver_ubuntu, calver_yy_mm, calver_yyyy_mm, calver_yy_0m, calver_yyyy_0m,基于 Reliza Versioning 中的选项的自定义值(见[此处](https://github.com/relizaio/versioning?tab=readme-ov-file#25-known-version-elements))。**需要组织范围的读写 API key。** - **--createcomponent-branch-version-schema** - 新组件的特性分支版本模式(可选)。仅与 `--createcomponent` 一起使用。支持的值与 `--createcomponent-version-schema` 相同。**需要组织范围的读写 API key。** - **--vcs-display-name** - VCS 代码库的显示名称(可选,在自动创建 VCS 时使用 - 如果在自动创建 VCS 时未设置,将解析为 ReARM 默认值)。 - **vcstype** - 表示 vcs 类型的标志(可选)。支持的值:git、svn、mercurial。仅当组件尚未设置 vcs uri 且我们要使用新的 vcs uri 创建新组件时,如果我们想为发布设置 commit,才需要此标志。 - **--rebuild** - 允许在重复的 CI 重新运行中重建发布的标志(可选)。默认值为 false。设置为 true 时,如果已存在具有相同版本的发布,它将被重建而不是被拒绝。 请注意,每个发布支持多个交付物。在这种情况下,必须为每个交付物重复特定于交付物的标志(odelid、odelbuildid、odelbuilduri、odelcimeta、odeltype、odeldigests、odelartsjson)。 有关如何在 CI 中使用工作流的示例,请参阅[此处](https://github.com/relizaio/rearm-add-release)的 ReARM Add Release GitHub Action。 ## 3. 用例:检查交付物哈希是否已存在于某个发布中 这对于 monorepos 特别有用,可以查看子组件是否有变化。我们向 ReARM 提供一个交付物哈希 - 如果它已经存在,我们将获得作为 CycloneDX 1.6 BOM 字符串的发布详情;如果不存在 - 我们得到一个空的 json 响应 {}。搜索范围限定于由 API Id 和 API Key 定义的单个组件。 示例命令: ``` docker run --rm registry.relizahub.com/library/rearm-cli \ checkhash \ -i component_or_org_wide_api_id \ -k component_or_org_wide_api_key \ --hash sha256:hash ``` 标志含义: - **checkhash** - 表示我们正在检查构件哈希的命令。 - **-i** - 组件 api id 的标志(必需)。 - **-k** - 组件 api key 的标志(必需)。 - **--hash** - 表示实际哈希的标志(必需)。按照惯例,哈希必须包含哈希算法作为其第一部分,即 sha256: 或 sha512: - **--component** - 表示特定组件 UUID 的标志,UUID 必须从 ReARM 获取(可选,如果使用组织范围或用户 api key 则为必需)。 ## 4. 用例:按组件或产品请求最新版本 此用例是当 CI 或 CD 环境或集成实例查询 ReARM 以检查每个特定组件或产品可用的最新发布版本时使用的。 默认情况下,该命令将最新版本作为 JSON 对象返回。使用 `--cdx` 标志可以将版本作为 CycloneDX 1.6 BOM 字符串返回。 示例命令: ``` docker run --rm registry.relizahub.com/library/rearm-cli \ getlatestrelease \ -i api_id \ -k api_key \ --component b4534a29-3309-4074-8a3a-34c92e1a168b \ --branch main ``` 标志含义: - **getlatestrelease** - 表示我们正在从 ReARM 请求组件或产品的最新发布数据的命令 - **-i** - api id 的标志,可以是该组件的 api id 或组织范围的读取 API(必需)。 - **-k** - api key 的标志,可以是该组件的 api key 或组织范围的读取 API(必需)。 - **--component** - 表示特定组件或产品 UUID 的标志,UUID 必须从 [ReARM](https://relizahub.com) 获取(如果使用组件 api key 则为可选,否则为必需)。 - **--product** - 表示产品 UUID 的标志,该产品打包了组件或产品(我们通过 --component 标志查询其版本),UUID 必须从 [ReARM](https://relizahub.com) 获取(可选)。 - **--branch** - 表示所选组件或产品的所需分支的标志(必需)。 - **--lifecycle** - 要返回的最后一个已知发布的生命周期,默认为 'ASSEMBLED'(可选,可以是 - [CANCELLED, REJECTED, PENDING, DRAFT, ASSEMBLED, GENERAL_AVAILABILITY, END_OF_SUPPORT])。将包括所有更高级别的生命周期,即如果设置为 CANCELLED,将返回任何生命周期的发布。 - **--operator** - 批准列表的匹配运算符,'AND' 或 'OR',默认为 'AND'(可选)。 - **--approvalentry** - 批准条目名称或 ID(可选,允许多个)。 - **--approvalstate** - 对应于批准条目的批准状态,可以是 'APPROVED'、'DISAPPROVED' 或 'UNSET'(可选,允许多个,如果存在批准条目则为必需)。 - **--env** - 从中获取批准详情的环境(可选)。 - **--instance** - 要检查发布的实例 ID(可选)。 - **--namespace** - 实例内要检查发布的命名空间,仅在提供实例时有效(可选)。 - **--tagkey** - 用于选择构件的标签键(可选)。 - **--tagval** - 用于选择构件的标签值(可选)。 - **--uptoversion** - 过滤发布的上限版本(可选)。返回直到此版本的最新发布。 - **--cdx** - 以 CycloneDX 1.6 格式输出发布(可选)。设置后,返回 CycloneDX 1.6 BOM 字符串而不是默认的 JSON 对象。 ## 5. 用例:在配置文件中持久化 ReARM 凭据 此用例适用于我们要将 ReARM API 凭据和 URL 持久化在配置文件中的情况。 `login` 命令将标志指定的 `API ID`、`API KEY` 和 `URI` 保存在执行用户主目录的 `.rearm.env` 配置文件中。 示例命令: ``` docker run --rm \ -v ~:/home/apprunner \ registry.relizahub.com/library/rearm-cli \ login \ -i api_id \ -k api_key \ -u rearm_server_uri ``` 标志含义: - **-i** - api id 的标志。 - **-k** - api key 的标志。 - **-u** - rearm hub uri 的标志## 6. 用例:在 ReARM 中创建新组件 此用例为我们的组织创建一个新组件。必须在使用前生成 API 密钥。 创建组件的示例命令: ``` docker run --rm registry.relizahub.com/library/rearm-cli \ createcomponent \ -i org_api_id \ -k org_api_key \ --name componentname \ --type component \ --versionschema semver \ --featurebranchversioning Branch.Micro \ --vcsuri github.com/registry.relizahub.com/library/rearm-cli ``` monorepo 组件的示例命令: ``` docker run --rm registry.relizahub.com/library/rearm-cli \ createcomponent \ -i org_api_id \ -k org_api_key \ --name myapp-frontend \ --type component \ --versionschema semver \ --vcsuri github.com/myorg/myrepo \ --repo-path frontend ``` **⚠️ 重要:版本模式要求** `--versionschema` 标志对于通过 API 创建的组件**至关重要**。没有它: - `getversion` 命令将失败并显示 "missing version schema configuration" 错误 - 版本生成将无法工作 - 组件需要通过 UI 进行手动更新 **务必包含**:创建组件时使用 `--versionschema semver`。 标志含义: - **createcomponent** - 表示我们正在为组织创建新组件的命令。请注意,vcs 代码库必须已经存在或在此调用期间创建。 - **-i** - org api id 的标志(必需)。 - **-k** - org api key 的标志(必需)。 - **name** - 表示组件名称的标志(必需)。 - **type** - 表示组件类型的标志(必需)。支持的值:component、product。 - **defaultbranch** - 表示默认分支名称的标志(可选,如果未设置,将使用 "main")。可用名称为 main 或 master。 - **versionschema** - 表示版本模式的标志(可选,如果未设置,将使用 "semver")。[可用的版本模式](https://github.com/relizaio/versioning)。 - **featurebranchversioning** - 表示特性分支版本模式的标志(可选,如果未设置,将使用 "Branch.Micro")。 - **vcsuuid** - 表示组件的 vcs 代码库 uuid 的标志(对于现有代码库,此标志或 vcsuri 是必需的)。 - **vcsuri** - 表示组件的 vcs 代码库 uri 的标志,如果具有 uri 的现有代码库不存在且未设置 vcsname 和 vcstype,ReARM 将尝试自动解析 github、gitlab 和 bitbucket uri。 - **vcsname** - 表示为组件创建的 vcs 代码库名称的标志(如果 ReARM 无法解析 uri 则为必需)。 - **vcstype** - 表示为组件创建的 vcs 类型的标志。支持的值:git、svn、mercurial(如果 ReARM 无法解析 uri 则为必需)。 - **includeapi** - 返回新创建组件的组件 api key 和 id 的布尔标志(可选)。默认为 false。 - **--repo-path** - monorepo 组件的代码库路径(可选)。 ## 7. 用例:将实时 Git 分支与 ReARM 同步 将实时 Git 分支列表发送到 ReARM。ReARM 上存在的非实时分支将被归档。 使用组件 UUID 的示例命令: ``` docker run --rm registry.relizahub.com/library/rearm-cli \ syncbranches \ -i api_id \ -k api_key \ --component component_uuid \ --livebranches $(git branch -r --format="%(refname)" | base64 -w 0) ``` 使用基于 VCS 的组件解析的示例命令: ``` docker run --rm registry.relizahub.com/library/rearm-cli \ syncbranches \ -i organization_wide_rw_api_id \ -k organization_wide_rw_api_key \ --vcsuri github.com/myorg/myrepo \ --repo-path frontend \ --livebranches $(git branch -r --format="%(refname)" | base64 -w 0) ``` 标志含义: - **--component** - 指定组件 uuid 的标志,可以从 ReARM UI 的组件设置中获取(必须使用此标志、vcsuri 或组件的 API key 之一)。 - **--vcsuri** - 用于基于 VCS 的组件解析的 VCS 代码库 URI(可选,组件 UUID 的替代方案)。 - **--repo-path** - monorepo 组件的代码库路径(可选,当多个组件共享一个代码库时与 vcsuri 一起使用)。 - **--livebranches** - base64 编码的 git 分支列表,对于本地分支使用 `git branch --format=\"%(refname)\" | base64 -w 0` 获取,对于远程分支使用 `git branch -r --format=\"%(refname)\" | base64 -w 0`。根据您的 CI 环境在本地和远程分支之间进行选择。 ## 8. 用例:向发布添加出站交付物 此用例将出站交付物添加到 ReARM 发布中。发布必须处于 Pending 或 Draft 生命周期。 示例命令: ``` docker run --rm registry.relizahub.com/library/rearm-cli \ addodeliverable \ -i api_id \ -k api_key \ --odelid registry.relizahub.com/library/rearm-cli \ --odelbuildid 1 \ --odelcimeta Github Actions \ --odeltype CONTAINER \ --odeldigests sha256:4e8b31b19ef16731a6f82410f9fb929da692aa97b71faeb1596c55fbf663dcdd --releaseid 22a98c21-ab90-4a17-94f5-2dd81be5647b ``` 标志含义: - **--component** - 此发布的组件 UUID,如果使用组织范围的 API Key 则为必需 - **--cpuarr** - 此交付物支持的 CPU 架构数组(可选,允许多个) - **--dateend** - 交付物构建结束日期和时间(可选,允许多个) - **--datestart** - 交付物构建开始日期和时间(可选,允许多个) - **--odelidentifiers** - 交付物标识符(即 PURL)IdentifierType-Value 对(允许多个,用逗号分隔一个交付物的多个 IdentifierType-Value 对,用冒号分隔一对中的 IdentifierType-Value,例如 --odelidentifiers "PURL:somepurl,TEI:sometei") - **--odelartsjson** - 交付物构件 json 数组(可选,允许多个,对每个交付物使用 json 数组,类似于添加发布用例) - **--odelbuildid** - 交付物构建 ID(可选,允许多个) - **--odelbuilduri** - 交付物构建 URI(允许多个) - **--odelcimeta** - 交付物 CI Meta(允许多个) - **--odeldigests** - 交付物摘要(允许多个,用逗号分隔一个交付物的多个摘要) - **--odelid** - 交付物主要标识符(允许多个) - **--odelpackage** - 交付物包类型(即 Maven)(允许多个) - **--odelpublisher** - 交付物发布者(允许多个) - **--odelgroup** - 交付物组(允许多个) - **--odelversion** - 交付物版本,如果与发布版本不同(允许多个) - **--osarr** - 交付物支持的 OS 数组(允许多个,对每个交付物使用逗号分隔值) - **--releaseid** - 要添加交付物的发布的 UUID(必须设置 releaseid 或 component、branch 和 version) - **--tagsarr** - 交付物标签键值对(允许多个,用逗号分隔一个交付物的多个标签键值对,用冒号分隔一对中的键值) - **--version** - 发布版本(必须设置 releaseid 或 component、branch 和 version) - **--branch** - 发布分支(必须设置 releaseid 或 component、branch 和 version) - **--stripbom** - 切换是否剥离 bom 元数据以进行哈希比较的标志(可选 - 可)。默认值为 true。支持的值:true|false。 ## 9. 用例:xBOM 实用工具 见 [bomutils 文档](docs/bomutils.md) ## 10. 用例:CI 完成后定稿发布 `releasefinalizer` 命令用于运行发布定稿器,可以在提交发布或向发布添加新交付物后执行。此命令向 ReARM 发出 CI 流程完成的信号,确保触发所有发布后或交付后的操作。 典型工作流程: 提交发布或向发布添加新交付物 运行发布定稿器以完成 CI 流程 示例命令(Docker): ``` docker run --rm registry.relizahub.com/library/rearm-cli \ releasefinalizer \ -i \ -k \ --releaseid ``` 标志含义: - **--releaseid** - 要定稿的发布的 UUID(必需) 此命令可以集成到 CI/CD 工作流中,以发出发布流程结束的信号,确保调用 ReARM 中的所有定稿 hooks 和操作。 ## 11. 用例:Transparency Exchange API (TEA) 命令 基础命令:`tea` 见 [tea 文档](docs/tea.md) ## 12. 用例:Oolong TEA 服务器内容管理命令 基础命令:`oolong` 见 [oolong 文档](docs/oolong.md) ## 13. 用例:基于 VCS 的组件解析 除了组件 UUID 之外,ReARM 还支持通过 VCS 代码库 URI 识别组件: **传统方式(基于 UUID):** ``` getversion --component "4b272da8-2fea-4f13-a6a4-8e6e746c6e86" -b "main" ``` **基于 VCS(推荐用于 CI/CD):** ``` getversion --vcsuri "github.com/myorg/myapp" -b "main" ``` **优势**:无需管理 UUID,使用 CI/CD 流水线中已有的代码库上下文。 **对于 Monorepos**:当多个组件共享一个代码库时,添加 `--repo-path`: ``` getversion --vcsuri "github.com/myorg/myrepo" --repo-path "frontend" -b "main" ``` ### 13.1:创建组件 **单个代码库:** ``` createcomponent --name "myapp" --type "component" \ --vcsuri "github.com/myorg/myapp" --versionschema "semver" ``` **Monorepo(添加 --repo-path):** ``` createcomponent --name "myapp-frontend" --type "component" \ --vcsuri "github.com/myorg/myrepo" --repo-path "frontend" --versionschema "semver" ``` **关键标志:** - `--vcsuri` - 用于基于 VCS 解析的代码库 URI - `--versionschema "semver"` - 版本生成**必需** - `--repo-path` - 可选,仅用于 monorepos ### 13.2:获取版本 **单个代码库:** ``` getversion --vcsuri "github.com/myorg/myapp" -b "main" ``` **Monorepo:** ``` getversion --vcsuri "github.com/myorg/myrepo" --repo-path "frontend" -b "main" ``` ### 13.3:添加发布 **单个代码库:** ``` addrelease --vcsuri "github.com/myorg/myapp" -b "main" -v "1.0.0" ``` **Monorepo:** ``` addrelease --vcsuri "github.com/myorg/myrepo" --repo-path "frontend" -b "main" -v "1.0.0" ``` ### 13.4:Monorepo 支持 对于具有多个组件的代码库,使用 `--repo-path` 指定子目录: ``` --vcsuri "github.com/myorg/myrepo" --repo-path "frontend" --vcsuri "github.com/myorg/myrepo" --repo-path "backend" --vcsuri "github.com/myorg/myrepo" --repo-path "services/auth" ``` ## 14. 用例:向现有发布添加构件 此用例在发布创建后向现有发布、交付物或源代码条目(SCE)添加构件。当构件在初始发布创建后变为可用时,或者当您需要将额外的 SBOM、证明或其他构件添加到现有实体时,这非常有用。 **与 addrelease 的主要区别:** - `addrelease` 创建带有构件的新发布 - `addartifact` 向**现有**发布、交付物或 SCE 添加构件 ### 简单模式:向发布添加构件 ``` docker run --rm registry.relizahub.com/library/rearm-cli \ addartifact \ -i component_or_organization_wide_rw_api_id \ -k component_or_organization_wide_rw_api_key \ --component c6c3223f-7ad0-4d99-a69e-5afa151c71ca \ --version 1.0.5 \ --artifacts '[{ "filePath": "./release-sbom.json", "type": "BOM", "bomFormat": "CYCLONEDX", "storedIn": "REARM", "inventoryTypes": ["SOFTWARE"], "displayIdentifier": "release-sbom" }]' ``` ### 高级模式:添加多种构件类型 在单个命令中向发布、交付物和 SCE 添加构件: ``` docker run --rm registry.relizahub.com/library/rearm-cli \ addartifact \ -i component_or_organization_wide_rw_api_id \ -k component_or_organization_wide_rw_api_key \ --component c6c3223f-7ad0-4d99-a69e-5afa151c71ca \ --version 1.0.5 \ --releasearts '[{ "filePath": "./release-sbom.json", "type": "BOM", "bomFormat": "CYCLONEDX", "storedIn": "REARM", "inventoryTypes": ["SOFTWARE"], "displayIdentifier": "release-sbom" }]' \ --deliverablearts '[{ "deliverable": "035ad637-190b-40ba-a0ac-d7779ccc2c55", "artifacts": [{ "filePath": "./container-sbom.json", "type": "BOM", "bomFormat": "CYCLONEDX", "storedIn": "REARM", "inventoryTypes": ["SOFTWARE"], "displayIdentifier": "container-sbom" }] }]' \ --scearts '[{ "sce": "892baa07-2492-4231-b9cc-06e4b5487342", "artifacts": [{ "filePath": "./source-sbom.json", "type": "BOM", "bomFormat": "CYCLONEDX", "storedIn": "REARM", "inventoryTypes": ["SOFTWARE"], "displayIdentifier": "source-sbom" }] }]' ``` ### 仅向交付物添加构件 ``` docker run --rm registry.relizahub.com/library/rearm-cli \ addartifact \ -i component_or_organization_wide_rw_api_id \ -k component_or_organization_wide_rw_api_key \ --component c6c3223f-7ad0-4d99-a69e-5afa151c71ca \ --version 1.0.5 \ --deliverablearts '[{ "deliverable": "035ad637-190b-40ba-a0ac-d7779ccc2c55", "artifacts": [{ "filePath": "./attestation.json", "type": "ATTESTATION", "storedIn": "REARM", "displayIdentifier": "build-attestation" }] }]' ``` ### 仅向源代码条目添加构件 ``` docker run --rm registry.relizahub.com/library/rearm-cli \ addartifact \ -i component_or_organization_wide_rw_api_id \ -k component_or_organization_wide_rw_api_key \ --component c6c3223f-7ad0-4d99-a69e-5afa151c71ca \ --version 1.0.5 \ --scearts '[{ "sce": "892baa07-2492-4231-b9cc-06e4b5487342", "artifacts": [{ "filePath": "./source-analysis.json", "type": "USER_DOCUMENT", "storedIn": "REARM", "displayIdentifier": "static-analysis-report" }] }]' ``` **标志:** - **addartifact** - 表示我们正在向现有发布、交付物或 SCE 添加构件的命令 - **-i** - 组件 api id 或组织范围的读写 api id 的标志(必需) - **-k** - 组件 api key 或组织范围的读写 api key 的标志(必需) - **--component** - 表示组件 uuid 的标志(可选)。如果使用组织范围的读写密钥,则此标志为必需;如果使用组件特定的 api key,则忽略此标志 - **--version** - 要添加构件的发布版本(必须提供 version+component 或 release uuid) - **--release** - 要添加构件的发布 UUID(version+component 的替代方案) - **--artifacts** - 简单模式的构件 JSON 数组(可选)。默认为发布构件。与特定构件类型标志互斥 - **--releasearts** - 发布构件 JSON 数组(可选)。直接附加到发布的构件 - **--deliverablearts** - 交付物构件 JSON 数组(可选)。每个条目必须指定交付物 UUID 和构件。格式: ``` [{ "deliverable": "uuid-of-deliverable", "artifacts": [{ artifact object }] }] ``` - **--scearts** - 源代码条目构件 JSON 数组(可选)。每个条目必须指定 SCE UUID 和构件。格式: ``` [{ "sce": "uuid-of-sce", "artifacts": [{ artifact object }] }] ``` **构件对象格式:** 所有构件对象遵循与 `addrelease` 中相同的格式: ``` { "filePath": "./path/to/file", "type": "BOM", "bomFormat": "CYCLONEDX", "storedIn": "REARM", "inventoryTypes": ["SOFTWARE"], "displayIdentifier": "unique-identifier", "tags": [{"key": "category", "value": "security"}] } ``` **常见用例:** 1. **在发布创建后添加 SBOM**:当 SBOM 生成发生在单独的流水线步骤中时 2. **添加证明**:在构建完成后添加构建证明或签名 3. **添加安全报告**:将漏洞扫描或合规报告附加到交付物 4. **添加文档**:将发布说明或用户文档附加到发布 5. **更新现有构件**:添加具有更新漏洞数据的新版本 SBOM **重要说明:** - 必须至少提供 `--artifacts`、`--releasearts`、`--deliverablearts` 或 `--scearts` 之一 - 交付物和 SCE UUID 可以从 ReARM UI 或 API 响应中的发布详情获取 - 所有构件通过 rebom 服务处理以进行去重 - 为所有 BOM 构件生成 REARM 摘要 - 添加构件后自动协调合并的 SBOM ## 15. 用例:DevOps 命令 基础命令:`devops` 见 [devops 文档](docs/devops.md) # ReARM CLI 开发 ## 向 ReARM CLI 添加依赖项 依赖项使用 go modules 处理,imports 文件是自动生成的。如果要导入 github 代码库,请先使用此命令: ``` go get github.com/xxxxxx/xxxxxx ``` 然后,您应该能够将所需内容作为 import 添加到您的文件中。导入后,调用此命令以生成 imports 文件: ``` go generate ./internal/imports ```
标签:CLI, CycloneDX, DevSecOps, Docker容器, EVTX分析, Go语言, GPT, ReARM, Release Management, Relizaio, SBOM管理, WiFi技术, xBOM, 上游代理, 元数据管理, 制品管理, 发布管理, 攻击面发现, 文档安全, 日志审计, 漏洞管理, 程序破解, 网络安全研究, 请求拦截, 跌倒检测, 软件物料清单