prasadtakale/InfraGlance
GitHub: prasadtakale/InfraGlance
InfraGlance 是一款基于 Bash 和 Python 的零依赖静态 HTML 仪表盘工具,用于跨多个 AWS 账户和 GovCloud 提供基础设施清单、成本估算、安全发现和变更追踪的统一可见性。
Stars: 1 | Forks: 0
# InfraGlance
[](https://github.com/prasadtakale/InfraGlance/actions/workflows/ci.yml)
[](https://github.com/prasadtakale/InfraGlance/actions/workflows/nightly.yml)
[](LICENSE)
**用于实现多账户可见性、安全发现、成本信号和 GovCloud 审查的静态 AWS 基础设施仪表盘。**
InfraGlance 会扫描您的 AWS 账户,并为 EC2、RDS、EKS、预留实例、安全发现、标签缺失、成本信号、趋势以及基础设施变更生成一个静态的 HTML 仪表盘。所有内容均按账户、VPC 和环境进行组织。无需运行任何服务器,也无需创建任何 SaaS 账户。只需在浏览器中打开该 HTML 文件即可。
我开发这个工具是因为,虽然 AWS Console 适合用于临时查询,但当您需要跨多个账户快速查看时,它并不怎么好用。像“现在生产环境中正在运行什么?”或“是否有任何服务被公开暴露了?”这样的问题,不应该需要打开十五个浏览器标签页才能回答。

## 为什么选择 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

### RDS

### EKS

### 安全发现

### 趋势

## 架构
```
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, 基础设施管理, 多模态安全, 应用安全, 成本管理, 资源配置, 运维仪表盘, 逆向工具, 静态报告