mondoohq/packer-plugin-cnspec

GitHub: mondoohq/packer-plugin-cnspec

一款集成于 HashiCorp Packer 的安全扫描插件,用于在机器镜像构建过程中自动检测漏洞和安全配置错误。

Stars: 27 | Forks: 7

# Mondoo cnspec 的 Packer 插件 ![packer-plugin-cnspec 插图](https://raw.githubusercontent.com/mondoohq/packer-plugin-cnspec/main/.github/social/preview.jpg) 由 [Mondoo](https://mondoo.com) 开发的 Packer 插件 [cnspec](https://github.com/mondoohq/cnspec) 会扫描 Linux 和 Windows 的 [HashiCorp Packer](https://www.packer.io) 构建产物,以检测漏洞和安全配置错误。该插件从 Mondoo 获取 CVE 数据,这些数据每天都会更新最新的 CVE 和安全公告。此外,cnspec 还会使用 [cnspec-policies](https://github.com/mondoohq/cnspec/blob/main/content/) 运行安全扫描,以揭示那些使您的主机面临攻击风险的常见配置错误。cnspec 支持扫描 Linux、Windows 和 macOS,以及 Docker 容器。 ## 插件模式 Packer 插件 cnspec 被设计为在以下两种模式之一中运行: - **未注册** - 在未注册模式下,该插件无需向 Mondoo Platform 注册即可工作,旨在以最少的配置提供基线安全扫描。在 Linux 构建中,该插件运行 [Mondoo 的 Linux 安全](https://github.com/mondoohq/cnspec/blob/main/content/mondoo-linux-security.mql.yaml) 策略。在 Windows 构建中,该插件运行 [Mondoo 的 Windows 安全](https://github.com/mondoohq/cnspec/blob/main/content/mondoo-windows-security.mql.yaml) 策略。这些策略均根据 Linux 和 Windows 的行业标准提供安全强化检查。扫描结果会在 Packer 运行期间显示在 STDOUT 中。 - **已注册** - 在已注册模式下,该插件使用服务账号在 Mondoo Platform 中注册到您的账户。这允许您在 Mondoo Platform 中配置和自定义任何策略,包括 CIS 基准等。扫描结果会显示在 STDOUT 中,并发送回 Mondoo Platform 作为记录保存。 ## 配置选项 `packer-plugin-cnspec` 插件支持多种配置选项,用于自定义扫描行为、身份验证、输出和策略使用。这些选项可以直接在您的 Packer 模板中设置,或者在适用的情况下通过环境变量进行设置。 ### 插件配置字段 | 字段 | 类型 | 描述 | | ----------- | ----------- | ----------- | | `annotations` | `map[string]string` | 分配给已扫描资产的键/值注释。 | | `asset_name` | `string` | 在 Mondoo Platform 中显示的自定义资产名称。默认为实例的主机名。 | | `debug` | `bool` | 启用 debug 日志记录。 | | `host_alias` | `string` | 在 Mondoo Platform 中用于标识主机的别名。默认为 `default`。 | | `incognito` | `bool` | 禁止将扫描结果发送到 Mondoo Platform。默认为自动检测。 | | `labels` | `map[string]string` | 分配给已扫描资产的键/值标签。 | | `local_port` | `uint` | 监听 SSH 连接的起始端口。如果未设置,则默认为系统分配的端口。 | | `mondoo_config_path` | `string` | Mondoo 服务账号 YAML 文件的路径。默认为 `$HOME/.config/mondoo/mondoo.yml`。 | | `on_failure` | `string` | 未达到 `risk_threshold` 时的行为。选项:`continue` 或 `fail`。默认:`fail`。 | | `output` | `string` | 输出格式。选项:`compact`、`csv`、`full`、`json`、`junit`、`report`、`summary`、`yaml`。默认:`compact`。 | | `output_target` | `string` | 用于保存输出的目标路径。可选。 | | `policies` | `[]string` | 代替默认值的策略路径或 URL 列表。启用隐身模式。 | | `policybundle` | `string` | 本地 `.tar.gz` 策略包的路径。 | | `risk_threshold` | `int` | 扫描得分的整数阈值。如果得分低于此值,构建将失败。默认:`100`。 | | `score_threshold` | `int` | **已弃用:** 请改用 `risk_threshold`。 | | `ssh_authorized_key_file` | `string` | SSH 用户的公钥路径。默认为自动生成的一次性密钥。 | | `ssh_host_key_file` | `string` | 用于转发命令的 SSH 密钥路径。默认为自动生成的一次性密钥。 | | `sudo` | `*SudoConfig` | 在适用时使用 `--sudo` 运行扫描。 | | `use_proxy` | `bool` | 使用代理连接到主机。如果需要,回退到 Packer 的通信器代理。 | | `use_scp` | `bool` | 使用 SCP 而不是 SFTP。在 Windows 2025 上不推荐。默认:false。 | | `use_sftp` | `bool` | (已弃用)使用 SFTP 进行文件传输。默认:true。 | | `user` | `string` | 用于 SSH 连接的用户。默认为通信器配置的用户。 | | `winrm_password` | `string` | Windows 实例的 WinRM 密码。默认为通信器的密码。 | | `winrm_user` | `string` | Windows 实例的 WinRM 用户。默认为通信器的用户。 | ### 环境变量 部分配置选项也可以使用环境变量进行设置,特别是与身份验证相关的选项: | 环境变量 | 描述 | | ----------- | ----------- | | `MONDOO_CONFIG_PATH` | Mondoo 服务账号 YAML 文件的路径。等同于 `mondoo_config_path`。 | | `MONDOO_CONFIG_BASE64` | Base64 编码的 Mondoo 服务账号配置。用于 CI/CD 环境或内联 secret。 | 有关 Mondoo 服务账号的更多信息,请参阅官方文档: https://mondoo.com/docs/platform/maintain/access/non-human/service_accounts/ ## 教程 请查看 Mondoo 文档网站上的 Packer 教程: - [使用 cnspec 和 HashiCorp Packer 构建安全的 AMI](https://mondoo.com/docs/cnspec/cloud/aws/packer/) - [使用 cnspec 和 HashiCorp Packer 在 Google Cloud 中构建安全的 VM 镜像](https://mondoo.com/docs/cnspec/cloud/gcp/packer/) # 安装 Packer 插件 cnspec 您可以使用 `packer init` 命令安装 Packer 插件 cnspec,手动安装,或者从源码构建。 ## 使用 packer init 命令安装 从 1.7 版本开始,Packer 的 `packer init` 命令允许自动安装 Packer 插件。有关更多信息,请阅读 [Packer 文档](https://www.packer.io/docs/commands/init)。 要安装 Packer 插件 cnspec: 1. 将此代码复制并粘贴到您的 Packer 配置中。 ``` packer { required_plugins { cnspec = { version = "~> 12" source = "github.com/mondoohq/cnspec" } } } ``` 2. 运行此命令: ``` packer init /path/to/template.pkr.hcl ``` ### 手动安装 您可以在[这里](https://github.com/mondoohq/packer-plugin-cnspec/releases)找到该插件的预编译二进制文件发布版本。 下载与您的目标操作系统相对应的最新压缩包后,将其解压缩以获取与您的平台对应的插件二进制文件。要安装该插件,请遵循 Packer 关于 [安装插件](https://www.packer.io/docs/extending/plugins/#installing-plugins) 的文档。 ### 从源码构建 如果您倾向于从源码构建该插件: 1. 在本地克隆此 GitHub 仓库。 2. 在根目录下运行此命令:`go build` 3. 成功编译后,`packer-plugin-cnspec` 插件二进制文件将位于根目录中。通过运行以下命令将二进制文件复制到 `~/.packer.d/plugins/` 中:`make dev` 4. 要安装编译好的插件,请遵循 Packer 关于[安装插件](https://developer.hashicorp.com/packer/docs/plugins/install-plugins) 的文档。 成功构建 cnspec 插件后,请使用最新版本的 Packer 构建一台机器并验证您的更改。在 [示例文件夹](https://github.com/mondoohq/packer-plugin-cnspec/blob/main/examples) 中,我们提供了一个基本模板。要强制 Packer 使用在上一步中安装的开发版二进制文件,请注释掉 `packer {}` 块。 要使用开发者插件,请设置 packer 插件环境变量: ``` export PACKER_PLUGIN_PATH=~/.packer.d/plugins packer build amazon-linux-2.pkr.hcl ``` ## 配置 Packer 插件 cnspec 有关配置 Packer 插件 cnspec 的详细说明,请访问 HashiCorp 官方文档中的 Packer 插件 cnspec 页面。在那里您将找到关于设置和配置选项的全面指南。 ## Packer 模板示例 您可以在本仓库的 [examples](/examples/) 目录中找到 Packer 模板示例。您还可以找到一个 [GitHub Action 工作流示例](/examples/github-actions/packer-build-scan.yaml),了解如何使用 cnspec 作为 CI/CD pipeline 的一部分来测试构建产物。 ## 开始使用 cnspec cnspec 的优势远不止于保护 Packer 构建的安全!要开始探索,请[下载 cnspec](https://mondoo.com/docs/cnspec/)。 ## 贡献 如果您认为在代码中发现了错误,或者对使用本软件有疑问,请通过在此 GitHub 仓库中创建 issue 与我们联系。 欢迎对本项目做出贡献!如果您想修复错误,请通过在此 GitHub 仓库中提交 pull request 来进行。如果您想添加新功能,请先在此 GitHub 仓库中创建一个 issue,以便事先与我们进行讨论。 ### 加入社区! 加入 [Mondoo 社区 GitHub Discussions](https://github.com/orgs/mondoohq/discussions),共同探讨 policy as code 和安全自动化。
标签:EVTX分析, Packer插件, 关系图谱, 内存分配, 基线检查, 日志审计, 镜像构建