Kubescape CLI Reference

July 17, 2026 · View on GitHub

This document provides a complete reference for all Kubescape CLI commands and options.

Global Options

These options are available for all commands:

OptionDescription
--cache-dir <path>Cache directory (default: ~/.kubescape)
--kube-context <context>Kubernetes context to use (default: current-context)
-l, --logger <level>Log level: debug, info, warning, error, fatal
--server <url>Backend discovery server URL
-h, --helpHelp for any command

kubescape scan

Scan Kubernetes clusters, files, or images for security issues.

Synopsis

kubescape scan [target] [flags]

Target Types

  • No target: Scans the current cluster
  • Path: Scans local YAML files, Helm charts, or Kustomize directories
  • URL: Scans a Git repository

Flags

FlagDescriptionDefault
--account <id>Kubescape SaaS account IDfrom cache
--access-key <key>Kubescape SaaS access keyfrom cache
--compliance-threshold <float>Fail if compliance score is below threshold. Applies to scan framework, scan control, and --view resource|control — see score thresholds.0
--controls-config <path>Path to controls configuration file-
-e, --exclude-namespaces <ns>Namespaces to exclude (comma-separated)-
--encryptEncrypt sensitive report metadata using the master key provided through the KUBESCAPE_MASTER_KEY environment variable. Requires --format json for reports that will later be decrypted with kubescape decrypt. If both --encrypt and --hide are specified, --encrypt takes precedence.false
--exceptions <path>Path to exceptions file-
--fail-coverage-below <float>Fail if the scan coverage score is below threshold (0 disables). Applies in every view — see score thresholds.0
-f, --format <format>Output format: pretty-printer, json, junit, sarif, html, pdf, prometheuspretty-printer
--hideReplace sensitive report metadata with deterministic pseudonyms. Ignored when --encrypt is also specified.false
--include-namespaces <ns>Namespaces to include (comma-separated)-
--keep-localDon't report results to backendfalse
--kubeconfig <path>Path to kubeconfig file-
-o, --output <path>Output file pathstdout
--scan-imagesAlso scan container images for vulnerabilitiesfalse
--severity-threshold <sev>Fail if findings at or above severity: low, medium, high, critical-
--submitSubmit results to Kubescape SaaSfalse
--use-artifacts-from <path>Load artifacts from local directory (offline mode)-
--use-from <path>Load specific policy from path-
-v, --verboseDisplay all resources, not just failed onesfalse
--view <type>View type: security, control, resourcesecurity

Examples

# Scan current cluster
kubescape scan

# Scan with specific framework
kubescape scan framework nsa
kubescape scan framework mitre
kubescape scan framework cis-v1.23-t1.0.1

# Scan specific control
kubescape scan control C-0005 -v

# Scan local files
kubescape scan /path/to/manifests/

# Scan Git repository
kubescape scan https://github.com/org/repo

# Anonymize sensitive report metadata
kubescape scan --hide

# Generate an anonymized JSON report
kubescape scan --hide --format json --output report.json

# The key is used as raw bytes and must be exactly 32 characters long.
# Note: `openssl rand -base64 32` (44 chars) and `openssl rand -hex 32` (64 chars)
# are NOT valid — they exceed 32 bytes once passed through as raw text.
export KUBESCAPE_MASTER_KEY=$(LC_ALL=C tr -dc 'A-Za-z0-9' </dev/urandom | head -c 32)

# Generate an encrypted JSON report
kubescape scan --encrypt --format json --output encrypted-report.json

# The key is used as raw bytes and must be exactly 32 characters long.
# Note: `openssl rand -base64 32` (44 chars) and `openssl rand -hex 32` (64 chars)
# are NOT valid — they exceed 32 bytes once passed through as raw text.
export KUBESCAPE_MASTER_KEY=$(LC_ALL=C tr -dc 'A-Za-z0-9' </dev/urandom | head -c 32)

# Decrypt an encrypted report
kubescape decrypt encrypted-report.json > decrypted-report.json

# Output to JSON file
kubescape scan --format json --output results.json

# Set compliance threshold (exit 1 if below). Combine with a framework,
# control, or --view resource|control (see "Score thresholds" below).
kubescape scan framework nsa --compliance-threshold 80
kubescape scan --view resource --compliance-threshold 80

# Exclude namespaces
kubescape scan --exclude-namespaces kube-system,kube-public

Score thresholds

--compliance-threshold (compliance score) and the deprecated --fail-threshold (risk score) apply to the following invocations:

  • kubescape scan framework <name> ...
  • kubescape scan control <id> ...
  • kubescape scan --view resource ... or --view control ...

The default kubescape scan [path] uses --view security, which does not evaluate against a score threshold. To gate a pipeline on the compliance or risk score, use one of the forms above. --severity-threshold and --fail-coverage-below apply in every view.

--fail-coverage-below gates on the scan coverage score, not the raw ratio of evaluated controls. The score starts from the percentage of controls that were evaluated and then subtracts a fixed penalty for each runtime gap: 3 points per silent failed GVR pull (a resource type that failed to collect entirely but whose dependent controls still evaluated via other resource types), 2 points per partial GVR pull, and 5 points per degraded policy input (control configurations or exceptions served from a fallback source). As a result a scan in which 100% of controls were evaluated can still drop below the threshold — for example, a single silent failed GVR pull yields a score of 97.

Behavior change: earlier releases compared only the ratio of evaluated controls. Pipelines that tuned --fail-coverage-below against that narrower meaning may now fail on scans that previously passed. Re-check your threshold if you rely on this flag in CI.


kubescape scan framework

Scan against a specific security framework.

Synopsis

kubescape scan framework <framework-name> [target] [flags]

Available Frameworks

FrameworkDescription
nsaNSA-CISA Kubernetes Hardening Guidance
mitreMITRE ATT&CK® for Kubernetes
cis-v1.23-t1.0.1CIS Kubernetes Benchmark
soc2SOC 2 compliance
pci-dssPCI DSS compliance
hipaaHIPAA compliance

Examples

kubescape scan framework nsa
kubescape scan framework mitre --include-namespaces production
kubescape scan framework cis-v1.23-t1.0.1 /path/to/manifests

kubescape scan control

Scan for a specific control.

Synopsis

kubescape scan control <control-id> [target] [flags]

Examples

# Scan for privileged containers
kubescape scan control C-0057 -v

# Scan specific files for a control
kubescape scan control C-0013 /path/to/deployment.yaml

kubescape scan workload

Scan a specific workload.

Synopsis

kubescape scan workload <kind>/<name> [flags]

Flags

FlagDescription
--namespace <ns>Namespace of the workload

Examples

kubescape scan workload Deployment/nginx --namespace default
kubescape scan workload DaemonSet/fluentd --namespace logging

kubescape scan image

Scan a container image for vulnerabilities.

Synopsis

kubescape scan image <image>:<tag> [flags]

Flags

FlagDescription
--exceptions <path>Path to exceptions file
-p, --password <pass>Registry password
-u, --username <user>Registry username
--use-default-matchersUse default vulnerability matchers

Examples

# Scan public image
kubescape scan image nginx:1.21

# Scan with verbose output
kubescape scan image nginx:1.21 -v

# Scan private registry image
kubescape scan image myregistry.io/myimage:tag -u myuser -p mypass

kubescape fix

Auto-fix misconfigurations in Kubernetes manifest files.

Synopsis

kubescape fix <report-file> [flags]

Flags

FlagDescriptionDefault
--dry-runPreview changes without applyingfalse
--no-confirmApply without confirmationfalse
--skip-user-valuesSkip changes requiring user valuestrue

Examples

# Generate scan results
kubescape scan /path/to/manifests --format json --output results.json

# Apply fixes
kubescape fix results.json

# Preview fixes
kubescape fix results.json --dry-run

# Apply without prompts
kubescape fix results.json --no-confirm

kubescape patch

Patch container images to fix OS-level vulnerabilities.

Synopsis

kubescape patch [flags]

Flags

FlagDescriptionDefault
-i, --image <image>Image to patch (required)-
-t, --tag <tag>Output image tag<image>-patched
-a, --addr <addr>BuildKit daemon addressunix:///run/buildkit/buildkitd.sock
--timeout <duration>Patching timeout5m
--ignore-errorsContinue on errorsfalse
--pushPush the patched image to the source registryfalse
-u, --username <user>Registry username-
-p, --password <pass>Registry password-
-f, --format <format>Output format: pretty-printer, json, sarif-
-o, --output <path>Output filestdout
-v, --verboseVerbose outputfalse

Examples

# Start buildkitd first
sudo buildkitd &

# Patch an image
sudo kubescape patch --image nginx:1.22

# Custom output tag
sudo kubescape patch --image nginx:1.22 --tag nginx:1.22-fixed

# Verbose output
sudo kubescape patch --image nginx:1.22 -v

# Also push the patched image back to the source registry
sudo kubescape patch --image myregistry.example.com/team/app:1.2.3 --push

By default the patched image is only loaded into the local image store. Pass --push if you also want it pushed to the source registry.


Hiding sensitive metadata

Generate a report with anonymized sensitive report metadata.

Synopsis

kubescape scan [target] --hide [flags]

Description

Replaces sensitive report metadata with deterministic pseudonyms.

This reduces incidental exposure but is not a confidentiality guarantee. Values drawn from small or predictable sets (such as common namespace names) may be recovered by comparing candidate hashes.

Use --encrypt when sensitive metadata requires confidentiality.

Examples

# Scan the current cluster and generate an anonymized report
kubescape scan --hide --format json --output report.json

# Scan local manifests and save an anonymized report
kubescape scan /path/to/manifests \
  --hide \
  --format json \
  --output report.json

--hide replaces sensitive values with deterministic pseudonyms derived from an unsalted hash of the original value. Values drawn from a small or guessable set — such as common namespace names — can be recovered by hashing candidate values and matching the result, and identical values produce identical pseudonyms across reports. Use --hide to reduce incidental exposure, not as a confidentiality guarantee. To share a report whose metadata is genuinely protected, use --encrypt and withhold the master key.


Encrypting sensitive metadata

Generate a report with encrypted sensitive report metadata.

Synopsis

kubescape scan [target] --encrypt [flags]

Description

Encrypts sensitive report metadata using the master key supplied through the KUBESCAPE_MASTER_KEY environment variable.

The master key is used as raw bytes and must be exactly 32 characters long.

Use --format json to produce a report that can later be decrypted with kubescape decrypt.

If both --encrypt and --hide are specified, --encrypt takes precedence.

Examples

# The key is used as raw bytes and must be exactly 32 characters long.
# Note: `openssl rand -base64 32` (44 chars) and `openssl rand -hex 32` (64 chars)
# are NOT valid — they exceed 32 bytes once passed through as raw text.
export KUBESCAPE_MASTER_KEY=$(LC_ALL=C tr -dc 'A-Za-z0-9' </dev/urandom | head -c 32)

# Scan the current cluster and generate an encrypted report
kubescape scan \
  --encrypt \
  --format json \
  --output encrypted-report.json

# Scan local manifests and generate an encrypted report
kubescape scan /path/to/manifests \
  --encrypt \
  --format json \
  --output encrypted-report.json

--encrypt requires the KUBESCAPE_MASTER_KEY environment variable. The key must be exactly 32 characters long and the same key must be supplied later when running kubescape decrypt.


kubescape decrypt

Decrypt an encrypted Kubescape report.

Synopsis

kubescape decrypt <report-file>

Description

Decrypts report metadata that was protected with kubescape scan --encrypt.

Only metadata encrypted by kubescape scan --encrypt is restored. Metadata pseudonymized with --hide cannot be recovered by kubescape decrypt.

Flags

FlagDescriptionDefault
-h, --helpHelp for decrypt-

Examples

# The key is used as raw bytes and must be exactly 32 characters long.
# Note: `openssl rand -base64 32` (44 chars) and `openssl rand -hex 32` (64 chars)
# are NOT valid — they exceed 32 bytes once passed through as raw text.
export KUBESCAPE_MASTER_KEY=$(LC_ALL=C tr -dc 'A-Za-z0-9' </dev/urandom | head -c 32)

# Decrypt an encrypted report
kubescape decrypt encrypted-report.json

# Save the decrypted report to a file
kubescape decrypt encrypted-report.json > decrypted-report.json

kubescape decrypt restores metadata encrypted by kubescape scan --encrypt. It does not reverse deterministic pseudonymization produced by --hide.


kubescape list

List available frameworks and controls.

Synopsis

kubescape list <type> [flags]

Types

TypeDescription
frameworksList available security frameworks
controlsList available security controls

Flags

FlagDescriptionDefault
--account <id>Account ID for custom frameworks-
--access-key <key>Access key-
--format <format>Output format: pretty-print, jsonpretty-print

Examples

kubescape list frameworks
kubescape list controls
kubescape list controls --format json

kubescape download

Download artifacts for offline/air-gapped use.

Synopsis

kubescape download <type> [name] [flags]

Types

TypeDescription
artifactsDownload all artifacts (frameworks, controls, config)
frameworkDownload a specific framework
controlDownload a specific control

Flags

FlagDescriptionDefault
-o, --output <path>Output path~/.kubescape
--account <id>Account ID-
--access-key <key>Access key-

Examples

# Download all artifacts
kubescape download artifacts --output /path/to/offline

# Download specific framework
kubescape download framework nsa --output /path/to/nsa.json

# Use downloaded artifacts
kubescape scan --use-artifacts-from /path/to/offline

kubescape config

Manage Kubescape configuration.

Subcommands

SubcommandDescription
viewView current configuration
setSet configuration value
deleteDelete cached configuration

Examples

# View configuration
kubescape config view

# Set account ID
kubescape config set accountID <account-id>

# Set cloud report URL
kubescape config set cloudReportURL https://api.example.com

# Delete configuration
kubescape config delete

kubescape operator

Interact with the in-cluster Kubescape operator.

Synopsis

kubescape operator scan <type> [flags]

Scan Types

TypeDescription
configurationsTrigger configuration scan
vulnerabilitiesTrigger vulnerability scan

Examples

kubescape operator scan configurations
kubescape operator scan vulnerabilities

kubescape vap

Manage Kubernetes Validating Admission Policies.

Subcommands

deploy-library

Deploy the Kubescape CEL admission policy library.

kubescape vap deploy-library | kubectl apply -f -

create-policy-binding

Create a ValidatingAdmissionPolicyBinding.

kubescape vap create-policy-binding [flags]

Flags:

FlagDescriptionRequired
-n, --name <name>Binding nameYes
-p, --policy <id>Policy/control IDYes
--namespace <ns>Namespace selector (repeatable)No
--label <k=v>Label selector (repeatable)No
-a, --action <action>Action: Deny, Audit, WarnNo (default: Deny)
-r, --parameter-reference <name>Parameter referenceNo

Examples

# Deploy policy library
kubescape vap deploy-library | kubectl apply -f -

# Create binding
kubescape vap create-policy-binding \
  --name deny-privileged \
  --policy c-0057 \
  --namespace production \
  --action Deny | kubectl apply -f -

kubescape mcpserver

Start the MCP (Model Context Protocol) server for AI assistant integration.

Synopsis

kubescape mcpserver

Description

Starts an MCP server that exposes Kubescape data to AI assistants. The server communicates via stdio.

Prerequisites

  • Kubescape operator installed in the cluster
  • kubectl configured with cluster access

Examples

# Start MCP server
kubescape mcpserver

Claude Desktop Configuration

{
  "mcpServers": {
    "kubescape": {
      "command": "kubescape",
      "args": ["mcpserver"]
    }
  }
}

kubescape version

Display version information.

Synopsis

kubescape version

kubescape completion

Generate shell completion scripts.

Synopsis

kubescape completion <shell>

Supported Shells

  • bash
  • zsh
  • fish
  • powershell

Examples

# Bash
kubescape completion bash > /etc/bash_completion.d/kubescape

# Zsh
kubescape completion zsh > "${fpath[1]}/_kubescape"

# Fish
kubescape completion fish > ~/.config/fish/completions/kubescape.fish

Environment Variables

Kubescape respects the following environment variables:

VariableDescription
KS_ACCOUNTDefault account ID
KS_CACHE_DIRCache directory path
KS_EXCLUDE_NAMESPACESDefault namespaces to exclude
KS_INCLUDE_NAMESPACESDefault namespaces to include
KS_FORMATDefault output format
KS_LOGGERLog level
KS_LOGGER_NAMELogger name
KUBECONFIGPath to kubeconfig file
KUBESCAPE_MASTER_KEY32-character master key used to encrypt and decrypt report metadata
HTTPS_PROXYHTTPS proxy URL
HTTP_PROXYHTTP proxy URL
NO_PROXYHosts to exclude from proxy

Exit Codes

CodeDescription
0Success
1Failure (threshold exceeded, scan failed, etc.)

See Also