Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
cloudsplaining — Cloudsplaining 是一款 AWS IAM 安全评估工具,用于识别最低权限原则的违反情况,并生成按风险优先级排序的报告。 | Kitploit
工具/GitHubGitHub/salesforce/cloudsplaining
云基础设施安全漏洞分析配置审计云安全身份与访问管理 (IAM)错误配置云基础设施安全 分类第 8 名云安全 分类第 9 名
GitHubsalesforce/cloudsplaining
2.2k2193111天前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

cloudsplaining

Cloudsplaining 是一款 AWS IAM 安全评估工具,用于识别最低权限原则的违反情况,并生成按风险优先级排序的报告。

查看仓库网站

Cloudsplaining

Cloudsplaining 是一个 AWS IAM 安全评估工具,用于识别违反最小权限原则的情况,并生成基于风险优先级的 HTML 报告。

Tests Documentation Status Join the chat at https://gitter.im/cloudsplaining Twitter PyPI Python Version Downloads

  • 示例报告

文档

完整的文档,请访问 ReadTheDocs 上的项目。

  • 安装
  • 速查表
  • 示例报告

概述

Cloudsplaining 能够识别 AWS IAM 策略中违反最小权限原则的情况,并生成美观的 HTML 报告。它可以扫描您 AWS 账户中的所有策略、跨多个 AWS 账户扫描,或者扫描单个策略文件。

该工具有助于识别未使用资源约束的 IAM 操作,同时通过标记出以下无限制情况下给 AWS 账户带来风险的 IAM 策略,来帮助优先处理修复工作:

  • 数据泄露(s3:GetObject、ssm:GetParameter、secretsmanager:GetSecretValue)
  • 基础设施修改
  • 资源暴露(修改基于资源的策略的能力)
  • 权限提升(基于 Pathfinding.cloud)
  • 凭据泄露

Cloudsplaining 还会识别那些可以被 AWS 计算服务(如 EC2、ECS、EKS 或 Lambda)担任的 IAM 角色,因为这些角色可能比用户定义的角色带来更大的风险——尤其是在 AWS 计算服务实例直接或间接暴露于互联网的情况下。标记这些角色对渗透测试人员(或攻击者)在特定场景下尤为有用。例如,如果攻击者获得了执行 ssm:SendCommand 的权限,并且存在已安装 SSM 代理的高权限 EC2 实例,那么他们实际上就拥有了这些 EC2 实例的权限。通过 AWS Systems Manager Agent 进行远程代码执行已经是已知的权限提升/利用路径,但 Cloudsplaining 可以更轻松地识别这些情况。有关示例,请参阅样例报告。

您还可以指定一个自定义排除文件,以过滤掉因各种原因产生的误报结果。例如,用户策略通常是宽松设计的,而系统角色则通常更严格。您可能还会根据组织的多账户策略或 AWS 应用架构制定特定的排除项。

动机

Policy Sentry 向我们揭示了以可扩展的方式最终按照最小权限原则编写 IAM 策略是可行的。在 Policy Sentry 发布之前,人们很容易发现缺少资源约束的 IAM 策略文档。考虑以下策略,它允许 IAM 主体(角色或用户)对 AWS 账户中的任何 S3 存储桶执行 s3:PutObject 操作:```json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": "*" } ] }

root@kitploit:~
这很糟糕。理想情况下,访问权限应根据资源ARN进行限制,如下所示:```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject"
      ],
      "Resource": "arn:aws:s3:::my-bucket/*"
    }
  ]
}

Policy Sentry 让这变得非常容易。一旦基础设施即代码开发者或AWS管理员熟悉了该工具(它非常容易使用),我们发现采用速度会非常快。然而,如果你一直在使用AWS,很可能有大量IAM策略积压需要改进。如果你有数百个AWS账户,每个账户中有几十个策略,我们如何通过编程方式识别需要修复的策略来锁定这些AWS账户?

这就是我们编写Cloudsplaining的原因。

Cloudsplaining可以识别AWS IAM策略中的最小权限违规,并生成漂亮的HTML报告。它可以扫描你AWS账户中的所有策略、跨多个AWS账户,或者可以扫描单个策略文件。

Installation

Homebrew```bash

brew tap salesforce/cloudsplaining https://github.com/salesforce/cloudsplaining brew install cloudsplaining

root@kitploit:~
#### Pip3```bash
pip3 install --user cloudsplaining
  • 现在,你应该能够通过运行 cloudsplaining --help 在命令行中执行 cloudsplaining。

Shell 补全

要启用 Bash 补全,请将以下内容放入你的 .bashrc:```bash eval "$(_CLOUDSPLAINING_COMPLETE=bash_source cloudsplaining)"

root@kitploit:~
为了启用 ZSH 补全功能,请将此内容放入您的 .zshrc 文件中:```bash
eval "$(_CLOUDSPLAINING_COMPLETE=zsh_source cloudsplaining)"

扫描单个IAM策略

您还可以扫描单个策略文件以识别风险,而不是扫描整个账户。```bash cloudsplaining scan-policy-file --input-file examples/policies/explicit-actions.json

root@kitploit:~
输出将包含一个发现描述以及一个未利用资源约束的IAM操作列表。

输出将类似于以下内容:```console
Issue found: Data Exfiltration
Actions: s3:GetObject

Issue found: Resource Exposure
Actions: ecr:DeleteRepositoryPolicy, ecr:SetRepositoryPolicy, s3:BypassGovernanceRetention, s3:DeleteAccessPointPolicy, s3:DeleteBucketPolicy, s3:ObjectOwnerOverrideToBucketOwner, s3:PutAccessPointPolicy, s3:PutAccountPublicAccessBlock, s3:PutBucketAcl, s3:PutBucketPolicy, s3:PutBucketPublicAccessBlock, s3:PutObjectAcl, s3:PutObjectVersionAcl

Issue found: Unrestricted Infrastructure Modification
Actions: ecr:BatchDeleteImage, ecr:CompleteLayerUpload, ecr:CreateRepository, ecr:DeleteLifecyclePolicy, ecr:DeleteRepository, ecr:DeleteRepositoryPolicy, ecr:InitiateLayerUpload, ecr:PutImage, ecr:PutImageScanningConfiguration, ecr:PutImageTagMutability, ecr:PutLifecyclePolicy, ecr:SetRepositoryPolicy, ecr:StartImageScan, ecr:StartLifecyclePolicyPreview, ecr:TagResource, ecr:UntagResource, ecr:UploadLayerPart, s3:AbortMultipartUpload, s3:BypassGovernanceRetention, s3:CreateAccessPoint, s3:CreateBucket, s3:DeleteAccessPoint, s3:DeleteAccessPointPolicy, s3:DeleteBucket, s3:DeleteBucketPolicy, s3:DeleteBucketWebsite, s3:DeleteObject, s3:DeleteObjectTagging, s3:DeleteObjectVersion, s3:DeleteObjectVersionTagging, s3:GetObject, s3:ObjectOwnerOverrideToBucketOwner, s3:PutAccelerateConfiguration, s3:PutAccessPointPolicy, s3:PutAnalyticsConfiguration, s3:PutBucketAcl, s3:PutBucketCORS, s3:PutBucketLogging, s3:PutBucketNotification, s3:PutBucketObjectLockConfiguration, s3:PutBucketPolicy, s3:PutBucketPublicAccessBlock, s3:PutBucketRequestPayment, s3:PutBucketTagging, s3:PutBucketVersioning, s3:PutBucketWebsite, s3:PutEncryptionConfiguration, s3:PutInventoryConfiguration, s3:PutLifecycleConfiguration, s3:PutMetricsConfiguration, s3:PutObject, s3:PutObjectAcl, s3:PutObjectLegalHold, s3:PutObjectRetention, s3:PutObjectTagging, s3:PutObjectVersionAcl, s3:PutObjectVersionTagging, s3:PutReplicationConfiguration, s3:ReplicateDelete, s3:ReplicateObject, s3:ReplicateTags, s3:RestoreObject, s3:UpdateJobPriority, s3:UpdateJobStatus

扫描整个AWS账户

下载账户授权详情

我们可以扫描整个AWS账户并生成报告。为此,我们利用AWS IAM的get-account-authorization-details API调用,该调用会下载一个大型JSON文件(每个账户约100KB),其中包含该账户的所有IAM详细信息,包括用户、组、角色、客户管理策略和AWS管理策略的数据。

  • 您必须配置好可供CLI使用的AWS凭证。

  • 您必须具有运行iam:GetAccountAuthorizationDetails的权限。策略arn:aws:iam::aws:policy/SecurityAudit包含了此权限,其他许多允许对IAM服务进行读取访问的策略也包含此权限。

  • 要下载账户授权详情,请确保您已通过AWS认证,然后运行cloudsplaining的download命令:```bash cloudsplaining download

root@kitploit:~
* 如果您更喜欢使用 `~/.aws/credentials` 文件而不是环境变量,您可以指定配置文件名称:```bash
cloudsplaining download --profile myprofile

它将在您当前目录中下载一个JSON文件,其中包含您账户授权详细信息。

创建排除文件

Cloudsplaining工具并不试图理解您AWS账户中所有内容的上下文。可以通过编程方式理解其中某些内容的上下文——例如,策略是否应用于实例配置文件、策略是否已附加、是否在使用内联IAM策略,以及是否在使用AWS托管策略。只有您了解AWS基础设施设计和IAM策略背后的上下文。

因此,消除依赖于上下文的误报非常重要。您可以使用排除文件来实现这一点。我们包含了一个命令,可以为您生成一个排除文件模板,这样您就不必记住所需的格式。

您可以通过以下命令创建排除模板:```bash cloudsplaining create-exclusions-file

root@kitploit:~
这将在当前目录中生成一个名为 `exclusions.yml` 的文件。

现在,当你运行 `scan` 命令时,你可以像这样使用排除文件:```bash
cloudsplaining scan --exclusions-file exclusions.yml --input-file examples/files/example.json --output examples/files/

有关排除文件结构的更多信息,请参阅过滤误报

扫描授权详情文件

既然我们已经下载了账户授权文件,就可以使用 cloudsplaining 扫描 所有 AWS IAM 策略。

运行以下命令:```bash cloudsplaining scan --exclusions-file exclusions.yml --input-file examples/files/example.json --output examples/files/

root@kitploit:~
它将创建一个类似[这个](https://opensource.salesforce.com/cloudsplaining/)的HTML报告:

> ![](https://raw.githubusercontent.com/salesforce/cloudsplaining/HEAD/docs/_images/cloudsplaining-report.gif)

它还将创建一个原始JSON数据文件:

* `default-iam-results.json`:该文件包含报告的原始JSON输出。你可以使用这个数据文件对扫描结果进行各种操作。例如,你可以编写一个Python脚本来解析这些数据,并自动创建JIRA问题或Salesforce工作项。下面显示了一个示例条目。完整示例可以在[examples/files/iam-results-example.json](https://github.com/salesforce/cloudsplaining/blob/master/examples/files/iam-results-example.json)查看。```json
{
    "example-authz-details": [
        {
            "AccountID": "012345678901",
            "ManagedBy": "Customer",
            "PolicyName": "InsecureUserPolicy",
            "Arn": "arn:aws:iam::012345678901:user/userwithlotsofpermissions",
            "ActionsCount": 2,
            "ServicesCount": 1,
            "Actions": [
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Services": [
                "s3"
            ]
        }
    ]
}

请查看 examples/files 文件夹以获取示例输出。

过滤误报

资源约束是最佳实践——尤其是针对系统角色/实例配置文件——但有时,这些是有意设计的。例如,考虑一种情况:为预置 Terraform 的 EC2 实例的实例配置文件使用了自定义 IAM 策略。在这种情况下,宽泛的权限是设计需求——因此我们不希望将这些包含在结果中。

您可以通过以下命令创建排除模板:```bash cloudsplaining create-exclusions-file

root@kitploit:~
这将在当前目录中生成一个名为 `exclusions.yml` 的文件。

默认的排除文件看起来像这样:```yaml
# Policy names to exclude from evaluation
# Suggestion: Add policies here that are known to be overly permissive by design, after you run the initial report.
policies:
  - "AWSServiceRoleFor*"
  - "*ServiceRolePolicy"
  - "*ServiceLinkedRolePolicy"
  - "AdministratorAccess" # Otherwise, this will take a long time
  - "service-role*"
  - "aws-service-role*"
# Don't evaluate these roles, users, or groups as part of the evaluation
roles:
  - "service-role*"
  - "aws-service-role*"
users:
  - ""
groups:
  - ""
# Read-only actions to include in the results, such as s3:GetObject
# By default, it includes Actions that could lead to Data Exfiltration
include-actions:
  - "s3:GetObject"
  - "ssm:GetParameter"
  - "ssm:GetParameters"
  - "ssm:GetParametersByPath"
  - "secretsmanager:GetSecretValue"
# Write actions to include from the results, such as kms:Decrypt
exclude-actions:
  - ""
  • 进行您想要的任何添加或修改。
    • 在 policies 下,列出您想要排除的策略名称的路径。
    • 如果要排除名为 MyRole 的角色,请在 roles 列表中列出 MyRole 或 MyR*。
    • 您可以对 users 和 groups 列表采用相同的方法。

现在当您运行 scan 命令时,您可以使用排除文件,如下所示:```bash cloudsplaining scan --exclusions-file exclusions.yml --input-file examples/files/example.json --output examples/files/

root@kitploit:~
### 扫描多个 AWS 账户

如果你的 IAM 用户或 IAM 角色拥有 `sts:AssumeRole` 权限,可以访问多个 AWS 账户中的公共 IAM 角色,你可以使用 `scan-multi-account` 命令。

此图展示了该过程的工作原理:

![使用 Cloudsplaining 扫描多个 AWS 账户的示意图](https://assets.kitploit.com/production/public/readmes/3625/a58d8b2e6a0986fdd6adf5c583f34c8efe82a084ad41b8fa00d1e1ef29a0e4fe.png)

> 注意:如果你是跨账户访问的新手,请查看 [官方 AWS 教程:使用 IAM 角色跨 AWS 账户委派访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html)。这可以帮助你搭建上述架构。

* 首先,你需要创建多账户配置文件。运行以下命令:```bash
cloudsplaining create-multi-account-config-file \ 
    -o multi-account-config.yml
  • 这会生成一个名为 multi-account-config.yml 的文件,其内容如下:```yaml accounts: default_account: 123456789012 prod: 123456789013 test: 123456789014
root@kitploit:~
> 注意:请注意上方文件的格式包含 `account_name: accountID`。编辑文件内容以设置您所需的账户名称和账户ID。您可以包含任意多个账户ID。

下一步,假设:
* 在目标账户中有一个名为 `CommonSecurityRole` 的角色。
* 您的IAM用户的凭证位于名为 `scanning-user` 的AWS凭证配置文件中。
* 该用户具有 `sts:AssumeRole` 权限,可以承担之前创建的YAML文件中指定的所有目标账户中的 `CommonSecurityRole`。
* 您希望将输出保存到名为 `my-results-bucket` 的S3存储桶中。

基于以上信息,您可以运行以下命令:```bash
cloudsplaining scan-multi-account \
    -c multi-account-config.yml \
    --profile scanning-user \
    --role-name CommonSecurityRole \ 
    --output-bucket my-results-bucket

请注意,如果在没有 --profile 标志的情况下运行上述命令,它将按照标准的 AWS 凭证优先级顺序 执行(即环境变量、凭证配置文件、ECS 容器凭证,最后是 EC2 实例配置文件凭证)。

自定义指导与附录

Cloudsplaining 支持自定义 HTML 报告的指导与附录部分,以包含组织特定的安全建议和文档。

工作原理

将 HTML 文件放在项目根目录中:

  • custom-guidance.html - 自定义安全指导内容
  • custom-appendices.html - 自定义附录内容

行为

  • 文件不存在:显示默认 AWS 安全建议
  • 文件存在且有内容:显示您的自定义 HTML 内容
  • 文件存在但为空:完全隐藏标签页
  • 混合配置:每个标签页独立工作

使用示例```bash

Create custom guidance

echo '

Company Security Guidelines

Follow these organization-specific steps:

  • Review with security team
  • Document in JIRA ticket
  • Get approval before remediation
' > custom-guidance.html

Create custom appendices

echo '

Internal Resources

Additional company resources:

  • Security Portal
  • IAM Best Practices
' > custom-appendices.html ``` # 使用自定义内容生成报告 cloudsplaining scan --input-file account-data.json --output reports/

速查表```bash

Download authorization details

cloudsplaining download

Download from a specific AWS profile

cloudsplaining download --profile someprofile

Scan Authorization details

cloudsplaining scan --input-file default.json

Scan Authorization details with custom exclusions

cloudsplaining scan --input-file default.json --exclusions-file exclusions.yml

Scan Policy Files

cloudsplaining scan-policy-file --input-file examples/policies/wildcards.json cloudsplaining scan-policy-file --input-file examples/policies/wildcards.json --exclusions-file examples/example-exclusions.yml

Scan Multiple Accounts

Generate the multi account config file

cloudsplaining create-multi-account-config-file -o accounts.yml cloudsplaining scan-multi-account -c accounts.yml -r TargetRole --output-directory ./

root@kitploit:~
## 常见问题

**默认情况下它会扫描所有策略吗?**

不会,它只会扫描附加到IAM主体的策略。

**下载命令会下载所有策略版本吗?**

默认情况下不会。如果你想这样做,请指定 `--include-non-default-policy-versions` 标志。注意,`scan` 工具目前不操作非默认版本。

**我按照安装说明操作了,但完全无法通过命令行执行程序。该怎么办?**

这很可能是你的PATH问题。你的PATH环境变量没有考虑由 `pip3` 安装的二进制包。在Mac上,根据你安装的版本,输入以下命令可能可以修复此问题。结果可能因人而异。```bash
export PATH=$HOME/Library/Python/3.7/bin/:$PATH

我按照安装说明操作,但收到一个 ModuleNotFoundError 提示 No module named policy_sentry.analysis.expand。该怎么办?

请尝试升级到最新版本的 Cloudsplaining。该错误已在 0.0.10 版本中修复。

参考资料

  • Policy Sentry — 作者 Kinnaird McQuade(Salesforce)
  • Parliament — 作者 Scott Piper(Summit Route 与 Duo Labs)
  • AWS Privilege Escalation Methods — 作者 Spencer Gietzen(Rhino Security Labs)
  • Understanding Access Level Summaries within Policy Summaries
  • Leveraging next-generation blockchain-based AI across multiple service meshes to transparently automate multi-cloud IAM wizardry 🧙‍♂️
下载工具