为了账号安全,请及时绑定邮箱和手机立即绑定

Dale:打造安全可重复的包和容器构建工具

在当今的软件领域,实现安全和可重复构建的需求至关重要,特别是在供应链攻击变得越来越复杂和普遍的情况下。为了满足这一需求,微软开发了一款名为Dale的工具,旨在提供构建系统包和容器的声明性工具。Dale专注于创建精简、可重复的映像,并重视供应链安全,采用了一种简单而强大的配置格式。

Dale简介

Dale 是一个工具,它帮助开发者使用基于 YAML 的配置文件声明式地构建系统包和容器。它强调安全性和可重复性,是希望加强软件供应链安全性的组织的理想选择。尽管 Dale 目前还在积极开发中,它已经提供了一套强大的功能,以满足各种构建需求,并且社区的反馈非常受欢迎,有助于完善其功能。

Dale的主要特点
  1. 最小的工具需求: Dale仅需Docker运行,无需额外工具,简化了设置过程。
  2. 声明式的YAML配置: Dale使用简单的YAML规范格式,确保构建过程可重复、透明且易于维护。
  3. 支持多种操作系统: Dale目前支持Azure Linux 2和3(以前称为CBL-Mariner)以及Windows容器,并支持扩展到其他操作系统。
  4. 最小且安全的镜像: Dale致力于创建最小的镜像,从而减少系统的攻击面,降低潜在漏洞的风险。
  5. 包签名支持: Dale支持对基础包进行签名,例如RPM、DEB和EXE,增强了构建输出的完整性和确保其真实性。
  6. 供应链安全: Dale在构建过程中集成安全措施,通过软件物料清单(SBOM)和出处认证来提供每个组件的透明性和可追溯性。
开始使用 Dale 的入门

要开始使用Dale,首先你需要安装Docker。Dale的核心是创建一个 YAML 规范文件,该文件描述了构建过程,包括软件包元数据、来源代码、依赖项、构建步骤以及输出配置信息。

创建 Dale 规格文件

一个戴尔规格书包含几个主要部分。

  • 元数据: 定义了包的基本信息,比如名称、版本、描述、许可证和打包者信息。
    # 语法设置=ghcr.io/azure/dale/frontend:latest  
    名称: go-md2man  
    版本: 2.0.3  
    修订号: "1"  
    许可证: MIT  
    描述: 一个将 Markdown 转换为 man 页面(roff)的工具。  
    打包人: Dale Example  
    供应商名: Dale Example  
    网站: https://github.com/cpuguy83/go-md2man
  • 来源: 指明构建资源的来源地,支持从 Git 仓库、HTTP URL 和内嵌内容获取资源。Dale 在处理文件和目录来源方面都很高效。
    # 配置来源
    sources:  
      src:  
        git:  
          url: https://github.com/cpuguy83/go-md2man.git  
          # 提交版本
          commit: "v2.0.3"  
        generate:  
          # gomod 模块生成配置
          - gomod: {}
  • 依赖关系: 列出构建时间和运行时所需的依赖项,确保在构建和运行过程中所需的所有组件都已准备好。
    依赖:  
      构建:  
        - golang  
      运行时:  
        - openssl-libs
  • 构建步骤: 列出了编译或组装该包所需的命令和环境设置,确保了构建过程的灵活性和可控性。
    build:  
      env:  
        CGO_ENABLED: "0"  
      steps:  
        - command: |  
            cd src  # 切换到src目录  
            go build -o go-md2man .  # 构建go-md2man二进制文件
  • 工件和配置生成的容器图像: 定义哪些文件或二进制文件应该被包含在输出中,同时配置生成的容器图像。
    artifacts:  
      binaries:  
        src/go-md2man:  # go-md2man工具的二进制文件  

    image:  
      entrypoint: go-md2man  
      cmd: --help  # 命令:帮助
``

# 基于 Dale 构建包和容器

Dale 可以直接从源代码仓库创建系统包(system packages)和容器镜像(container images)。这种做法为开发人员提供了对构建环境及其输出的精准控制,确保它们既一致又安全。

## 示例:从源码构建包

在这个例子中,Dale 工具获取源代码,根据定义的步骤构建项目,然后将生成的二进制文件打包成一个最小容器镜像。
来源:  
  src:  
    git:  
      url: https://github.com/cpuguy83/go-md2man.git  
      commit: "v2.0.3"  

依赖:  
  构建:  
    - golang  

构建:  
  环境:  
    CGO_ENABLED: "0"  
  构建步骤:  
    - 命令: |  
        cd src  
        go build -o go-md2man .

# 扩展 Dale:自定义配置和构建文件

Dale的架构允许通过自定义目标和构建镜像来扩展,提供灵活性以适应不同的构建需求,更好地满足操作系统不同或项目需求特殊的情况。

## 定义自定义任务及其依赖项

Dale 支持多种目标系统,如 Mariner 2、Azure 上的 Linux 3 和 Windows。每个目标系统都可以有自己的依赖项和配置需求,这使开发人员能够根据目标环境的具体需求调整构建。
目标:  
  mariner2:  
    依赖:  
      构建:  
        - golang

# 确保安全:用 Dale 签名包

Dale的关键特性是它支持包的签名,这增强了供应链的安全性,确保所有构件都被认证和可追溯。签名可以直接在规范文件中配置,也可以通过构建参数或选项来配置,提供了在何时以及如何签署构件的灵活性。

## 示例:配置包的签名

通过在配置中添加签名,Dale 可以自动在构建过程中对 RPM、DEB 或 EXE 文件进行签名,确保这些软件包的安全分发。

包配置:
签名器:
镜像: "签名引用:image"
命令行: "/签名"


# 使用Dale进行测试和验证测试过程

Dale 具备强大的测试功能,允许开发者在规格文件中定义测试,以验证其包和容器的正确性。此功能确保最终生成的构建产物在部署前符合预期的标准。

## 文件验证示例:

Dale 支持多种测试类型,包括但不限于文件是否存在、内容验证以及命令执行情况。例如,这里有一个检查文件的权限以确保符合安全标准的例子:
tests:  
  - name: 检查文件权限设置  
    files:  
      /usr/bin/go-md2man:  
        权限设置: 0755

# 编辑器支持:使用 Dale 让开发更顺畅

Dale 提供了与像 VSCode 和 Vim 这样的流行代码编辑器集成的 JSON 架构文件,这些文件通过为 YAML 文件提供验证和智能感知支持来增强开发人员的体验,使开发过程更加顺畅。这种集成有助于确保规范符合 Dale 的要求,同时减少错误,提高工作效率。

## 在 VS Code 中配置编辑器支持功能

对于 VSCode 用户来说,使用 Red Hat 的 YAML 支持插件在 VSCode 中集成 Dale 的 JSON 模式非常简单。你可以本地配置该模式,或者直接从 Dale 的 GitHub 仓库引用该模式。

{
"yaml.schemas": {
"https://raw.githubusercontent.com/Azure/dale/<version>/docs/spec.schema.json": "test/fixtures/*.yml"
}
}



# 结论:

Dale 表示在安全和可重复构建系统包和容器方面的一个重大进步。通过采用声明性方法并专注于供应链安全,Dale 为开发人员提供了所需工具,以创建一致且简洁的安全构建产物。随着 Dale 的持续发展,它有望成为 DevOps 工具箱中的重要工具,特别是对于致力于提升软件供应链完整性的组织。

要了解更多并开始使用Dale,请查看[Dale文档](https://azure.github.io/dale/),并考虑给出您的反馈以帮助其未来的发展。如果您觉得Dale很有用,请在GitHub上为它点赞以支持其持续开发。
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消