在部署 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
使用 go install 安装 InfraGuard:
go install github.com/aliyun/infraguard/cmd/infraguard@latest将 Go bin 目录添加到 PATH,以便在任意目录使用 infraguard 命令:
export PATH=$PATH:$(go env GOPATH)/bin验证安装是否成功:
infraguard version预期输出:
InfraGuard: X.X.X OPA: X.X.X如果命令执行成功并显示版本信息,说明安装和 PATH 配置都正确。
下载预编译二进制文件
访问 GitHub Releases下载对应平台的二进制文件
平台
架构
文件名
Linux
amd64
infraguard-vX.X.X-linux-amd64Linux
arm64
infraguard-vX.X.X-linux-arm64macOS
amd64 (Intel)
infraguard-vX.X.X-darwin-amd64macOS
arm64 (Apple Silicon)
infraguard-vX.X.X-darwin-arm64Windows
amd64
infraguard-vX.X.X-windows-amd64.exeWindows
arm64
infraguard-vX.X.X-windows-arm64.exe根据操作系统配置二进制文件:
Linux/macOS:
设置可执行权限,以便运行二进制文件:
chmod +x infraguard-*移动到 PATH 目录,以便在任意目录使用 infraguard 命令:
系统目录(需要管理员权限):
sudo mv infraguard-* /usr/local/bin/infraguard仅当前用户:
mv infraguard-* ~/bin/infraguard
Windows:
将下载的
infraguard-vX.X.X-windows-amd64.exe或infraguard-vX.X.X-windows-arm64.exe重命名为infraguard.exe将
infraguard.exe移动到 PATH 目录,以便在任意目录使用 infraguard 命令:系统目录:
C:\Windows\System32或创建专用目录(如
C:\Program Files\infraguard)并添加到 PATH 环境变量
如果未添加到 PATH,可以在命令行中使用完整路径运行,例如
C:\Program Files\infraguard\infraguard.exe version
验证安装是否成功:
infraguard version预期输出:
InfraGuard: X.X.X OPA: X.X.X如果命令执行成功并显示版本信息,说明安装和 PATH 配置都正确。
快速开始
创建示例 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'使用内置规则扫描模板:
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如果未看到输出或输出异常,可能原因:模板路径错误、规则名称错误、模板格式错误。
使用合规包批量检查:合规包是一组预定义的规则集合,用于批量检查特定场景的合规性。
infraguard scan template.yaml -p pack:aliyun:security-group-best-practice生成不同格式的报告:
表格格式(默认):适合命令行快速查看
infraguard scan template.yaml -p pack:aliyun:quick-start-compliance-packJSON 格式:机器可读,便于集成到 CI/CD 流程
infraguard scan template.yaml -p pack:aliyun:quick-start-compliance-pack --format jsonHTML 报告:在浏览器中打开
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快速参考
常用命令
操作 | 命令 | 说明 |
扫描模板 |
| 使用指定策略扫描 ROS 模板 |
列出所有策略 |
| — |
获取规则详情 |
| — |
设置语言 |
| 永久设置输出语言 |
查看版本 |
| — |
命令参数说明
参数 | 说明 | 示例 |
| 指定策略(规则或合规包),可多次使用 |
|
| 指定输出格式(table/json/html) |
|
| 指定输出文件(HTML 格式) |
|
| 指定输出语言(zh/en) |
|
常用合规包
合规包 ID | 说明 | 适用场景 |
| 快速入门合规包 | 新手快速上手 |
| 安全组最佳实践 | 安全组配置检查 |
| 等保三级预检 | 等保三级合规检查 |
输出格式对比
格式 | 命令参数 | 适用场景 | 示例 |
表格(默认) | 无 | 命令行快速查看 |
|
JSON |
| CI/CD 集成、自动化处理 |
|
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官网文档。