CureIAM 是一款易于使用、可靠且高性能的引擎,用于在 GCP 云基础设施上实施最小权限原则。它使 DevOps 和安全团队能够快速清理 GCP 基础设施中权限超出实际需求的账户。CureIAM 从 GCP IAM 推荐器获取建议和洞察,对其进行评分,并每天自动执行这些建议。它负责调度以及大规模运行这些执行任务的所有其他方面。它基于 GCP IAM 推荐器 API 和 Cloudmarker 框架构建。
了解是什么让 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 云。
# 安装必要的依赖
$ pip install -r requirements.txt
# 立即运行 CureIAM
$ python -m CureIAM -n
# 以调度器模式运行 CureIAM 进程
$ python -m CureIAM
# 查看 CureIAM 帮助
$ python -m CureIAM --help
CureIAM 也可以运行在 Docker 环境中,这是完全可选的,可用于与 K8s 集群部署的 CI/CD。
# 从 Dockerfile 构建 Docker 镜像
$ docker build -t cureiam .
# 以调度器模式运行镜像
$ docker run -d cureiam
# 立即运行镜像
$ docker run -f cureiam -m cureiam -n
CureIAM.yaml 配置文件是 CureIAM 引擎的核心。引擎所做的所有事情都基于此配置文件中配置的流水线。让我们将其分解为不同部分,使配置看起来更简单。
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 运行。
CureIAM.yaml 中的 plugins 部分。您可以将其视为不同插件的声明。 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
每个插件声明必须采用以下形式:
plugins:
<plugin-name>:
plugin: <class-name-as-python-path>
params:
param1: val1
param2: val2
例如,对于插件 CureIAM.stores.esstore.EsStore(对应此文件和类 EsStore),yaml 中定义的所有参数必须与同一插件类的 __init__() 函数中的声明匹配。
audits:
IAMAudit:
clouds:
- gcpCloud
processors:
- gcpIamProcessor
stores:
- filestore
- esstore
可以基于此创建多个审计。这里创建的审计名为 IAMAudit,使用了三个插件:gcpCloud、gcpIamProcessor、filestores 和 esstore。注意,这些就是步骤 2 中定义的相同插件名称。再次强调,这就像定义流水线,而不是实际运行。它将在下一步的定义中被考虑运行。
CureIAM 运行上一步定义的审计。 run:
- IAMAudits
这样就完成了 CureIAM 的完整配置,您可以在此处找到完整示例。此配置驱动流水线的概念继承自 Cloudmarker 框架。
通过 Elasticsearch 存储插件索引到 Elasticsearch 的 JSON 可用于在 Kibana 中生成仪表盘。
[请务必!] 我们欢迎任何形式的贡献,以改进 CureIAM 的核心功能和文档。如有疑问,请直接提交 PR!
Gojek 产品安全团队 ❤️
<<待定>>
=============
添加库版本以避免任何向后兼容性问题。
运行 docker compose:docker-compose -f docker_compose_es.yaml up
mode_scan: true
mode_enforce: false