aws-samples/sample-secrets-manager-audit
GitHub: aws-samples/sample-secrets-manager-audit
一条命令解析 AWS Secrets Manager 密钥的完整访问权限,穿透 IAM 角色、Identity Center 和 EKS 服务账户,追溯至真实用户并生成多格式审计报告。
Stars: 1 | Forks: 0
# secrets-audit
解析并报告**谁**可以访问您的 AWS Secrets Manager 密钥——跨账户、透过 Identity Center,一直追溯到 IAM 角色背后的人类用户。
## 问题背景
AWS Secrets Manager 让存储密钥变得简单,但要回答“到底谁能读取这个密钥?”却很困难:
- **IAM 策略分散各处。** 访问权限可能来自附加到用户/角色的身份策略、密钥本身的资源策略或权限边界。没有单一的 API 能为您提供完整视图。
- **Identity Center 增加了间接层。** 在使用 AWS IAM Identity Center(IC,原 SSO)的组织中,您工作负载账户中的 IAM 角色是自动生成的名称,例如 `AWSReservedSSO_ReadOnlyAccess_abcdef123456`。要知道哪些*人类*拥有访问权限,您需要通过权限集、账户分配、用户和组来解析这些角色,而这些信息通常位于完全不同的账户中。
- **EKS 服务账户进一步模糊了界限。** 在 EKS 中运行的 Pod 通过 OIDC 联合承担 IAM 角色。信任策略告诉您这是一个 EKS 工作负载,但仅从角色名称来看并不明显。
- **Secrets Manager 会记录一个“上次访问”时间戳,但不会标识是哪个主体执行了访问**,您必须查询 CloudTrail 才能获取每个主体的访问详情。
`secrets-audit` 通过一条命令解决了所有这些问题。
## 快速入门
```
git clone https://github.com/aws-samples/sample-secrets-manager-audit.git
cd secrets-audit
pip install .
secrets-audit --secret
```
## 功能说明
```
secrets-audit --secret --output table
```
该工具运行一个 10 步流水线:
1. **验证输入** — 密钥名称/ARN 格式、账户 ID、角色 ARN
2. **创建 AWS 会话** — 使用您当前的凭证(无需长期密钥)
3. **识别操作者** — 通过 `sts:GetCallerIdentity` 记录谁运行了审计
4. **解析密钥元数据** — 调用 `DescribeSecret`(从不调用 `GetSecretValue`)
5. **枚举主体** — 列出所有 IAM 角色和用户。通过 `GetAccountAuthorizationDetails` 批量加载所有 IAM 策略数据(一次分页调用,而不是对每个主体发起 API 扇出)。使用 IAM Policy Simulator 并传入 `GetSecretValue`、`PutSecretValue`、`UpdateSecret`、`DeleteSecret`、`CreateSecret` 和 `DescribeSecret` 操作来模拟每个主体的访问,传递密钥的资源标签作为上下文,以便基于标签的策略条件能被正确评估。解析密钥的基于资源的策略以获取额外的允许授权。对于模拟器完全没有匹配语句并予以完全拒绝的主体,在本地评估其预加载的 IAM 策略,以检测模拟器无法检测的访问(例如,`secretsmanager:ResourceTag` 条件)。对于任何仍未解析的主体,通过 `GetContextKeysForPrincipalPolicy` 检查其策略上下文键,并在它们引用了本地评估器无法处理的条件时发出警告。
6. **对每个主体进行分类** — 检查信任策略以将其归类为 Identity Center 托管、EKS 服务账户或普通 IAM
7. **解析 Identity Center** — 承担跨账户角色进入管理账户,以映射权限集 → 账户分配 → 用户和组
8. **使用 CloudTrail 进行补充** *(仅在提供 `--last-accessed` 时)* — 查询 `LookupEvents` 以获取 `GetSecretValue` 调用,从而显示每个主体上次访问该密钥的时间
9. **构建报告** — 将元数据、主体和警告组合成结构化报告
10. **渲染输出** — 格式化为表格、JSON、CSV 或 PDF
## 架构
```
┌─────────────────────────────────────────────────────────┐
│ Workload Account │
│ │
│ ┌──────────────┐ ┌─────────┐ ┌───────────────────┐ │
│ │ Secrets Mgr │ │ IAM │ │ CloudTrail │ │
│ │DescribeSecret│ │ListRoles│ │ LookupEvents │ │
│ │GetResourcePol│ │GetRole │ │ (GetSecretValue) │ │
│ └──────────────┘ │Simulate │ └───────────────────┘ │
│ └─────────┘ │
└──────────────────────┬──────────────────────────────────┘
│ sts:AssumeRole
▼
┌─────────────────────────────────────────────────────────┐
│ Management Account │
│ │
│ ┌──────────────────┐ ┌────────────────────────────┐ │
│ │ SSO Admin │ │ Identity Store │ │
│ │ ListInstances │ │ DescribeUser │ │
│ │ ListPermissionSets│ │ DescribeGroup │ │
│ │ ListAccountAssign │ │ ListGroupMemberships │ │
│ └──────────────────┘ └────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
```
该工具**在设计上是只读的**。它从不修改 IAM 策略、密钥值或 Identity Center 分配。
## 前置条件
- Python 3.11 或更高版本
- 您通过 `aws login`(用于 IAM Identity Center)、环境变量或实例配置文件配置的 AWS 凭证。该工具使用您当前的会话,不会提示输入凭证。
- 用于 Identity Center 解析:管理账户中的跨账户 IAM 角色(参见下方 [所需 IAM 权限](#required-iam-permissions))
## 安装说明
需要 Python 3.11+。
```
# 从源码安装
pip install .
# 用于开发(包含测试依赖)
pip install -e ".[test]"
```
## 依赖项
运行时(固定在 `pyproject.toml` 中):
| 包 | 版本 | 用途 |
|---|---|---|
| `boto3` | 1.38.15 | AWS SDK — 所有针对 Secrets Manager、IAM、STS、Identity Center、CloudTrail 的 API 调用 |
| `click` | 8.1.8 | CLI 框架 — 参数解析、帮助文本、退出码 |
| `reportlab` | 4.4.10 | PDF 报告生成 |
可选 (Web UI):
| 包 | 版本 | 用途 |
|---|---|---|
| `streamlit` | >=1.45.0 | Web UI 框架 — 基于浏览器的审计界面 (`pip install secrets-audit[web]`) |
测试:
| 包 | 版本 | 用途 |
|---|---|---|
| `pytest` | 8.3.5 | 测试运行器 |
| `hypothesis` | 6.122.3 | 针对验证器、分类器和渲染器的基于属性的测试 |
| `moto` | 5.1.3 | 用于集成测试的 AWS API 模拟 |
| `pytest-cov` | 6.1.1 | 覆盖率报告 |
没有任何依赖项会向 AWS API 端点之外发起出站网络调用。
## 用法
### 基础用法 (单账户,表格输出)
```
secrets-audit --secret
```
### 指定特定区域
```
# 在 us-west-2 中按名称审计 secret(无需完整的 ARN)
secrets-audit --secret rds/prod-db-west/app_user --region us-west-2
```
### 包含 Identity Center 解析
有两种方法可以为 Identity Center 解析提供管理账户访问权限:
```
# 选项 A:指定的 AWS CLI profile(如果已配置,推荐使用)
secrets-audit --secret \
--master-profile management-account \
--expand-groups
# 选项 B:显式的 account ID 和 role ARN
secrets-audit --secret \
--region us-west-2 \
--master-account-id \
--cross-account-role-arn arn:aws:iam:::role/SecretsAuditReadOnly \
--expand-groups
```
### 包含来自 CloudTrail 的上次访问时间戳
```
# 包含来自 CloudTrail 的最后访问时间戳(在高吞吐量账户上较慢)
secrets-audit --secret my/secret --last-accessed --output table
```
### 隐藏进度消息
```
# 在脚本/自动化使用时抑制进度消息
secrets-audit --secret my/secret --quiet --output json > report.json
```
### 包含密钥版本元数据
```
# 在报告中包含 version ID、staging label 和创建日期
secrets-audit --secret my/secret --versions --output table
```
### 输出格式
```
# JSON(机器可读,包含完整细节)
secrets-audit --secret my/secret --output json
# CSV(适合电子表格,包含 IC group 成员行)
secrets-audit --secret my/secret --output csv
# PDF(格式化用于打印/审计提交)
secrets-audit --secret my/secret --output pdf
# 写入文件而不是 stdout
secrets-audit --secret my/secret --output json --output-file report.json
secrets-audit --secret my/secret --output csv --output-file report.csv
secrets-audit --secret my/secret --output pdf --output-file audit-report.pdf
```
### 使用密钥 ARN 代替名称
```
secrets-audit --secret arn:aws:secretsmanager:us-east-1:111122223333:secret:rds/prod-db-west/app_user-AbCdEf
```
### CLI 参考
| 选项 | 必需 | 默认值 | 描述 |
|---|---|---|---|
| `--secret` | 是 | — | 密钥名称或完整 ARN。名称遵循分层路径(例如 `service/environment/name`) |
| `--output` | 否 | `table` | 输出格式:`table`、`json`、`csv` 或 `pdf` |
| `--region` | 否 | — | 审计会话的 AWS 区域(例如 `us-west-2`)。默认为环境配置的区域。在非默认区域按名称审计密钥时很有用。 |
| `--master-account-id` | 否 | — | 用于 Identity Center 解析的 12 位 AWS 管理账户 ID |
| `--cross-account-role-arn` | 否 | — | 要在管理账户中承担的 IAM 角色 ARN |
| `--master-profile` | 否 | — | 用于管理账户访问的命名 AWS CLI 配置文件。与 `--master-account-id` 和 `--cross-account-role-arn` 互斥。 |
| `--last-accessed` | 否 | `false` | 启用 CloudTrail 上次访问补充。查询 CloudTrail 以获取 GetSecretValue 事件,以显示每个主体上次访问该密钥的时间。在事件量大的账户上可能会显著增加执行时间。 |
| `--versions` | 否 | `false` | 在报告中包含密钥版本元数据(版本 ID、暂存标签、创建日期)。调用 `ListSecretVersionIds`(只读,无密钥值)。 |
| `--expand-groups` | 否 | `false` | 将 Identity Center 组成员扩展为单个用户 |
| `--quiet` | 否 | `false` | 抑制长时间运行的步骤期间写入 stderr 的进度消息。适用于脚本化或自动化使用。 |
| `--allow-partial` | 否 | `false` | 在跨账户访问失败时继续生成部分报告。如果没有此标志,跨账户失败时工具将立即退出。仅在提供 `--master-account-id`/`--cross-account-role-arn` 或 `--master-profile` 时适用。 |
| `--ic-region` | 否 | — | Identity Center API 调用的 AWS 区域(例如 `us-east-1`)。可选:该工具在省略时会通过尝试常见区域来自动检测 IC 区域。仅在提供跨账户标志时适用。 |
| `--output-file` | 否 | — | 将报告写入文件而不是标准输出 |
| `--expiry-warning-minutes` | 否 | `15` | 凭证过期前发出警告的分钟数。设置为 0 以禁用。如果凭证即将过期,将在模拟步骤之前发出警告。如果凭证在运行期间过期,工具将生成部分报告而不是崩溃。 |
| `--max-workers` | 否 | `5` | 最大并发 `SimulatePrincipalPolicy` 调用数。较高的值可以加速大型账户,但会增加节流压力。自适应重试配置会自动处理节流。 |
要进行 Identity Center 解析,请使用 `--master-profile` 或 `--master-account-id` / `--cross-account-role-arn` 对,不要同时使用两者。如果未提供任何选项,该工具仍会报告所有主体,但无法将 IC 角色名称解析为人类用户。
当提供 `--region` 以及 `--secret` 的完整 ARN 时,对于 Secrets Manager 调用,ARN 中嵌入的区域优先。不会产生冲突,也不会报错。
## 所需 IAM 权限
### 工作负载账户 (密钥所在位置)
操作者的 IAM 身份需要这些只读权限:
```
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "SecretsAuditWorkloadAccount",
"Effect": "Allow",
"Action": [
"secretsmanager:DescribeSecret",
"secretsmanager:GetResourcePolicy",
"secretsmanager:ListSecretVersionIds",
"iam:ListRoles",
"iam:ListUsers",
"iam:GetRole",
"iam:SimulatePrincipalPolicy",
"iam:GetContextKeysForPrincipalPolicy",
"iam:GetAccountAuthorizationDetails",
"iam:ListRolePolicies",
"iam:GetRolePolicy",
"iam:ListAttachedRolePolicies",
"iam:GetPolicy",
"iam:GetPolicyVersion",
"iam:ListUserPolicies",
"iam:GetUserPolicy",
"iam:ListAttachedUserPolicies",
"sts:GetCallerIdentity",
"cloudtrail:LookupEvents"
],
"Resource": "*"
}
]
}
```
### 管理账户 (用于 Identity Center 解析)
创建一个具有此策略的跨账户角色:
```
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "SecretsAuditIdentityCenterReadOnly",
"Effect": "Allow",
"Action": [
"sso:ListInstances",
"sso:ListPermissionSets",
"sso:DescribePermissionSet",
"sso:ListAccountAssignments",
"identitystore:DescribeUser",
"identitystore:DescribeGroup",
"identitystore:ListGroupMemberships"
],
"Resource": "*"
}
]
}
```
以及一个允许工作负载账户承担该角色的信任策略:
```
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam:::root"
},
"Action": "sts:AssumeRole"
}
]
}
```
## 安全模型
| 保证 | 强制执行方式 |
|---|---|
| 从不读取密钥值 | 该工具仅调用 `DescribeSecret`、`GetResourcePolicy` 和 `ListSecretVersionIds`。从不导入或调用 `GetSecretValue`。 |
| 无凭证持久化 | 跨账户凭证仅保存在内存中。不写入任何文件。 |
| 无修改操作 | 该工具仅调用读取/列表/描述/模拟 API。它从不创建、更新或删除任何 AWS 资源。 |
| 输入验证 | 所有 CLI 输入(密钥名称、ARN、账户 ID、角色 ARN、区域、配置文件名称)在进行任何 API 调用之前都会根据正则表达式模式进行验证。 |
| 输出安全 | 渲染的输出从不包含密钥值、完整的策略 JSON 或原始 STS 凭证。仅显示派生的访问级别。 |
## 优雅降级
该工具旨在生成尽可能好的报告,即使某些数据源不可用:
| 场景 | 行为 |
|---|---|
| 跨账户角色承担失败 | 默认情况下,在任何昂贵的流水线步骤运行之前,该工具会立即退出并显示明确的错误。使用 `--allow-partial` 改为继续生成部分报告:IC 托管角色显示权限集名称,但不显示已解析的用户/组,并包含一条警告。 |
| Master 配置文件凭证失败 | 行为与跨账户失败相同:默认快速失败,使用 `--allow-partial` 生成部分报告。 |
| CloudTrail 访问被拒绝 | 所有 `last_accessed` 字段显示 "Unknown (CloudTrail unavailable)"。报告的其余部分是完整的。 |
| 版本元数据访问被拒绝 | 当使用 `--versions` 但 `ListSecretVersionIds` 被拒绝时,将省略版本部分并包含一条警告。报告的其余部分是完整的。 |
| 单个 IC 用户被删除 | 显示 "User ID: [id] (deleted)" 而不是显示名称。 |
| 没有主体拥有访问权限 | 输出 "No IAM principals have access to this secret" 以及完整的元数据头。 |
| 凭证在运行期间过期 | 该工具使用过期前收集的任何数据生成部分报告。警告指出哪个阶段被中断以及评估了多少个主体。使用 `--expiry-warning-minutes` 在模拟步骤之前获得早期警告。 |
| 上下文键检查被拒绝 | 当某个主体的 `GetContextKeysForPrincipalPolicy` 被拒绝时,该工具将跳过该主体并继续检查其他主体。如果所有主体都被拒绝(例如,操作者角色缺乏该权限),该工具将正常完成而不会出现限制警告 — 报告的其余部分不受影响。 |
| 策略获取被拒绝 | 当本地策略评估无法获取某个主体的策略时(例如,AWS 服务链接角色被拒绝 `ListRolePolicies`),该工具将跳过该主体并继续。会记录警告但报告不受影响。 |
## 输出示例
以下示例展示了包含 Identity Center 解析和版本元数据的完整功能调用:
```
secrets-audit --secret rds/prod-db-west/app_user \
--region us-east-1 \
--master-account-id 999988887777 \
--cross-account-role-arn arn:aws:iam::999988887777:role/SecretsAuditReadOnly \
--versions --last-accessed --expand-groups --output table
```
### 表格
```
Secret: rds/prod-db-west/app_user
ARN: arn:aws:secretsmanager:us-east-1:111122223333:secret:rds/prod-db-west/app_user-AbCdEf
Region: us-east-1
Report generated: 2026-03-21T12:00:00+00:00
Generated by: arn:aws:iam::111122223333:role/SecurityAuditor
Tool: secrets-audit v1.3.3
PRINCIPAL TYPE PRINCIPAL NAME IC USER / GROUP ACCESS LEVEL LAST ACCESSED
-------------- ---------------------------------------------------- -------------------------------------- ------------ ---------------------------
IAM Role AWSReservedSSO_ReadOnlyAccess_abcdef123456 jane@example.com Read 2026-03-15 09:30 UTC
IAM Role AWSReservedSSO_DatabaseAdmin_789abc012345 Group: DBA-Team Read/Write 2026-03-20 14:22 UTC
alice@example.com (Enabled)
bob@example.com (Enabled)
IAM Role eks-pod-role Service Account (EKS) Read/Write No recent access (>90 days)
IAM User deploy-bot N/A Admin 2026-03-18 08:15 UTC
SECRET VERSIONS
VERSION ID STAGING LABELS CREATED DATE
-------------------------------------- ------------------------- ---------------------------
a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 AWSCURRENT 2026-03-10 06:00 UTC
a1b2c3d4-5678-90ab-cdef-EXAMPLE22222 AWSPREVIOUS 2026-02-15 12:30 UTC
```
### JSON (缩略版)
`(或其他服务特定的标签条件键)的策略不会被模拟器评估。该工具通过本地策略评估进行补偿,即在客户端获取并解析实际策略文档,检测 `StringEquals`、`StringEqualsIgnoreCase`、`StringLike` 及其 `IfExists` 变体的访问权限。对于不支持的条件运算符或非标签条件键,将改为发出警告。请参阅 [IAM policy simulator 文档](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_testing-policies.html)。 | 对于支持的条件运算符无需采取行动。对于不支持的运算符,请重写策略以使用 `aws:ResourceTag/` 而不是 `secretsmanager:ResourceTag/`。 |
| IAM Policy Simulator 速率限制 | `SimulatePrincipalPolicy` 被限制为每秒约 5 个请求。该工具并行化调用(默认 5 个工作线程,可通过 `--max-workers` 调整)并使用自适应重试。拥有 600 个角色的账户大约在 30 秒内完成。 | 使用 `--max-workers` 根据您账户的速率限制调整并发。 |
## 常见问题
**这个工具会读取我的密钥值吗?**
不会。该工具仅调用 `DescribeSecret` 和 `GetResourcePolicy`。它从不调用 `GetSecretValue`。代码库中甚至不存在该导入。它只需要元数据、策略和 Identity Center 分配来构建访问报告。
**为什么在大型账户上报告需要这么长时间?**
主要瓶颈是 IAM Policy Simulator API (`SimulatePrincipalPolicy`),其速率限制为每秒约 5 个请求。该工具使用有界线程池(默认 5 个工作线程,可通过 `--max-workers` 调整)并行化这些调用。拥有 600 个角色的账户可以在约 30 秒而不是 3 分钟内完成模拟。Identity Center 解析也进行了并行化(4 个并发工作线程)。IAM 策略数据通过 `GetAccountAuthorizationDetails` 批量加载(一次分页调用,而不是按主体扇出)。进度消息出现在 stderr 上,以便您知道工具正在运行。在脚本中使用 `--quiet` 来抑制它们。CloudTrail 补充 (`--last-accessed`) 是可选的,对于大多数密钥会增加 3-10 秒。
**如果我没有到管理账户的跨账户访问权限会怎样?**
如果您提供了跨账户标志(`--master-account-id`/`--cross-account-role-arn` 或 `--master-profile`)并且凭证错误,该工具将在运行昂贵的 IAM Policy Simulator 步骤之前立即退出并显示明确的错误。错误消息会告诉您出了什么问题,并建议使用 `--allow-partial` 如果您仍然想要部分报告。使用 `--allow-partial`,该工具会继续并生成包含所有主体访问级别和分类的完整报告,但 IC 托管角色显示的是权限集名称(例如 `PS: ReadOnlyAccess`)而不是已解析的用户名。如果您根本不提供任何跨账户标志,该工具将在没有 IC 解析的情况下正常运行。
**我可以一次审计多个密钥吗?**
不能在单次调用中完成。该工具每次运行审计一个密钥。要进行批量审计,请编写脚本:
```
for secret in rds/prod-db-west/app_user saas/datadog/api-key snowflake/prod/etl_user; do
secrets-audit --secret "$secret" --output json --output-file "${secret//\//-}.json"
done
```
**为什么会出现一些我不认识的 IAM 角色?**
Policy Simulator 会评估账户中的每个 IAM 角色,包括 AWS 服务链接角色、SSO 配置的角色以及由其他团队或自动化创建的角色。如果角色拥有授予 `secretsmanager:*` 或广泛资源访问权限(`Resource: "*"`)的策略,它将出现在报告中。这是故意的。审计人员需要完整的情况,而不仅仅是您期望的角色。
**`--region` 如何与完整的密钥 ARN 交互?**
它们可以无冲突地共存。当您同时传入 `--region us-west-2` 和 `--secret arn:aws:secretsmanager:us-east-1:...` 时,会话将在 `us-west-2` 中创建,但 `DescribeSecret` 会路由到 `us-east-1`,因为 ARN 具有权威性。报告元数据将显示会话区域。在实践中,如果您使用完整的 ARN,则不需要 `--region`。它在通过名称引用密钥时最有用。
**何时应该使用 `--master-profile` 而不是 `--master-account-id` / `--cross-account-role-arn`?**
如果您的 `~/.aws/config` 中已经有一个用于管理账户的命名配置文件(例如,配置了 `role_arn` 和 `source_profile`),请使用 `--master-profile`。它可以节省按键次数并避免在命令中硬编码 ARN。如果您尚未设置配置文件,或者您正在编写脚本并希望角色 ARN 在命令中可见,请使用显式的 `--master-account-id` + `--cross-account-role-arn` 对。这两种方法是互斥的。如果混合使用,工具将报错。
**如果我的 Identity Center 与我的配置文件默认值不在同一个区域怎么办?**
该工具会自动检测 IC 区域。它首先尝试您会话的默认区域,然后检查常见的 IC 部署区域(us-east-1、us-west-2、eu-west-1、eu-central-1、ap-southeast-1),直到找到实例。您不需要知道 IC 在哪个区域。如果自动检测太慢或者您想跳过额外的 API 调用,请使用 `--ic-region us-east-1`(或您的 IC 所在的任何区域)直接定位它。
**该工具如何处理 `secretsmanager:ResourceTag` 条件?**
IAM Policy Simulator 无法评估服务特定的条件键,例如 `secretsmanager:ResourceTag/`。该工具通过本地策略评估进行补偿:它获取实际策略文档并在客户端评估 Action、Resource 和 Condition 块。这涵盖了 `StringEquals`、`StringEqualsIgnoreCase`、`StringLike` 及其 `IfExists` 变体。对于本地评估器不支持的条件运算符,将发出警告,指出该主体并建议改用 `aws:ResourceTag/`,模拟器和本地评估器都能正确处理它。有关模拟器限制的背景,请参阅 [IAM policy simulator 文档](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_testing-policies.html)。
## Web UI
该工具包含一个由 Streamlit 提供支持的可选基于浏览器的界面。它使用您现有的 AWS 凭证在本地计算机上运行,并且仅连接到 AWS API 端点。不会向第三方服务发送任何数据。
### 安装说明
```
pip install secrets-audit[web]
```
### 启动
```
secrets-audit-web
```
这将在 `http://localhost:8501` 上启动一个本地 Streamlit 服务器并打开您的浏览器。侧边栏提供了与 CLI 相同的选项:密钥名称/ARN、区域、Identity Center 配置、CloudTrail 补充、版本元数据和输出格式。
结果显示为您可以排序和浏览的交互式表格。下载按钮允许您直接从浏览器将报告保存为 PDF 或 CSV。
Web UI 仅绑定到 localhost,并且除了 AWS API 端点之外不进行任何网络调用。
## 版本控制
本项目遵循 [语义化版本控制](https://semver.org/)。版本在 `pyproject.toml` 和 `secrets_audit/__init__.py` 中定义。它出现在每个报告头中为 `Tool: secrets-audit v1.3.8`。
## 许可证
MIT。请参阅 [LICENSE](LICENSE)。
标签:AWS, DevSecOps, DPI, EKS, IAM, Identity Center, JSONLines, Kubernetes, OIDC, Python, Secrets Manager, SSO, Streamlit, 上游代理, 二进制发布, 开源工具, 敏感数据, 无后门, 权限分析, 策略解析, 聊天机器人, 访问控制, 身份与访问管理, 逆向工具, 零信任