Documentation
¶
Overview ¶
Package validation provides image validation and security scanning for ARC
Index ¶
- func CalculateRiskScore(scanResult *ScanResult) float64
- func DefaultSecurityPolicies() map[string]Policy
- func GenerateImageHash(image string) string
- func HasCriticalVulnerabilities(scanResult *ScanResult) bool
- func IsAllowedRegistry(registry string, allowedList []string) bool
- func SanitizeImageReference(image string) string
- func ValidateImageAge(createdAt time.Time, maxAge time.Duration) error
- func ValidateImageForEnvironment(ctx context.Context, image, environment string) error
- type ClairScanner
- type ComplianceCheck
- type CompositeVerifier
- type CosignVerifier
- type DefaultImageValidator
- func (v *DefaultImageValidator) CheckPolicy(ctx context.Context, image string, policy Policy) error
- func (v *DefaultImageValidator) ClearCache()
- func (v *DefaultImageValidator) ScanImage(ctx context.Context, image string) (*ScanResult, error)
- func (v *DefaultImageValidator) SetSignatureVerifier(verifier SignatureVerifier)
- func (v *DefaultImageValidator) SetVulnerabilityScanner(scanner VulnerabilityScanner)
- func (v *DefaultImageValidator) ValidateImage(ctx context.Context, image string) error
- type GrypeScanner
- type ImageInfo
- type ImageValidator
- type Layer
- type NotaryVerifier
- type OrchestratorIntegration
- func (o *OrchestratorIntegration) AddPolicy(name string, policy Policy)
- func (o *OrchestratorIntegration) GetPolicy(name string) (Policy, bool)
- func (o *OrchestratorIntegration) RemovePolicy(name string)
- func (o *OrchestratorIntegration) ScanAndValidateImage(ctx context.Context, image string) (*SecurityReport, error)
- func (o *OrchestratorIntegration) ValidateAgentImage(ctx context.Context, agent *types.Agent) error
- func (o *OrchestratorIntegration) ValidateWorkflowImages(ctx context.Context, workflow *types.Workflow) error
- type Policy
- type ScanResult
- type SecurityReport
- type Severity
- type SignatureVerifier
- type TrivyMetadata
- type TrivyOS
- type TrivyOutput
- type TrivyResult
- type TrivyScanner
- type TrivyVulnerability
- type ValidationConfig
- type Vulnerability
- type VulnerabilityScanner
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func CalculateRiskScore ¶
func CalculateRiskScore(scanResult *ScanResult) float64
CalculateRiskScore calculates a risk score for scan results
func DefaultSecurityPolicies ¶
DefaultSecurityPolicies returns a set of default security policies
func GenerateImageHash ¶
GenerateImageHash generates a hash for an image reference
func HasCriticalVulnerabilities ¶
func HasCriticalVulnerabilities(scanResult *ScanResult) bool
HasCriticalVulnerabilities checks if scan result has critical vulnerabilities
func IsAllowedRegistry ¶
IsAllowedRegistry checks if a registry is in the allowed list
func SanitizeImageReference ¶
SanitizeImageReference removes potentially dangerous characters from image reference
func ValidateImageAge ¶
ValidateImageAge checks if an image is within acceptable age limits
Types ¶
type ClairScanner ¶
type ClairScanner struct {
// contains filtered or unexported fields
}
ClairScanner implements VulnerabilityScanner using Clair API
func NewClairScanner ¶
func NewClairScanner(endpoint, apiKey string) *ClairScanner
NewClairScanner creates a new Clair-based vulnerability scanner
func (*ClairScanner) Scan ¶
func (c *ClairScanner) Scan(ctx context.Context, image string) (*ScanResult, error)
Scan performs a vulnerability scan using Clair API
type ComplianceCheck ¶
type ComplianceCheck struct {
ID string `json:"id"`
Name string `json:"name"`
Description string `json:"description"`
Status string `json:"status"` // "pass", "fail", "skip"
Severity Severity `json:"severity"`
Details string `json:"details,omitempty"`
}
ComplianceCheck represents a compliance validation
type CompositeVerifier ¶
type CompositeVerifier struct {
// contains filtered or unexported fields
}
CompositeSigner implements SignatureVerifier with multiple verifiers
func NewCompositeVerifier ¶
func NewCompositeVerifier(verifiers ...SignatureVerifier) *CompositeVerifier
NewCompositeVerifier creates a verifier that tries multiple verification methods
func (*CompositeVerifier) VerifySignature ¶
func (c *CompositeVerifier) VerifySignature(ctx context.Context, image string, trustAnchors []string) error
VerifySignature tries to verify signature with any of the configured verifiers
type CosignVerifier ¶
type CosignVerifier struct {
// contains filtered or unexported fields
}
CosignVerifier implements SignatureVerifier using Cosign
func NewCosignVerifier ¶
func NewCosignVerifier(binaryPath string) *CosignVerifier
NewCosignVerifier creates a new Cosign-based signature verifier
func (*CosignVerifier) VerifySignature ¶
func (c *CosignVerifier) VerifySignature(ctx context.Context, image string, trustAnchors []string) error
VerifySignature verifies an image signature using Cosign
type DefaultImageValidator ¶
type DefaultImageValidator struct {
// contains filtered or unexported fields
}
DefaultImageValidator provides production-ready image validation
func CreateValidatorWithDefaults ¶
func CreateValidatorWithDefaults() (*DefaultImageValidator, error)
CreateValidatorWithDefaults creates a validator with sensible defaults for production
func NewDefaultImageValidator ¶
func NewDefaultImageValidator(config *ValidationConfig) *DefaultImageValidator
NewDefaultImageValidator creates a new image validator with default config
func (*DefaultImageValidator) CheckPolicy ¶
CheckPolicy validates an image against a specific policy
func (*DefaultImageValidator) ClearCache ¶
func (v *DefaultImageValidator) ClearCache()
ClearCache clears the scan result cache
func (*DefaultImageValidator) ScanImage ¶
func (v *DefaultImageValidator) ScanImage(ctx context.Context, image string) (*ScanResult, error)
ScanImage performs security scanning on an image
func (*DefaultImageValidator) SetSignatureVerifier ¶
func (v *DefaultImageValidator) SetSignatureVerifier(verifier SignatureVerifier)
SetSignatureVerifier sets the signature verifier
func (*DefaultImageValidator) SetVulnerabilityScanner ¶
func (v *DefaultImageValidator) SetVulnerabilityScanner(scanner VulnerabilityScanner)
SetVulnerabilityScanner sets the vulnerability scanner
func (*DefaultImageValidator) ValidateImage ¶
func (v *DefaultImageValidator) ValidateImage(ctx context.Context, image string) error
ValidateImage performs comprehensive validation on an image reference
type GrypeScanner ¶
type GrypeScanner struct {
// contains filtered or unexported fields
}
GrypeScanner implements VulnerabilityScanner using Grype
func NewGrypeScanner ¶
func NewGrypeScanner(binaryPath string) *GrypeScanner
NewGrypeScanner creates a new Grype-based vulnerability scanner
func (*GrypeScanner) Scan ¶
func (g *GrypeScanner) Scan(ctx context.Context, image string) (*ScanResult, error)
Scan performs a vulnerability scan using Grype
type ImageInfo ¶
type ImageInfo struct {
Registry string `json:"registry"`
Namespace string `json:"namespace"`
Repository string `json:"repository"`
Tag string `json:"tag"`
Digest string `json:"digest"`
FullReference string `json:"full_reference"`
IsOfficial bool `json:"is_official"`
HasDigest bool `json:"has_digest"`
HasTag bool `json:"has_tag"`
}
ImageInfo contains parsed image reference details
func ParseImageReference ¶
ParseImageReference parses a container image reference
type ImageValidator ¶
type ImageValidator interface {
// ValidateImage performs comprehensive validation on an image reference
ValidateImage(ctx context.Context, image string) error
// ScanImage performs security scanning on an image
ScanImage(ctx context.Context, image string) (*ScanResult, error)
// CheckPolicy validates an image against a specific policy
CheckPolicy(ctx context.Context, image string, policy Policy) error
}
ImageValidator defines the interface for image validation
type Layer ¶
type Layer struct {
Digest string `json:"digest"`
Size int64 `json:"size"`
MediaType string `json:"media_type"`
CreatedBy string `json:"created_by,omitempty"`
}
Layer represents a container image layer
type NotaryVerifier ¶
type NotaryVerifier struct {
// contains filtered or unexported fields
}
NotaryVerifier implements SignatureVerifier using Notary
func NewNotaryVerifier ¶
func NewNotaryVerifier(serverURL string) *NotaryVerifier
NewNotaryVerifier creates a new Notary-based signature verifier
func (*NotaryVerifier) VerifySignature ¶
func (n *NotaryVerifier) VerifySignature(ctx context.Context, image string, trustAnchors []string) error
VerifySignature verifies an image signature using Notary
type OrchestratorIntegration ¶
type OrchestratorIntegration struct {
// contains filtered or unexported fields
}
OrchestratorIntegration provides integration between the validator and orchestrator
func NewOrchestratorIntegration ¶
func NewOrchestratorIntegration(validator ImageValidator, logger *log.Logger) *OrchestratorIntegration
NewOrchestratorIntegration creates a new orchestrator integration
func (*OrchestratorIntegration) AddPolicy ¶
func (o *OrchestratorIntegration) AddPolicy(name string, policy Policy)
AddPolicy adds a policy for validation
func (*OrchestratorIntegration) GetPolicy ¶
func (o *OrchestratorIntegration) GetPolicy(name string) (Policy, bool)
GetPolicy retrieves a policy by name
func (*OrchestratorIntegration) RemovePolicy ¶
func (o *OrchestratorIntegration) RemovePolicy(name string)
RemovePolicy removes a policy
func (*OrchestratorIntegration) ScanAndValidateImage ¶
func (o *OrchestratorIntegration) ScanAndValidateImage(ctx context.Context, image string) (*SecurityReport, error)
ScanAndValidateImage performs security scanning and validation
func (*OrchestratorIntegration) ValidateAgentImage ¶
ValidateAgentImage validates an agent's container image before creation
func (*OrchestratorIntegration) ValidateWorkflowImages ¶
func (o *OrchestratorIntegration) ValidateWorkflowImages(ctx context.Context, workflow *types.Workflow) error
ValidateWorkflowImages validates all images in a workflow before execution
type Policy ¶
type Policy struct {
Name string `json:"name"`
Description string `json:"description"`
Enabled bool `json:"enabled"`
// Registry rules
AllowedRegistries []string `json:"allowed_registries,omitempty"`
BlockedRegistries []string `json:"blocked_registries,omitempty"`
// Tag rules
AllowLatestTag bool `json:"allow_latest_tag"`
RequireDigest bool `json:"require_digest"`
TagPatternWhitelist []string `json:"tag_pattern_whitelist,omitempty"`
TagPatternBlacklist []string `json:"tag_pattern_blacklist,omitempty"`
// Security thresholds
MaxCriticalCVEs int `json:"max_critical_cves"`
MaxHighCVEs int `json:"max_high_cves"`
MaxMediumCVEs int `json:"max_medium_cves"`
MaxLowCVEs int `json:"max_low_cves"`
// Image requirements
MaxImageAge time.Duration `json:"max_image_age,omitempty"`
RequireSignature bool `json:"require_signature"`
RequiredLabels map[string]string `json:"required_labels,omitempty"`
// Enforcement
EnforcementMode string `json:"enforcement_mode"` // "block", "warn", "audit"
Exceptions []string `json:"exceptions,omitempty"` // Image patterns to exempt
}
Policy defines validation rules for images
type ScanResult ¶
type ScanResult struct {
ImageReference string `json:"image_reference"`
ImageID string `json:"image_id"`
ImageDigest string `json:"image_digest"`
ScanTimestamp time.Time `json:"scan_timestamp"`
Scanner string `json:"scanner"`
ScannerVersion string `json:"scanner_version"`
// Vulnerability summary
CriticalCount int `json:"critical_count"`
HighCount int `json:"high_count"`
MediumCount int `json:"medium_count"`
LowCount int `json:"low_count"`
UnknownCount int `json:"unknown_count"`
TotalCount int `json:"total_count"`
// Detailed findings
Vulnerabilities []Vulnerability `json:"vulnerabilities"`
// Image metadata
OS string `json:"os"`
Architecture string `json:"architecture"`
CreatedAt time.Time `json:"created_at"`
Size int64 `json:"size"`
Layers []Layer `json:"layers"`
// Compliance
ComplianceStatus string `json:"compliance_status"` // "pass", "fail", "warn"
ComplianceChecks []ComplianceCheck `json:"compliance_checks"`
// Additional metadata
Metadata map[string]interface{} `json:"metadata,omitempty"`
}
ScanResult contains vulnerability scan findings
type SecurityReport ¶
type SecurityReport struct {
Image string `json:"image"`
Timestamp time.Time `json:"timestamp"`
Status string `json:"status"` // "approved", "warning", "rejected", "failed"
RiskScore float64 `json:"risk_score"`
ScanResult *ScanResult `json:"scan_result,omitempty"`
ValidationErrors []string `json:"validation_errors,omitempty"`
ScanErrors []string `json:"scan_errors,omitempty"`
Recommendation string `json:"recommendation"`
PolicyViolations []string `json:"policy_violations,omitempty"`
}
SecurityReport contains the complete security assessment of an image
type SignatureVerifier ¶
type SignatureVerifier interface {
VerifySignature(ctx context.Context, image string, trustAnchors []string) error
}
SignatureVerifier interface for image signature verification
type TrivyMetadata ¶
type TrivyMetadata struct {
OS TrivyOS `json:"OS"`
ImageID string `json:"ImageID"`
DiffIDs []string `json:"DiffIDs"`
RepoTags []string `json:"RepoTags"`
RepoDigests []string `json:"RepoDigests"`
ImageConfig interface{} `json:"ImageConfig"`
}
TrivyMetadata contains image metadata from Trivy
type TrivyOS ¶
type TrivyOS struct {
Family string `json:"Family"`
Name string `json:"Name"`
Version string `json:"Version"`
}
TrivyOS contains OS information
type TrivyOutput ¶
type TrivyOutput struct {
SchemaVersion int `json:"SchemaVersion"`
ArtifactName string `json:"ArtifactName"`
ArtifactType string `json:"ArtifactType"`
Metadata TrivyMetadata `json:"Metadata"`
Results []TrivyResult `json:"Results"`
}
TrivyOutput represents Trivy JSON output structure
type TrivyResult ¶
type TrivyResult struct {
Target string `json:"Target"`
Class string `json:"Class"`
Type string `json:"Type"`
Vulnerabilities []TrivyVulnerability `json:"Vulnerabilities"`
}
TrivyResult contains scan results for a target
type TrivyScanner ¶
type TrivyScanner struct {
// contains filtered or unexported fields
}
TrivyScanner implements VulnerabilityScanner using Trivy
func NewTrivyScanner ¶
func NewTrivyScanner(binaryPath string) *TrivyScanner
NewTrivyScanner creates a new Trivy-based vulnerability scanner
func (*TrivyScanner) Scan ¶
func (t *TrivyScanner) Scan(ctx context.Context, image string) (*ScanResult, error)
Scan performs a vulnerability scan using Trivy
type TrivyVulnerability ¶
type TrivyVulnerability struct {
VulnerabilityID string `json:"VulnerabilityID"`
PkgName string `json:"PkgName"`
InstalledVersion string `json:"InstalledVersion"`
FixedVersion string `json:"FixedVersion"`
Title string `json:"Title"`
Description string `json:"Description"`
Severity string `json:"Severity"`
CVSS map[string]interface{} `json:"CVSS"`
References []string `json:"References"`
PublishedDate *time.Time `json:"PublishedDate"`
LastModifiedDate *time.Time `json:"LastModifiedDate"`
}
TrivyVulnerability represents a vulnerability found by Trivy
type ValidationConfig ¶
type ValidationConfig struct {
// Registry validation
AllowedRegistries []string // Allowed registries (empty = all allowed)
BlockedRegistries []string // Blocked registries
RequireHTTPS bool // Require HTTPS for registry connections
// Tag validation
AllowLatestTag bool // Allow "latest" tag
AllowedTagPatterns []string // Regex patterns for allowed tags
BlockedTagPatterns []string // Regex patterns for blocked tags
RequireDigest bool // Require digest in image reference
// Security scanning
EnableScanning bool // Enable vulnerability scanning
MaxCriticalCVEs int // Max critical vulnerabilities (-1 = unlimited, 0 = none allowed)
MaxHighCVEs int // Max high vulnerabilities (-1 = unlimited, 0 = none allowed)
MaxMediumCVEs int // Max medium vulnerabilities (-1 = unlimited, 0 = none allowed)
MaxLowCVEs int // Max low vulnerabilities (-1 = unlimited, 0 = none allowed)
ScanCacheDuration time.Duration // How long to cache scan results
// Image age validation
MaxImageAge time.Duration // Max age for images (0 = no limit)
RequireRecentBuild bool // Require images built within MaxImageAge
// Signature verification
RequireSignature bool // Require signed images
TrustAnchors []string // Public keys or certificates for verification
SignatureType string // "cosign", "notary", etc.
// Performance
ConcurrentScans int // Max concurrent vulnerability scans
ScanTimeout time.Duration // Timeout for individual scans
// Logging
LogLevel string // "debug", "info", "warn", "error"
AuditLog bool // Enable audit logging
}
ValidationConfig configures the image validator
func DefaultValidationConfig ¶
func DefaultValidationConfig() *ValidationConfig
DefaultValidationConfig returns a production-ready default configuration
type Vulnerability ¶
type Vulnerability struct {
ID string `json:"id"`
Title string `json:"title"`
Description string `json:"description"`
Severity Severity `json:"severity"`
CVSS float64 `json:"cvss"`
CVSSVector string `json:"cvss_vector"`
CWE []string `json:"cwe,omitempty"`
// Affected components
Package string `json:"package"`
Version string `json:"version"`
FixedVersion string `json:"fixed_version,omitempty"`
// References
References []string `json:"references"`
PublishedDate time.Time `json:"published_date"`
LastModified time.Time `json:"last_modified"`
// Exploitation
Exploitable bool `json:"exploitable"`
ExploitAvailable bool `json:"exploit_available"`
ExploitMaturity string `json:"exploit_maturity,omitempty"`
}
Vulnerability represents a security vulnerability
func GetVulnerabilitiesBySeverity ¶
func GetVulnerabilitiesBySeverity(scanResult *ScanResult, severity Severity) []Vulnerability
GetVulnerabilitiesBySeverity returns vulnerabilities filtered by severity
type VulnerabilityScanner ¶
type VulnerabilityScanner interface {
Scan(ctx context.Context, image string) (*ScanResult, error)
}
VulnerabilityScanner interface for vulnerability scanning