Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

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

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

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

工具目录

分类

查看所有分类
Loading categories
CureIAM — 大规模清理GCP基础设施中的权限过高的账户 | Kitploit
工具/GitHubGitHub/gojek/cureiam
云基础设施安全配置审计云安全DevSecOps身份与访问管理 (IAM)
GitHubgojek/cureiam

CureIAM

大规模清理GCP基础设施中的权限过高的账户

查看仓库
7263年前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CureIAM

自动化清理 GCP 基础设施中权限过大的 IAM 账户

CureIAM 是一款易于使用、可靠且高性能的引擎,用于在 GCP 云基础设施上实施最小权限原则。它使 DevOps 和安全团队能够快速清理 GCP 基础设施中权限超出实际需求的账户。CureIAM 从 GCP IAM 推荐器获取建议和洞察,对其进行评分,并每天自动执行这些建议。它负责调度以及大规模运行这些执行任务的所有其他方面。它基于 GCP IAM 推荐器 API 和 Cloudmarker 框架构建。

主要特性

了解是什么让 CureIAM 具备可扩展性和生产级能力。

  • 配置驱动:CureIAM 的整个工作流程均由配置驱动。请跳转至“配置”部分了解更多信息。
  • 可扩展性:由于采用插件驱动、多进程和多线程的方法,它被设计为可扩展的。
  • 处理调度:调度部分内置于 CureIAM 代码本身,配置时间后,CureIAM 将在每天该时间点运行。
  • 插件驱动:CureIAM 代码库完全面向插件,这意味着可以即插即用现有插件,或创建新插件以添加更多功能。
  • 跟踪可操作洞察:CureIAM 执行的每个操作都会被记录以供审计,它可以记录在文件存储和 Elasticsearch 存储中。如果需要,您可以构建其他存储插件以将这些数据推送到其他存储位置进行跟踪。
  • 评分与执行:CureIAM 获取的每条建议都会根据多个参数进行评分,之后会得到如 safe_to_apply_score(安全应用分数)、risk_score(风险分数)、over_privilege_score(过度权限分数)等分数。每个分数都有不同的用途。其中,safe_to_apply_score 根据 CureIAM.yaml 配置文件中设置的阈值,确定自动化应用建议的能力。

使用方法

由于 CureIAM 使用 Python 构建,您可以通过以下命令在本地运行。运行前,请确保在 /etc/CureIAM.yaml、~/.CureIAM.yaml、~/CureIAM.yaml 或 CureIAM.yaml 中有一个配置文件,并且当前目录中有一个服务账号 JSON 文件,建议命名为 cureiamSA.json。此服务账号私钥可以任意命名,但对于 Docker 镜像构建,建议使用此名称。请确保在配置中引用此文件以用于 GCP 云。

root@kitploit:~
# 安装必要的依赖
$ pip install -r requirements.txt

# 立即运行 CureIAM
$ python -m CureIAM -n

# 以调度器模式运行 CureIAM 进程
$ python -m CureIAM

# 查看 CureIAM 帮助
$ python -m CureIAM --help

CureIAM 也可以运行在 Docker 环境中,这是完全可选的,可用于与 K8s 集群部署的 CI/CD。

root@kitploit:~
# 从 Dockerfile 构建 Docker 镜像
$ docker build -t cureiam . 

# 以调度器模式运行镜像
$ docker run -d cureiam 

# 立即运行镜像
$ docker run -f cureiam -m cureiam -n 

配置

CureIAM.yaml 配置文件是 CureIAM 引擎的核心。引擎所做的所有事情都基于此配置文件中配置的流水线。让我们将其分解为不同部分,使配置看起来更简单。

  1. 首先配置第一个部分,即日志记录配置和调度器配置。
root@kitploit:~
  logger:
    version: 1

    disable_existing_loggers: false

    formatters:
      verysimple:
        format: >-
            [%(process)s]
            %(name)s:%(lineno)d - %(message)s
        datefmt: "%Y-%m-%d %H:%M:%S"

    handlers:
      rich_console:
        class: rich.logging.RichHandler
        formatter: verysimple

      file:
        class: logging.handlers.TimedRotatingFileHandler
        formatter: simple
        filename: /tmp/CureIAM.log
        when: midnight
        encoding: utf8
        backupCount: 5

    loggers:
      adal-python:
        level: INFO

    root:
      level: INFO
      handlers:
        - rich_console
        - file

  schedule: "16:00"

此配置子部分使用了 Rich 日志记录模块,并将 CureIAM 调度为每天 16:00 运行。

  1. 接下来配置不同的模块,这些模块我们可能会在流水线中使用。这属于 CureIAM.yaml 中的 plugins 部分。您可以将其视为不同插件的声明。
root@kitploit:~
  plugins:
    gcpCloud:
      plugin: CureIAM.plugins.gcp.gcpcloud.GCPCloudIAMRecommendations
      params:
        key_file_path: cureiamSA.json

    filestore:
      plugin: CureIAM.plugins.files.filestore.FileStore

    gcpIamProcessor:
      plugin: CureIAM.plugins.gcp.gcpcloudiam.GCPIAMRecommendationProcessor
      params:
        mode_scan: true
        mode_enforce: true
        enforcer:
          key_file_path: cureiamSA.json
          allowlist_projects:
            - alpha
          blocklist_projects:
            - beta
          blocklist_accounts:
            - [email protected]
          allowlist_account_types:
            - user
            - group
            - serviceAccount
          blocklist_account_types:
            - None
          min_safe_to_apply_score_user: 0
          min_safe_to_apply_score_group: 0
          min_safe_to_apply_score_SA: 50

    esstore:
      plugin: CureIAM.plugins.elastic.esstore.EsStore
      params:
        # 如果 elastic 使用 https,请将 http 改为 https
        scheme: http
        host: es-host.com
        port: 9200
        index: cureiam-stg
        username: security
        password: securepassword

每个插件声明必须采用以下形式:

root@kitploit:~
  plugins:
    <plugin-name>:
      plugin: <class-name-as-python-path>
      params:
        param1: val1
        param2: val2

例如,对于插件 CureIAM.stores.esstore.EsStore(对应此文件和类 EsStore),yaml 中定义的所有参数必须与同一插件类的 __init__() 函数中的声明匹配。

  1. 定义好插件后,下一步是定义审计的流水线。如下所示:
root@kitploit:~
  audits:
    IAMAudit:
      clouds:
        - gcpCloud
      processors:
        - gcpIamProcessor
      stores:
        - filestore
        - esstore

可以基于此创建多个审计。这里创建的审计名为 IAMAudit,使用了三个插件:gcpCloud、gcpIamProcessor、filestores 和 esstore。注意,这些就是步骤 2 中定义的相同插件名称。再次强调,这就像定义流水线,而不是实际运行。它将在下一步的定义中被考虑运行。

  1. 告诉 CureIAM 运行上一步定义的审计。
root@kitploit:~
  run:
    - IAMAudits

这样就完成了 CureIAM 的完整配置,您可以在此处找到完整示例。此配置驱动流水线的概念继承自 Cloudmarker 框架。

仪表盘

通过 Elasticsearch 存储插件索引到 Elasticsearch 的 JSON 可用于在 Kibana 中生成仪表盘。

贡献

[请务必!] 我们欢迎任何形式的贡献,以改进 CureIAM 的核心功能和文档。如有疑问,请直接提交 PR!

致谢

Gojek 产品安全团队 ❤️

演示

<<待定>>

=============

2023年5月 0.2.0 新版更新

重构

  • 将大代码拆分为多个小函数
  • 将所有插件移至 plugins 文件夹:Esstore、files、Cloud 和 GCP。
  • 修复除零问题
  • 迁移到 Elastic 新主要版本
  • 更改 CureIAM.yaml 配置文件中的配置
  • 在 Python 3.9.X 版本中测试

库更新

添加库版本以避免任何向后兼容性问题。

  • Elastic==8.7.0 # 之前为 7.17.9
  • elasticsearch==8.7.0
  • google-api-python-client==2.86.0
  • PyYAML==6.0
  • schedule==1.2.0
  • rich==13.3.5

Docker 文件

  • 在 elastic 中添加用于本地 Elastic 和 Kibana 的 Docker Compose
  • 添加 .env-ex 在运行 docker 之前将 .env-ex 重命名为 .env
root@kitploit:~
运行 docker compose:docker-compose -f docker_compose_es.yaml up 

功能

  • 添加在不应用建议的情况下运行扫描的功能。默认情况下,如果 mode_scan 为 false,则 mode_enforce 不会运行。
root@kitploit:~
      mode_scan: true
      mode_enforce: false
  • 暂时关闭邮件功能。
下载工具