Aller au contenu principal

Intégration Kubernetes

ggscout prend en charge l'intégration avec des clusters Kubernetes pour collecter des secrets et recueillir des informations sur diverses ressources Kubernetes. Cette intégration offre une visibilité complète sur les données sensibles et la configuration des ressources de vos clusters.

Fonctionnalités prises en charge

  • Plusieurs types de ressources : Secrets, ConfigMaps, Deployments, Service Accounts et External Secrets
  • Collecte de données complète : collecte à la fois les secrets et les informations générales des ressources
  • Filtrage par namespace : ciblez des namespaces spécifiques avec des motifs glob
  • Plusieurs méthodes d'authentification : fichier KubeConfig ou authentification in-cluster
  • Prise en charge multi-cluster : surveillez plusieurs clusters Kubernetes simultanément
  • Filtrage des ressources : contrôle fin sur les 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 d'API Kubernetes suivantes :

Type de ressourceDescription
SecretsRessources Secret natives de Kubernetes
ConfigMapsDonnées de configuration stockées dans le cluster
DeploymentsConfigurations de déploiement d'application
Service AccountsConfigurations de service account Kubernetes
External SecretsRessources de l'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 via 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 de motifs de namespaces à scannerNon
envIdentifiant d'environnementNon
ownerPropriétaire de cette source (un e-mail, généralement d'un employé ou d'une équipe)Non
modeMode d'intégration (seul "read" est pris en charge pour Kubernetes)Non"read"

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

Mise en place de l'authentification

Étapes de mise en place de l'authentification

  1. Configurer un ClusterRole

La manière la plus simple de mettre en place 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 role que nous utilisons pour voir la liste des règles requises

Voir aussi cet exemple complet values.yaml.

Filtrage par namespace

Utilisez des motifs glob pour contrôler quels namespaces 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 via des filtres include/exclude :

[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"

Résolution de problèmes

Problèmes courants

Échecs d'authentification

  • Vérifiez le chemin et les permissions du fichier kubeconfig
  • Vérifiez les permissions RBAC pour l'utilisateur/service account 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 de filtrage par namespace
  • Vérifiez les règles de filtrage des ressources

Problèmes de performance

  • Réduisez la portée avec un 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