
Nettoyer les comptes ayant des permissions excessives dans l'infrastructure GCP à grande échelle.
CureIAM est un moteur facile à utiliser, fiable et performant pour l'application du principe du moindre privilège sur l'infrastructure cloud GCP. Il permet aux équipes DevOps et Sécurité de nettoyer rapidement les comptes sur l'infrastructure GCP qui ont obtenu des permissions plus élevées que nécessaires. CureIAM récupère les recommandations et les informations de GCP IAM Recommender, les évalue et applique automatiquement ces recommandations quotidiennement. Il gère la planification et tous les autres aspects de l'exécution de ces tâches d'application à grande échelle. Il est construit sur les API GCP IAM Recommender et le framework Cloudmarker.
Découvrez ce qui rend CureIAM scalable et de qualité production.
safe_to_apply_score, risk_score, over_privilege_score. Chaque score a un objectif différent. Par exemple, safe_to_apply_score identifie la capacité à appliquer la recommandation de manière automatisée, en fonction du seuil défini dans le fichier de configuration CureIAM.yaml.Puisque CureIAM est construit avec Python, vous pouvez l'exécuter localement avec ces commandes. Avant d'exécuter, assurez-vous d'avoir un fichier de configuration prêt dans l'un des chemins suivants : /etc/CureIAM.yaml, ~/.CureIAM.yaml, ~/CureIAM.yaml, ou CureIAM.yaml, et qu'un fichier JSON de compte de service est présent dans le répertoire courant, de préférence nommé cureiamSA.json. Cette clé privée du compte de service peut être nommée autrement, mais pour la construction de l'image Docker, il est préférable d'utiliser ce nom. Veillez à référencer ce fichier dans la configuration pour le cloud GCP.
# Install necessary dependencies
$ pip install -r requirements.txt
# Run CureIAM now
$ python -m CureIAM -n
# Run CureIAM process as schedular
$ python -m CureIAM
# Check CureIAM help
$ python -m CureIAM --help
CureIAM peut également être exécuté dans un environnement Docker, ce qui est complètement optionnel et peut être utilisé pour l'intégration/déploiement continu avec un déploiement de cluster K8s.
# Build docker image from dockerfile
$ docker build -t cureiam .
# Run the image, as schedular
$ docker run -d cureiam
# Run the image now
$ docker run -f cureiam -m cureiam -n
Le fichier de configuration CureIAM.yaml est le cœur du moteur CureIAM. Tout ce que le moteur fait est basé sur le pipeline configuré dans ce fichier. Décomposons-le en différentes sections pour simplifier la configuration.
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"
Cette sous-section de configuration utilise le module de journalisation Rich et planifie l'exécution quotidienne de CureIAM à 16:00.
plugins dans CureIAM.yaml. Vous pouvez considérer cette section comme une déclaration des différents 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:
# Change http to https later if your elastic are using https
scheme: http
host: es-host.com
port: 9200
index: cureiam-stg
username: security
password: securepassword
Chacune de ces déclarations de plugin doit être de cette forme :
plugins:
<plugin-name>:
plugin: <class-name-as-python-path>
params:
param1: val1
param2: val2
Par exemple, pour le plugin CureIAM.stores.esstore.EsStore qui est ce fichier et la classe EsStore. Tous les paramètres définis dans le yaml doivent correspondre à la déclaration dans la fonction __init__() de la même classe de plugin.
audits:
IAMAudit:
clouds:
- gcpCloud
processors:
- gcpIamProcessor
stores:
- filestore
- esstore
Plusieurs audits peuvent être créés à partir de cela. Celui créé ici est nommé IAMAudit et utilise trois plugins : gcpCloud, gcpIamProcessor, filestores et esstore. Notez qu'il s'agit des mêmes noms de plugins définis à l'étape 2. Encore une fois, cela revient à définir le pipeline, pas à l'exécuter réellement. Il sera pris en compte pour l'exécution selon la définition de l'étape suivante.
CureIAM d'exécuter les Audits définis à l'étape précédente. run:
- IAMAudits
Et cela constitue la configuration complète pour CureIAM. Vous trouverez un exemple complet ici. Ce concept de pipeline piloté par la configuration est hérité du framework Cloudmarker.
Le JSON indexé dans Elasticsearch via le plugin de stockage Elasticsearch peut être utilisé pour générer un tableau de bord dans Kibana.
[S'il vous plaît !] Nous recherchons tout type de contribution pour améliorer les fonctionnalités principales et la documentation de CureIAM. En cas de doute, faites une PR !
Équipe de sécurité produit Gojek ❤️
<>
=============
Ajout de la version dans la bibliothèque pour éviter tout problème de rétrocompatibilité.
Running docker compose: docker-compose -f docker_compose_es.yaml up
mode_scan: true
mode_enforce: false