prasadtakale/InfraGlance

GitHub: prasadtakale/InfraGlance

InfraGlance 是一款基于 Bash 和 Python 的零依赖静态 HTML 仪表盘工具,用于跨多个 AWS 账户和 GovCloud 提供基础设施清单、成本估算、安全发现和变更追踪的统一可见性。

Stars: 1 | Forks: 0

# InfraGlance [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/00c3e8f954005724.svg)](https://github.com/prasadtakale/InfraGlance/actions/workflows/ci.yml) [![Nightly Scan](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/8e1859809e005730.svg)](https://github.com/prasadtakale/InfraGlance/actions/workflows/nightly.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) **用于实现多账户可见性、安全发现、成本信号和 GovCloud 审查的静态 AWS 基础设施仪表盘。** InfraGlance 会扫描您的 AWS 账户,并为 EC2、RDS、EKS、预留实例、安全发现、标签缺失、成本信号、趋势以及基础设施变更生成一个静态的 HTML 仪表盘。所有内容均按账户、VPC 和环境进行组织。无需运行任何服务器,也无需创建任何 SaaS 账户。只需在浏览器中打开该 HTML 文件即可。 我开发这个工具是因为,虽然 AWS Console 适合用于临时查询,但当您需要跨多个账户快速查看时,它并不怎么好用。像“现在生产环境中正在运行什么?”或“是否有任何服务被公开暴露了?”这样的问题,不应该需要打开十五个浏览器标签页才能回答。 ![InfraGlance 仪表盘预览](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/37ee350f64005732.svg) ## 为什么选择 InfraGlance? InfraGlance 提供了跨多个账户和区域的 AWS 基础设施统一视图。 与 AWS Console 不同,InfraGlance 专注于: - 多账户可见性 - 基础设施治理 - 安全发现 - 成本感知 - EKS 清单 - GovCloud 支持 - 离线静态报告 无需 agent。无需数据库。无需 SaaS。 ## 演示 无需 AWS 凭证即可尝试使用模拟数据的演示: ``` python3 render_report.py \ --title InfraGlance-Demo \ --manifest examples/fake-data/manifest.tsv \ --vpcs examples/fake-data/vpcs.tsv \ --output-dir examples/sample-report \ --generated-at demo \ --pricing-file pricing.json \ --required-tags Environment,Owner \ --history-file examples/sample-report/infraglance-history.json \ --state-file examples/sample-report/infraglance-state.json ``` 然后打开: ``` examples/sample-report/summary.html ``` 提交到仓库的 `examples/sample-report/` 文件是由模拟数据生成的,可以安全地浏览或通过 GitHub 链接分享。示例历史文件包含多个模拟快照,因此 `examples/sample-report/trends.html` 会立即显示趋势图。 ## 截图 这些截图使用的是模拟演示数据,而非真实的 AWS 账户数据。 ### EC2 ![EC2 VPC 视图](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/7744603a05005737.svg) ### RDS ![RDS 清单](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/666d046d0c005742.svg) ### EKS ![EKS 集群](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/07ed00ac1d005747.svg) ### 安全发现 ![安全发现](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/3b30e930b0005753.svg) ### 趋势 ![趋势信号](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/905bc49e76005758.svg) ## 架构 ``` flowchart LR A["AWS CLI"] --> B["JSON collection in data folder"] B --> C["Python renderer"] C --> D["Static HTML reports in site folder"] D --> E["Open locally"] D --> F["Optional S3 publish"] D --> G["Optional Slack summary"] ``` ## 它的功能 运行 `bash infraglance.sh`,它会使用 AWS CLI 从您配置的账户中收集数据,然后生成一个包含静态 HTML 页面的文件夹: | 页面 | 内容 | | --------------- | ---------------------------------------------------------------------------------------------------- | | `summary.html` | 跨账户概览:EC2 数量、预计成本、RI 覆盖率以及每个账户的安全发现 | | `index.html` | 按 VPC 分组的 EC2 清单,包含每个实例的成本估算和 RI 覆盖率 | | `rds.html` | RDS 数据库:引擎、加密状态、Multi-AZ 以及公开访问权限 | | `reserved.html` | 活跃的预留实例以及哪些正在运行的 EC2 受到覆盖(或未覆盖) | | `findings.html` | 自动检测到的安全问题:开放的安全组、未加密的 RDS 以及公开的数据库 | | `tags.html` | 缺少必需标签的 EC2 和 RDS 资源 | | `changes.html` | 自上次扫描以来发生的变化:新增、移除或修改过的资源 | | `trends.html` | 随时间变化的 EC2 数量、成本和发现的折线图 | | `eks.html` | EKS 集群和节点组,包含 Spot 与按需(On-Demand)的细分 | 每个表格都具备搜索、列排序和 CSV 导出功能。输出的是纯 HTML,没有任何外部依赖,因此可以在离线状态下工作,并且很容易通过电子邮件发送或发布到 S3。 ## 设置 您需要 Bash 4+、Python 3.8+ 和 AWS CLI v2。无需安装任何 Python 软件包,因为渲染器仅使用标准库。 ``` git clone https://github.com/prasadtakale/InfraGlance.git cd InfraGlance cp infraglance.conf.example infraglance.conf ``` 编辑 `infraglance.conf` 以指向您的 AWS 账户,然后在首次完整运行之前验证您的凭证: ``` bash infraglance.sh --check bash infraglance.sh open site/index.html ``` `--check` 标志可在不收集任何数据的情况下验证您的凭证和区域。如果这是一个新账户或角色,建议先运行此命令。 常用标志: ``` bash infraglance.sh --config ./infraglance.prod.conf bash infraglance.sh --output-dir ./site-prod bash infraglance.sh --work-dir ./data-prod ``` ## IAM 权限 InfraGlance 只需要读取权限。将此策略附加到其进行身份验证的任何角色或用户即可: ``` { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeVpcs", "ec2:DescribeInstances", "ec2:DescribeSecurityGroups", "ec2:DescribeReservedInstances", "ec2:DescribeRegions", "rds:DescribeDBInstances", "eks:ListClusters", "eks:DescribeCluster", "eks:ListNodegroups", "eks:DescribeNodegroup", "sts:GetCallerIdentity" ], "Resource": "*" } ] } ``` 对于跨账户扫描,调用方身份还需要具备 `sts:AssumeRole` 权限。 ## 配置 配置文件涵盖了账户、区域、VPC 分组、成本设置以及一些可选功能: ``` # 要使用的 AWS partition。从 credentials 自动检测,或显式设置。 PARTITION="auto" # auto | aws | aws-us-gov # 要扫描的 Accounts ACCOUNTS=("prod" "staging" "shared") ACCOUNT_prod_LABEL="Production" ACCOUNT_prod_PROFILE="prod-profile" # named AWS CLI profile ACCOUNT_prod_ROLE_ARN="" # or assume a role instead ACCOUNT_prod_REGIONS=("us-east-1" "us-west-2") # VPC 会根据此 tag 自动分组 ENVIRONMENT_TAG_KEY="Environment" # 每次运行后发布到 S3(留空则跳过) S3_BUCKET="my-reports-bucket" # 每次扫描后在 Slack 发布摘要 SLACK_WEBHOOK_URL="" # 每个 EC2 和 RDS 资源上应存在的 Tags REQUIRED_TAGS="Environment,Owner,CostCenter" # 在外部共享报告前隐去敏感字段 REDACT_PRIVATE_IPS="false" REDACT_PUBLIC_IPS="false" REDACT_INSTANCE_NAMES="false" REDACT_DB_NAMES="false" ``` 有关完整的参考说明和注释,请参阅 [infraglance.conf.example](infraglance.conf.example)。 ## 多账户设置 每个账户都有自己独立的配置变量块。InfraGlance 会根据需要担任相应的角色,因此您可以扫描那些您没有直接凭证的账户: ``` ACCOUNTS=("prod" "staging" "security") ACCOUNT_prod_LABEL="Production" ACCOUNT_prod_ROLE_ARN="arn:aws:iam::111122223333:role/infraglance-readonly" ACCOUNT_prod_REGIONS=("us-east-1") ACCOUNT_staging_LABEL="Staging" ACCOUNT_staging_PROFILE="staging-cli-profile" ACCOUNT_staging_REGIONS=("us-east-1" "us-west-2") ACCOUNT_security_LABEL="Security" ACCOUNT_security_ROLE_ARN="arn:aws:iam::444455556666:role/infraglance-readonly" ACCOUNT_security_REGIONS=("auto") # auto-discovers all enabled regions ``` ## GovCloud 设置 `PARTITION="aws-us-gov"`,InfraGlance 会自动将收集范围限制为 `us-gov-west-1` 和 `us-gov-east-1`。角色 ARN 使用 `arn:aws-us-gov:` 前缀。在收集任何数据之前,系统会针对 `sts:GetCallerIdentity` 对该分区进行验证,因此如果角色配置错误,它会立即报错,而不是静默地从错误的环境中收集数据。 生成的 HTML 没有 CDN 依赖项,也不会发出任何外部请求。您可以在气隔环境中审查报告,或将其分享给审计人员,而无需让任何数据脱离您的控制。 ## 每日定时运行 `.github/workflows/nightly.yml` 中包含了一个 GitHub Actions 工作流。它会在 UTC 时间 02:00 运行,通过 OIDC 担任 IAM 角色,从 S3 中拉取之前的历史文件(用于生成趋势图),执行扫描,然后上传报告。所需的 secrets 包括:`AWS_ROLE_ARN`、`S3_BUCKET`、`SLACK_WEBHOOK_URL`。 ## 路线图 - 通过 AWS Pricing API 进行实时成本估算,以取代静态的 `pricing.json` - 在“摘要”页面上提供按环境划分的成本明细 - Lambda 函数清单 - EBS 卷的创建时长、加密状态、未挂载卷及快照可见性 - ELB、ALB 和 NLB 清单,及其公开/私有暴露情况 - 针对过期用户、宽泛策略和未使用访问密钥的 IAM 访问发现 - S3 公开存储桶及存储桶加密审查 - WAF 关联及覆盖范围报告 - 按账户和 VPC 统计的 NAT Gateway 成本可见性 - Route 53 公有托管区可见性 - RDS 和 EC2 的合理规模调整建议 ## 贡献 代码库非常精简。`infraglance.sh` 负责 AWS 数据收集,而 `render_report.py` 负责生成 HTML。如果您想添加新的资源类型,模式非常简单:在 shell 脚本中收集原始 JSON,然后在 Python 中添加一个 `load_*` 函数和页面渲染器。在开始进行任何大型改动之前,请先创建一个 issue。 ## 许可证 MIT
标签:AWS, Bash, DPI, 基础设施管理, 多模态安全, 应用安全, 成本管理, 资源配置, 运维仪表盘, 逆向工具, 静态报告