Build 集成验证流程

Fuchsia 版本中集成了多个验证流程。所有这些流程 对构建输出工件执行某种形式的检查。这种集成的目的是 在开发过程中尽早发现潜在问题。

仔细验证系统级属性

通过 ffx 调用审查可完成一系列验证流程。 这些步骤已编入 build/security/verifier 的 gn 模板中。 目录。例如,在组件拓扑上验证格式正确的功能路由,以及 验证系统上预安装的一组静态软件包。

一般来说,这些验证过程会分析所有文件集合,以测试特定的 属性,和/或确保这些集合与人工审核的制品的许可名单匹配。

验证配置文件

*注意本部分仅适用于 Google 员工。“验证结构化配置文件”设置 目前仅对 Google 产品的非 eng build 启用。

在某些情况下,系统组件旨在支持 eng 和非 eng 的不同配置 build 类型。当使用此策略对组件进行工程处理时,务必要 通过验证非 eng 版本的正确配置来保护此类 build 的完整性。

验证结构化配置文件

要针对结构化配置验证非 eng Google 产品 build,您必须完成 操作步骤:

  1. 确定非 eng build 中预期的安全配置值;
  2. 提交 bug,以便安全地跟踪组件或功能的实现情况;
  3. 将配置值添加到政策文件,将其标记为“过渡性”;
  4. 签入新的组件或功能;
  5. 清理政策文件和 bug。

下面详细介绍了此过程的每个步骤。

1. 确定非 eng build 中预期的安全配置值

系统将通过比较 build 生成的值来验证结构化配置文件 黄金文件,该文件表示向用户交付的安全配置值。请先撰写 并缩小您的组件的这些值

2. 提交 bug,以安全地跟踪组件或功能的着陆

如果您还没有让 bug 用来跟踪您正在使用的组件或功能,请务必提交 一个并提及针对非 eng build 且经过验证的结构化配置。您将参考这个 bug 。

3. 将配置值添加到政策文件,将其标记为“过渡性”

您将需要修改以下位置中的所有文件: //vendor/google/security/policy/**/*structured_config_policy*.json5。这些文件包含 按由 Fuchsia 网址标识的组件分组的结构化配置值(请参阅示例 )。任何标记为“过渡”的组件或配置值只有在 否则就会被忽略。标记为 需要过渡:非过渡组件必须出现在 build 输出中,并且 每个非过渡配置值都必须与政策中指明的预期值一致 文件。

例如,添加新组件时,政策文件可能如下所示:

{
    components: {
        // ...existing components...
        // new component:
        // <High-level description of how to configure new component>
        "fuchsia-pkg://fuchsia.com/new-frobinator#meta/new-frobinator.cm": {
            // TODO(https://fxbug.dev/####): Remove transitional once `new-frobinator` is integrated into
            // the build.
            transitional: true,
            fields: {
                // <Precise description of why `frobinator_debugging_enabled=false` is a safe
                // configuration to ship to users>
                frobinator_debugging_enabled: false,
            },
        },
    },
}

如果您是向现有组件添加新字段,则政策文件可能如下所示: 如下所示:

{
    components: {
        // ...existing components...
        // component with new fields:
        "fuchsia-pkg://fuchsia.com/existing-frobinator#meta/existing-frobinator.cm": {
            fields: {
                // ...existing fields appear as `<field_name>: <expected_value>`; e.g.,
                frobinator_internal_policy: "production",
                // <Precise description of why `frobinator_debugging_enabled=false` is a safe
                // configuration to ship to users>
                frobinator_debugging_enabled: {
                    expected_value: false,
                    // TODO(https://fxbug.dev/####): Remove transitional once `frobinator_debugging_enabled`
                    // is integrated into the build.
                    transitional: true,
                },
            },
        },
    },
}

该政策必须包含所有可能因 eng 和非 eng 而异的结构化配置字段 build。请勿跳过 <Description>TODO(https://fxbug.dev/####) 概述的任何注释 。

具有政策中指定的值的字段不得包含 mutability 说明符,因为它会 这些值可能会偏离政策所要求的值。

4. 签入新的组件或功能

现在可以安全地检查新组件或功能,并将其连接到 build 和紫红色 系统组件树。如果您在非 eng Google 产品中配置组件时出错 build 中会出现此错误,在结构化配置政策检查期间会显示为 build 错误。

5. 清理政策文件和 bug

再次修改第 3 步中所述的政策文件,移除之前添加的 transitional 标记, 在第 3 步中添加。

返回到第 3 步的示例,对于新组件示例,最终的政策文件为 如下所示:

{
    components: {
        // ...existing components...
        // new component:
        // <High-level description of how to configure new component>
        "fuchsia-pkg://fuchsia.com/new-frobinator#meta/new-frobinator.cm": {
            fields: {
                // <Precise description of why `frobinator_debugging_enabled=false` is a safe
                // configuration to ship to users>
                frobinator_debugging_enabled: false,
            },
        },
    },
}

现有组件新字段的最终政策文件如下所示:

{
    components: {
        // ...existing components...
        // component with new fields:
        "fuchsia-pkg://fuchsia.com/existing-frobinator#meta/existing-frobinator.cm": {
            fields: {
                // ...existing fields appear as `<field_name>: <expected_value>`; e.g.,
                frobinator_internal_policy: "production",
                // <Precise description of why `frobinator_debugging_enabled=false` is a safe
                // configuration to ship to users>
                frobinator_debugging_enabled:  false,
            },
        },
    },
}

这些更改生效后,假设新组件或新功能的工作已经完成,可以放心 关闭第 2 步中提到的错误。