mirror of
https://github.com/kubescape/kubescape.git
synced 2026-04-15 06:58:11 +00:00
248 lines
4.8 KiB
Markdown
248 lines
4.8 KiB
Markdown
# Kubescape Core Package
|
|
|
|
The `core` package provides the main Kubescape scanning engine as a Go library, allowing you to integrate Kubescape security scanning directly into your applications.
|
|
|
|
## Table of Contents
|
|
|
|
- [Installation](#installation)
|
|
- [Quick Start](#quick-start)
|
|
- [API Reference](#api-reference)
|
|
- [Examples](#examples)
|
|
- [Configuration Options](#configuration-options)
|
|
|
|
---
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
go get github.com/kubescape/kubescape/v3/core
|
|
```
|
|
|
|
---
|
|
|
|
## Quick Start
|
|
|
|
```go
|
|
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log"
|
|
|
|
"github.com/kubescape/kubescape/v3/core"
|
|
"github.com/kubescape/kubescape/v3/core/cautils"
|
|
)
|
|
|
|
func main() {
|
|
ctx := context.Background()
|
|
|
|
// Initialize Kubescape
|
|
ks := core.NewKubescape(ctx)
|
|
|
|
// Configure scan
|
|
scanInfo := &cautils.ScanInfo{
|
|
// Scan the current cluster
|
|
ScanAll: true,
|
|
}
|
|
|
|
// Run scan
|
|
results, err := ks.Scan(scanInfo)
|
|
if err != nil {
|
|
log.Fatalf("Scan failed: %v", err)
|
|
}
|
|
|
|
// Convert results to JSON
|
|
jsonRes, err := results.ToJson()
|
|
if err != nil {
|
|
log.Fatalf("Failed to convert results: %v", err)
|
|
}
|
|
|
|
fmt.Println(string(jsonRes))
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## API Reference
|
|
|
|
### Creating a Kubescape Instance
|
|
|
|
```go
|
|
// Create with context
|
|
ks := core.NewKubescape(ctx)
|
|
```
|
|
|
|
### Scanning
|
|
|
|
```go
|
|
// Scan with configuration
|
|
results, err := ks.Scan(scanInfo)
|
|
```
|
|
|
|
### Listing Frameworks and Controls
|
|
|
|
```go
|
|
// List available policies
|
|
err := ks.List(listPolicies)
|
|
```
|
|
|
|
### Downloading Artifacts
|
|
|
|
```go
|
|
// Download for offline use
|
|
err := ks.Download(downloadInfo)
|
|
```
|
|
|
|
### Image Scanning
|
|
|
|
```go
|
|
// Scan container image
|
|
exceedsSeverity, err := ks.ScanImage(imgScanInfo, scanInfo)
|
|
```
|
|
|
|
### Fixing Misconfigurations
|
|
|
|
```go
|
|
// Apply fixes to manifests
|
|
err := ks.Fix(fixInfo)
|
|
```
|
|
|
|
---
|
|
|
|
## Examples
|
|
|
|
### Scan a Specific Framework
|
|
|
|
```go
|
|
scanInfo := &cautils.ScanInfo{}
|
|
scanInfo.SetPolicyIdentifiers([]string{"nsa"}, "framework")
|
|
|
|
results, err := ks.Scan(scanInfo)
|
|
```
|
|
|
|
### Scan Specific Namespaces
|
|
|
|
```go
|
|
scanInfo := &cautils.ScanInfo{
|
|
IncludeNamespaces: "production,staging",
|
|
}
|
|
|
|
results, err := ks.Scan(scanInfo)
|
|
```
|
|
|
|
### Scan Local YAML Files
|
|
|
|
```go
|
|
scanInfo := &cautils.ScanInfo{
|
|
InputPatterns: []string{"/path/to/manifests"},
|
|
}
|
|
scanInfo.SetScanType(cautils.ScanTypeRepo)
|
|
|
|
results, err := ks.Scan(scanInfo)
|
|
```
|
|
|
|
### Export Results to Different Formats
|
|
|
|
```go
|
|
results, _ := ks.Scan(scanInfo)
|
|
|
|
// JSON
|
|
jsonData, _ := results.ToJson()
|
|
|
|
// Get summary
|
|
summary := results.GetData().Report.SummaryDetails
|
|
fmt.Printf("Compliance Score: %.2f%%\n", summary.ComplianceScore)
|
|
```
|
|
|
|
### Scan with Compliance Threshold
|
|
|
|
```go
|
|
scanInfo := &cautils.ScanInfo{
|
|
ComplianceThreshold: 80.0, // Fail if below 80%
|
|
}
|
|
|
|
results, err := ks.Scan(scanInfo)
|
|
if err != nil {
|
|
// Handle scan failure
|
|
}
|
|
|
|
// Check if threshold was exceeded
|
|
if results.GetData().Report.SummaryDetails.ComplianceScore < scanInfo.ComplianceThreshold {
|
|
log.Fatal("Compliance score below threshold")
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Configuration Options
|
|
|
|
### ScanInfo Fields
|
|
|
|
| Field | Type | Description |
|
|
|-------|------|-------------|
|
|
| `AccountID` | string | Kubescape SaaS account ID |
|
|
| `AccessKey` | string | Kubescape SaaS access key |
|
|
| `InputPatterns` | []string | Paths to scan (files, directories, URLs) |
|
|
| `ExcludedNamespaces` | string | Comma-separated namespaces to exclude |
|
|
| `IncludeNamespaces` | string | Comma-separated namespaces to include |
|
|
| `Format` | string | Output format (json, junit, sarif, etc.) |
|
|
| `Output` | string | Output file path |
|
|
| `VerboseMode` | bool | Show all resources in output |
|
|
| `FailThreshold` | float32 | Fail threshold percentage |
|
|
| `ComplianceThreshold` | float32 | Compliance threshold percentage |
|
|
| `UseExceptions` | string | Path to exceptions file |
|
|
| `UseArtifactsFrom` | string | Path to offline artifacts |
|
|
| `Submit` | bool | Submit results to SaaS |
|
|
| `Local` | bool | Keep results local (don't submit) |
|
|
|
|
---
|
|
|
|
## Error Handling
|
|
|
|
```go
|
|
results, err := ks.Scan(scanInfo)
|
|
if err != nil {
|
|
switch {
|
|
case errors.Is(err, context.DeadlineExceeded):
|
|
log.Fatal("Scan timed out")
|
|
case errors.Is(err, context.Canceled):
|
|
log.Fatal("Scan was canceled")
|
|
default:
|
|
log.Fatalf("Scan error: %v", err)
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Thread Safety
|
|
|
|
The Kubescape instance is safe for concurrent use. You can run multiple scans in parallel:
|
|
|
|
```go
|
|
var wg sync.WaitGroup
|
|
|
|
for _, ns := range namespaces {
|
|
wg.Add(1)
|
|
go func(namespace string) {
|
|
defer wg.Done()
|
|
|
|
scanInfo := &cautils.ScanInfo{
|
|
IncludeNamespaces: namespace,
|
|
}
|
|
results, _ := ks.Scan(scanInfo)
|
|
// Process results...
|
|
}(ns)
|
|
}
|
|
|
|
wg.Wait()
|
|
```
|
|
|
|
---
|
|
|
|
## Related Documentation
|
|
|
|
- [CLI Reference](../docs/cli-reference.md)
|
|
- [Getting Started Guide](../docs/getting-started.md)
|
|
- [Architecture](../docs/architecture.md) |