阿里云ROS合规预检工具InfraGuard

更新时间:
复制 MD 格式

在部署 ROS 模板到生产环境前,手动检查资源配置是否符合安全标准耗时且容易遗漏。InfraGuard 是阿里云开源的基础设施即代码(IaC)合规性预检查工具,可在部署前自动扫描 ROS 模板,识别安全风险和配置错误,避免不安全配置进入生产环境。

适用场景

  • CI/CD 集成:在部署流水线中自动检查 ROS 模板,避免不安全配置进入生产环境。例如,在 GitHub Actions 中每次提交代码时自动扫描模板。

  • 开发阶段:在提交代码前本地扫描模板,提前发现问题。开发者可在本地运行 infraguard scan 检查模板。

  • 合规审计:批量检查多个模板是否符合安全标准。安全团队可定期扫描所有 ROS 模板,生成合规报告。

  • 团队协作:统一团队的合规检查标准,确保所有成员遵循相同规则。团队可使用统一的合规包,确保所有模板符合公司安全标准。

  • 安全防护:担心 ROS 模板中的资源配置不安全,需要在部署前自动发现配置问题。

  • 批量检查:需要批量检查多个模板的合规性,并生成合规性报告供审计使用。

安装 InfraGuard

  • 使用 go install:适用于已安装 Go 1.19 或更高版本的环境,可以自动获取最新版本并保持更新。

  • 下载预编译二进制文件:适用于未安装 Go 环境或需要离线安装的场景,支持 Linux、macOS、Windows 系统(amd64、arm64 架构)。

使用 go install

  1. 使用 go install 安装 InfraGuard:

    go install github.com/aliyun/infraguard/cmd/infraguard@latest
  2. 将 Go bin 目录添加到 PATH,以便在任意目录使用 infraguard 命令:

    export PATH=$PATH:$(go env GOPATH)/bin
  3. 验证安装是否成功:

    infraguard version

    预期输出:

    InfraGuard: X.X.X
    OPA: X.X.X

    如果命令执行成功并显示版本信息,说明安装和 PATH 配置都正确。

下载预编译二进制文件

  1. 访问 GitHub Releases下载对应平台的二进制文件

    平台

    架构

    文件名

    Linux

    amd64

    infraguard-vX.X.X-linux-amd64

    Linux

    arm64

    infraguard-vX.X.X-linux-arm64

    macOS

    amd64 (Intel)

    infraguard-vX.X.X-darwin-amd64

    macOS

    arm64 (Apple Silicon)

    infraguard-vX.X.X-darwin-arm64

    Windows

    amd64

    infraguard-vX.X.X-windows-amd64.exe

    Windows

    arm64

    infraguard-vX.X.X-windows-arm64.exe

  2. 根据操作系统配置二进制文件:

    • Linux/macOS

      1. 设置可执行权限,以便运行二进制文件:

        chmod +x infraguard-*
      2. 移动到 PATH 目录,以便在任意目录使用 infraguard 命令:

        • 系统目录(需要管理员权限):

          sudo mv infraguard-* /usr/local/bin/infraguard
        • 仅当前用户:

          mv infraguard-* ~/bin/infraguard
    • Windows

      1. 将下载的 infraguard-vX.X.X-windows-amd64.exeinfraguard-vX.X.X-windows-arm64.exe 重命名为 infraguard.exe

      2. infraguard.exe 移动到 PATH 目录,以便在任意目录使用 infraguard 命令:

        • 系统目录:C:\Windows\System32

        • 或创建专用目录(如 C:\Program Files\infraguard)并添加到 PATH 环境变量

        如果未添加到 PATH,可以在命令行中使用完整路径运行,例如 C:\Program Files\infraguard\infraguard.exe version

  3. 验证安装是否成功:

    infraguard version

    预期输出:

    InfraGuard: X.X.X
    OPA: X.X.X

    如果命令执行成功并显示版本信息,说明安装和 PATH 配置都正确。

快速开始

  1. 创建示例 ROS 模板文件 template.yaml

    ROSTemplateFormatVersion: '2015-09-01'
    Description: Sample ECS instance
    Resources:
      MyECS:
        Type: ALIYUN::ECS::InstanceGroup
        Properties:
          ImageId: 'centos_7'
          InstanceType: 'ecs.t5-lc1m1.small'
          AllocatePublicIP: true
          SecurityGroupId: 'sg-xxxxx'
          VpcId: 'vpc-xxxxx'
          VSwitchId: 'vsw-xxxxx'
  2. 使用内置规则扫描模板:

    infraguard scan template.yaml -p rule:aliyun:ecs-running-instance-no-public-ip --lang zh

    预期输出(发现违规时):

    扫描模板:template.yaml
    high #1 分配公网 IP 会使实例直接暴露在互联网上,增加了攻击面。
    
      template.yaml:9
    ┌────────┬────────────────────────────────────┐
    │ 7      │ ImageId: 'centos_7'                │
    │ 8      │ InstanceType: 'ecs.t5-lc1m1.small' │
    │ >    9 │ AllocatePublicIP: true             │
    │ 10     │ SecurityGroupId: 'sg-xxxxx'        │
    │ 11     │ VpcId: 'vpc-xxxxx'                 │
    └────────┴────────────────────────────────────┘
    
      规则 ID rule:aliyun:ecs-running-instance-no-public-ip
      资源 MyECS
      修复建议 通过将 AllocatePublicIP 设置为 false 或使用 NAT 网关来取消分配公网 IP。
    
    ───────────────────────────────────── 检查结果 ─────────────────────────────────────
      合计: 1 | 高: 1 | 中: 0 | 低: 0
    如果未看到输出或输出异常,可能原因:模板路径错误、规则名称错误、模板格式错误。
  3. 使用合规包批量检查:合规包是一组预定义的规则集合,用于批量检查特定场景的合规性。

    infraguard scan template.yaml -p pack:aliyun:security-group-best-practice
  4. 生成不同格式的报告:

    • 表格格式(默认):适合命令行快速查看

      infraguard scan template.yaml -p pack:aliyun:quick-start-compliance-pack
    • JSON 格式:机器可读,便于集成到 CI/CD 流程

      infraguard scan template.yaml -p pack:aliyun:quick-start-compliance-pack --format json
    • HTML 报告:在浏览器中打开 report.html 查看交互式报告

      infraguard scan template.yaml -p pack:aliyun:quick-start-compliance-pack --format html -o report.html

常见用法

使用多个策略扫描

infraguard scan template.yaml \
  -p rule:aliyun:ecs-instance-no-public-ip \
  -p rule:aliyun:rds-instance-enabled-disk-encryption \
  -p pack:aliyun:quick-start-compliance-pack

设置语言偏好

临时设置输出语言:

# 中文输出
infraguard scan template.yaml -p pack:aliyun:quick-start-compliance-pack --lang zh

# 英文输出
infraguard scan template.yaml -p pack:aliyun:quick-start-compliance-pack --lang en

永久设置语言:

infraguard config set lang zh

快速参考

常用命令

操作

命令

说明

扫描模板

infraguard scan <template.yaml> -p <policy>

使用指定策略扫描 ROS 模板

列出所有策略

infraguard policy list

获取规则详情

infraguard policy get <rule-id>

设置语言

infraguard config set lang zh

永久设置输出语言

查看版本

infraguard version

命令参数说明

参数

说明

示例

-p, --policy

指定策略(规则或合规包),可多次使用

-p rule:aliyun:ecs-instance-no-public-ip

--format

指定输出格式(table/json/html)

--format json

-o, --output

指定输出文件(HTML 格式)

-o report.html

--lang

指定输出语言(zh/en)

--lang zh

常用合规包

合规包 ID

说明

适用场景

pack:aliyun:quick-start-compliance-pack

快速入门合规包

新手快速上手

pack:aliyun:security-group-best-practice

安全组最佳实践

安全组配置检查

pack:aliyun:mlps-level-3-pre-check-compliance-pack

等保三级预检

等保三级合规检查

输出格式对比

格式

命令参数

适用场景

示例

表格(默认)

命令行快速查看

infraguard scan template.yaml -p <policy>

JSON

--format json

CI/CD 集成、自动化处理

infraguard scan template.yaml -p <policy> --format json

HTML

--format html -o report.html

详细报告查看、分享给团队

infraguard scan template.yaml -p <policy> --format html -o report.html

常见问题

下载的二进制文件无法执行

检查以下两个方面:

  • 文件权限:Linux/macOS 需要设置可执行权限

    chmod +x infraguard-*
  • 架构匹配:确认下载的二进制文件与系统架构匹配(amd64/arm64)

执行 infraguard 命令时提示 command not found

检查 PATH 环境变量,确认 infraguard 在 PATH 中

# 检查 PATH
echo $PATH

# 临时添加到 PATH
export PATH=$PATH:$(go env GOPATH)/bin

扫描失败,提示"无法解析模板"

检查 YAML 格式是否正确,确保符合 ROS 模板规范

# 检查 YAML 语法
yamllint template.yaml

规则未生效

使用 infraguard policy get <rule-id> 检查规则详情,确认规则名称正确

扫描结果为空

可能原因:

  • 模板配置正确,没有发现问题(这是正常的)

  • 规则名称错误,使用 infraguard policy list 查看可用规则

  • 模板路径错误,检查文件路径是否正确

相关文档

更多详细信息,参见InfraGuard官网文档