Aller au contenu principal

Intégration Kubernetes

ggscout prend en charge l'intégration avec les clusters Kubernetes afin de collecter des secrets et de rassembler des informations sur diverses ressources Kubernetes. Cette intégration offre une visibilité complète à la fois sur les données sensibles et sur les configurations des ressources au sein de vos clusters.

Fonctionnalités prises en charge​

  • Types de ressources multiples : Secrets, ConfigMaps, Deployments, Service Accounts et External Secrets
  • Collecte de données complète : collecte à la fois des secrets et des informations générales sur les ressources
  • Filtrage par namespace : ciblez des namespaces spécifiques à l'aide de motifs glob
  • Méthodes d'authentification multiples : fichier KubeConfig ou authentification in-cluster
  • Prise en charge multi-cluster : surveillez plusieurs clusters Kubernetes simultanément
  • Filtrage des ressources : contrôle précis des ressources à scanner
info

L'intégration Kubernetes est en lecture seule et ne prend pas en charge l'écriture de secrets vers le cluster.

Types de ressources pris en charge​

ggscout peut scanner les ressources de l'API Kubernetes suivantes :

Type de ressourceDescription
SecretsRessources Secret natives de Kubernetes
ConfigMapsDonnées de configuration stockées dans le cluster
DeploymentsConfigurations de déploiement des applications
Service AccountsConfigurations des comptes de service Kubernetes
External SecretsRessources External Secrets Operator

Configuration​

Pour configurer ggscout afin qu'il fonctionne avec Kubernetes, ajoutez la configuration suivante à votre fichier ggscout.toml :

Authentification par fichier KubeConfig​

Pour un accès externe aux clusters Kubernetes à l'aide d'un fichier kubeconfig :

[sources.k8s-production]
type = "kubernetes"
config_source = "kubeconfigfile"
kubeconfig_path = "/path/to/kubeconfig" # Optional, defaults to ~/.kube/config
contexts = ["production-cluster", "staging-cluster"] # Optional, all contexts if not specified
namespaces = ["default", "production-*", "app-*"] # Optional, all namespaces if not specified
env = "production"
owner = "devops-team@example.com"

Authentification in-cluster​

Pour ggscout s'exécutant à l'intérieur d'un cluster Kubernetes :

[sources.k8s-cluster]
type = "kubernetes"
config_source = "incluster"
name = "production-cluster" # Cluster name (required for in-cluster mode)
namespaces = ["default", "production-*"] # Optional namespace filtering
env = "production"
owner = "devops-team@example.com"

Paramètres de configuration​

ParamètreDescriptionRequisValeur par défaut
typeDoit être défini sur "kubernetes"Oui
config_sourceMéthode d'authentification : "kubeconfigfile" ou "incluster"Oui
namespacesListe des motifs de namespaces à scannerNon
envEnvironnement par défaut des secrets de cette source. GitGuardian déduit un environnement par secret et utilise cette valeur par défaut à défautNon
ownerPropriétaire de cette source (un e-mail, généralement celui d'un employé ou d'une équipe)Non
modeMode d'intégration (seul "read" est pris en charge pour Kubernetes)Non"read"

GitGuardian déduit l'environnement de chaque Secret à partir de ses labels tels que env ou environment, et utilise sinon le env au niveau de la source. Le namespace n'est pas lu, car il désigne plus souvent une équipe ou une application qu'un environnement.

Paramètres du fichier KubeConfig​

ParamètreDescriptionRequisValeur par défaut
kubeconfig_pathChemin vers le fichier kubeconfigNon~/.kube/config
contextsListe des contextes à utiliser depuis kubeconfigNon

Paramètres in-cluster​

ParamètreDescriptionRequisValeur par défaut
nameNom du cluster KubernetesOui

Configuration de l'authentification​

Étapes de configuration de l'authentification​

  1. Configurer un ClusterRole

La manière la plus simple de configurer votre intégration kubernetes est d'utiliser nos Helm charts ggscout. Vous n'avez alors qu'à configurer ceci dans votre values.yaml :

clusterRole:
create: true

Si vous n'utilisez pas nos Helm charts, consultez le rôle que nous utilisons pour voir la liste des règles requises

Consultez également cet exemple complet de values.yaml.

Filtrage par namespace​

Utilisez des motifs glob pour contrôler les namespaces que ggscout scanne :

# Scan specific namespaces
namespaces = ["production", "staging", "development"]

# Use wildcards (only at the end) to match patterns
namespaces = ["app-*", "service-*"]

# Combine exact matches and patterns
namespaces = ["default", "kube-system", "production-*"]

Filtrage des ressources​

Contrôlez quelles ressources spécifiques sont scannées à l'aide de filtres d'inclusion/exclusion :

[sources.k8s-filtered]
type = "kubernetes"
config_source = "incluster"
name = "production-cluster"

# Include filters - only scan these resources
[[sources.k8s-filtered.include]]
resource_ids = ["secret:*", "configmap:*"]

# Exclude filters - skip these resources
[[sources.k8s-filtered.exclude]]
resource_ids = ["secret:kube-system/*"]

Configuration multi-cluster​

Surveillez plusieurs clusters Kubernetes en définissant plusieurs sources :

[sources.k8s-production]
type = "kubernetes"
config_source = "kubeconfigfile"
contexts = ["production"]
env = "production"
owner = "devops-team@example.com"

[sources.k8s-staging]
type = "kubernetes"
config_source = "kubeconfigfile"
contexts = ["staging"]
env = "staging"
owner = "devops-team@example.com"

[sources.k8s-development]
type = "kubernetes"
config_source = "incluster"
name = "dev-cluster"
env = "development"
owner = "devops-team@example.com"

Dépannage​

Problèmes courants​

Échecs d'authentification

  • Vérifiez le chemin et les permissions du fichier kubeconfig
  • Vérifiez les permissions RBAC pour l'utilisateur/compte de service configuré
  • Assurez-vous de la connectivité au cluster

Ressources manquantes

  • Confirmez que les permissions RBAC incluent tous les types de ressources requis
  • Vérifiez la configuration du filtrage par namespace
  • Vérifiez les règles de filtrage des ressources

Problèmes de performance

  • Réduisez le périmètre avec le filtrage par namespace
  • Utilisez le filtrage des ressources pour limiter les types de ressources scannés
  • Tenez compte de la taille du cluster et des limites de débit de l'API