mirror of
https://github.com/kubescape/kubescape.git
synced 2026-04-15 06:58:11 +00:00
340 lines
7.6 KiB
Markdown
340 lines
7.6 KiB
Markdown
# Kubescape HTTP Handler
|
|
|
|
The HTTP Handler provides a REST API for running Kubescape scans programmatically. This enables integration with CI/CD pipelines, custom dashboards, and automation workflows.
|
|
|
|
## Table of Contents
|
|
|
|
- [Overview](#overview)
|
|
- [API Reference](#api-reference)
|
|
- [Trigger Scan](#trigger-scan)
|
|
- [Get Results](#get-results)
|
|
- [Check Status](#check-status)
|
|
- [Delete Results](#delete-results)
|
|
- [Request/Response Objects](#requestresponse-objects)
|
|
- [API Examples](#api-examples)
|
|
- [Environment Variables](#environment-variables)
|
|
- [Deployment Examples](#deployment-examples)
|
|
- [Debugging](#debugging)
|
|
|
|
---
|
|
|
|
## Overview
|
|
|
|
When running Kubescape as a service, it starts a web server on port `8080` that exposes REST APIs for:
|
|
|
|
- Triggering security scans (async or sync)
|
|
- Retrieving scan results
|
|
- Checking scan status
|
|
- Managing cached results
|
|
|
|
---
|
|
|
|
## API Reference
|
|
|
|
### Trigger Scan
|
|
|
|
**Endpoint:** `POST /v1/scan`
|
|
|
|
Triggers a Kubescape scan. By default, scans run asynchronously and return a scan ID immediately.
|
|
|
|
**Query Parameters:**
|
|
|
|
| Parameter | Type | Default | Description |
|
|
|-----------|------|---------|-------------|
|
|
| `wait` | bool | `false` | Wait for scan to complete (synchronous mode) |
|
|
| `keep` | bool | `false` | Keep results in cache after returning |
|
|
|
|
**Request Body:** See [Trigger Scan Object](#trigger-scan-object)
|
|
|
|
**Response (async):**
|
|
|
|
```json
|
|
{
|
|
"id": "scan-12345",
|
|
"type": "busy",
|
|
"response": "scanning in progress"
|
|
}
|
|
```
|
|
|
|
**Response (sync with `wait=true`):** Same as [Get Results](#get-results) response.
|
|
|
|
---
|
|
|
|
### Get Results
|
|
|
|
**Endpoint:** `GET /v1/results`
|
|
|
|
Retrieve scan results.
|
|
|
|
**Query Parameters:**
|
|
|
|
| Parameter | Type | Default | Description |
|
|
|-----------|------|---------|-------------|
|
|
| `id` | string | - | Scan ID. If empty, returns latest results |
|
|
| `keep` | bool | `false` | Keep results in cache after returning |
|
|
|
|
**Response (success):**
|
|
|
|
```json
|
|
{
|
|
"id": "scan-12345",
|
|
"type": "v1results",
|
|
"response": { /* scan results object */ }
|
|
}
|
|
```
|
|
|
|
**Response (error):**
|
|
|
|
```json
|
|
{
|
|
"id": "scan-12345",
|
|
"type": "error",
|
|
"response": "error message"
|
|
}
|
|
```
|
|
|
|
**Response (in progress):**
|
|
|
|
```json
|
|
{
|
|
"id": "scan-12345",
|
|
"type": "busy",
|
|
"response": "scanning in progress"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### Check Status
|
|
|
|
**Endpoint:** `GET /v1/status`
|
|
|
|
Check if a scan is still in progress. Useful for polling without retrieving full results.
|
|
|
|
**Query Parameters:**
|
|
|
|
| Parameter | Type | Default | Description |
|
|
|-----------|------|---------|-------------|
|
|
| `id` | string | - | Scan ID. If empty, checks if any scan is in progress |
|
|
|
|
**Response (in progress):**
|
|
|
|
```json
|
|
{
|
|
"id": "scan-12345",
|
|
"type": "busy",
|
|
"response": "scanning in progress"
|
|
}
|
|
```
|
|
|
|
**Response (complete):**
|
|
|
|
```json
|
|
{
|
|
"id": "scan-12345",
|
|
"type": "notBusy",
|
|
"response": "scanning completed"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### Delete Results
|
|
|
|
**Endpoint:** `DELETE /v1/results`
|
|
|
|
Delete cached scan results.
|
|
|
|
**Query Parameters:**
|
|
|
|
| Parameter | Type | Default | Description |
|
|
|-----------|------|---------|-------------|
|
|
| `id` | string | - | Scan ID to delete. If empty, deletes latest |
|
|
| `all` | bool | `false` | Delete all cached results |
|
|
|
|
---
|
|
|
|
## Request/Response Objects
|
|
|
|
### Trigger Scan Object
|
|
|
|
```json
|
|
{
|
|
"format": "json",
|
|
"excludedNamespaces": ["kube-system", "kube-public"],
|
|
"includeNamespaces": ["production", "staging"],
|
|
"useCachedArtifacts": false,
|
|
"keepLocal": true,
|
|
"account": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
|
|
"accessKey": "your-access-key",
|
|
"targetType": "framework",
|
|
"targetNames": ["nsa", "mitre"]
|
|
}
|
|
```
|
|
|
|
| Field | Type | Description |
|
|
|-------|------|-------------|
|
|
| `format` | string | Output format (default: `json`) |
|
|
| `excludedNamespaces` | []string | Namespaces to exclude from scan |
|
|
| `includeNamespaces` | []string | Namespaces to include in scan |
|
|
| `useCachedArtifacts` | bool | Use cached artifacts (offline mode) |
|
|
| `keepLocal` | bool | Don't submit results to backend |
|
|
| `account` | string | Kubescape SaaS account ID |
|
|
| `accessKey` | string | Kubescape SaaS access key |
|
|
| `targetType` | string | `"framework"` or `"control"` |
|
|
| `targetNames` | []string | Frameworks/controls to scan |
|
|
|
|
### Response Object
|
|
|
|
```json
|
|
{
|
|
"id": "scan-12345",
|
|
"type": "v1results",
|
|
"response": { /* payload */ }
|
|
}
|
|
```
|
|
|
|
| Field | Type | Description |
|
|
|-------|------|-------------|
|
|
| `id` | string | Scan identifier |
|
|
| `type` | string | Response type (see below) |
|
|
| `response` | any | Response payload |
|
|
|
|
**Response Types:**
|
|
|
|
| Type | Description |
|
|
|------|-------------|
|
|
| `v1results` | Scan results object |
|
|
| `busy` | Scan in progress |
|
|
| `notBusy` | No scan in progress |
|
|
| `ready` | Scan complete, results ready |
|
|
| `error` | Error occurred |
|
|
|
|
---
|
|
|
|
## API Examples
|
|
|
|
### Basic Scan (Async)
|
|
|
|
```bash
|
|
# 1. Trigger scan
|
|
curl -X POST http://127.0.0.1:8080/v1/scan \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"targetType": "framework", "targetNames": ["nsa"]}'
|
|
|
|
# 2. Check status
|
|
curl http://127.0.0.1:8080/v1/status
|
|
|
|
# 3. Get results
|
|
curl http://127.0.0.1:8080/v1/results -o results.json
|
|
```
|
|
|
|
### Synchronous Scan
|
|
|
|
```bash
|
|
curl -X POST "http://127.0.0.1:8080/v1/scan?wait=true" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"targetType": "framework", "targetNames": ["nsa"]}' \
|
|
-o results.json
|
|
```
|
|
|
|
### Scan Specific Namespaces
|
|
|
|
```bash
|
|
curl -X POST http://127.0.0.1:8080/v1/scan \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"includeNamespaces": ["production"],
|
|
"targetType": "framework",
|
|
"targetNames": ["nsa", "mitre"]
|
|
}'
|
|
```
|
|
|
|
### Scan with Account Integration
|
|
|
|
```bash
|
|
curl -X POST http://127.0.0.1:8080/v1/scan \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"account": "YOUR-ACCOUNT-ID",
|
|
"accessKey": "YOUR-ACCESS-KEY",
|
|
"targetType": "framework",
|
|
"targetNames": ["nsa"]
|
|
}'
|
|
```
|
|
|
|
### Delete All Cached Results
|
|
|
|
```bash
|
|
curl -X DELETE "http://127.0.0.1:8080/v1/results?all=true"
|
|
```
|
|
|
|
---
|
|
|
|
## Environment Variables
|
|
|
|
Configure the HTTP handler using environment variables:
|
|
|
|
| Variable | Description | Example |
|
|
|----------|-------------|---------|
|
|
| `KS_ACCOUNT` | Default account ID | `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` |
|
|
| `KS_EXCLUDE_NAMESPACES` | Default namespaces to exclude | `kube-system,kube-public` |
|
|
| `KS_INCLUDE_NAMESPACES` | Default namespaces to include | `production,staging` |
|
|
| `KS_FORMAT` | Default output format | `json` |
|
|
| `KS_LOGGER_NAME` | Logger name | `kubescape` |
|
|
| `KS_LOGGER_LEVEL` | Log level | `info`, `debug`, `warning`, `error` |
|
|
| `KS_DOWNLOAD_ARTIFACTS` | Download artifacts on each scan | `true`, `false` |
|
|
|
|
---
|
|
|
|
## Deployment Examples
|
|
|
|
### Microservice Deployment
|
|
|
|
Deploy Kubescape as a microservice in your cluster for API-driven scanning.
|
|
|
|
📖 **[Microservice Deployment Guide →](examples/microservice/README.md)**
|
|
|
|
### Prometheus Integration
|
|
|
|
Expose Kubescape metrics for Prometheus scraping.
|
|
|
|
📖 **[Prometheus Integration Guide →](examples/prometheus/README.md)**
|
|
|
|
---
|
|
|
|
## Debugging
|
|
|
|
### Enable Debug Logging
|
|
|
|
Set the log level to debug for more verbose output:
|
|
|
|
```bash
|
|
export KS_LOGGER_LEVEL=debug
|
|
```
|
|
|
|
### Performance Profiling
|
|
|
|
The HTTP handler exposes pprof endpoints for performance analysis:
|
|
|
|
```bash
|
|
# Heap profile
|
|
go tool pprof http://localhost:6060/debug/pprof/heap
|
|
|
|
# CPU profile
|
|
go tool pprof http://localhost:6060/debug/pprof/profile?seconds=30
|
|
|
|
# Goroutine profile
|
|
go tool pprof http://localhost:6060/debug/pprof/goroutine
|
|
```
|
|
|
|
For more information on pprof, see the [pprof documentation](https://pkg.go.dev/net/http/pprof).
|
|
|
|
---
|
|
|
|
## Related Documentation
|
|
|
|
- [CLI Reference](../docs/cli-reference.md)
|
|
- [Architecture](../docs/architecture.md)
|
|
- [Getting Started Guide](../docs/getting-started.md)
|
|
- [Troubleshooting](../docs/troubleshooting.md) |