Add missing formating

This commit is contained in:
Ricardo Katz 2023-06-19 00:32:25 +00:00
parent 8e8e44e065
commit 8497484908
40 changed files with 143 additions and 103 deletions

View file

@ -71,4 +71,4 @@ func (a authReqGlobal) GetDocumentation() parser.AnnotationFields {
func (a authReqGlobal) Validate(anns map[string]string) error { func (a authReqGlobal) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, globalAuthAnnotations.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, globalAuthAnnotations.Annotations)
} }

View file

@ -219,4 +219,4 @@ func (a authTLS) GetDocumentation() parser.AnnotationFields {
func (a authTLS) Validate(anns map[string]string) error { func (a authTLS) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, authTLSAnnotations.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, authTLSAnnotations.Annotations)
} }

View file

@ -192,4 +192,4 @@ func (c canary) GetDocumentation() parser.AnnotationFields {
func (a canary) Validate(anns map[string]string) error { func (a canary) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, CanaryAnnotations.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, CanaryAnnotations.Annotations)
} }

View file

@ -68,4 +68,4 @@ func (cbbs clientBodyBufferSize) Parse(ing *networking.Ingress) (interface{}, er
func (a clientBodyBufferSize) Validate(anns map[string]string) error { func (a clientBodyBufferSize) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, clientBodyBufferSizeConfig.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, clientBodyBufferSizeConfig.Annotations)
} }

View file

@ -104,4 +104,4 @@ func (a connection) GetDocumentation() parser.AnnotationFields {
func (a connection) Validate(anns map[string]string) error { func (a connection) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, connectionHeadersAnnotations.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, connectionHeadersAnnotations.Annotations)
} }

View file

@ -263,4 +263,4 @@ func (c cors) GetDocumentation() parser.AnnotationFields {
func (a cors) Validate(anns map[string]string) error { func (a cors) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, corsAnnotation.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, corsAnnotation.Annotations)
} }

View file

@ -79,4 +79,4 @@ func (db backend) GetDocumentation() parser.AnnotationFields {
func (a backend) Validate(anns map[string]string) error { func (a backend) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, defaultBackendAnnotations.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, defaultBackendAnnotations.Annotations)
} }

View file

@ -164,4 +164,4 @@ func (a fastcgi) GetDocumentation() parser.AnnotationFields {
func (a fastcgi) Validate(anns map[string]string) error { func (a fastcgi) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, fastCGIAnnotations.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, fastCGIAnnotations.Annotations)
} }

View file

@ -177,4 +177,4 @@ func (a globalratelimit) GetDocumentation() parser.AnnotationFields {
func (a globalratelimit) Validate(anns map[string]string) error { func (a globalratelimit) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, globalRateLimitAnnotationConfig.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, globalRateLimitAnnotationConfig.Annotations)
} }

View file

@ -65,4 +65,4 @@ func (h2pp http2PushPreload) GetDocumentation() parser.AnnotationFields {
func (a http2PushPreload) Validate(anns map[string]string) error { func (a http2PushPreload) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, http2PushPreloadAnnotations.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, http2PushPreloadAnnotations.Annotations)
} }

View file

@ -130,4 +130,4 @@ func (a ipallowlist) GetDocumentation() parser.AnnotationFields {
func (a ipallowlist) Validate(anns map[string]string) error { func (a ipallowlist) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, allowlistAnnotations.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, allowlistAnnotations.Annotations)
} }

View file

@ -127,4 +127,4 @@ func (a ipdenylist) GetDocumentation() parser.AnnotationFields {
func (a ipdenylist) Validate(anns map[string]string) error { func (a ipdenylist) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, denylistAnnotations.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, denylistAnnotations.Annotations)
} }

View file

@ -71,4 +71,4 @@ func (a loadbalancing) GetDocumentation() parser.AnnotationFields {
func (a loadbalancing) Validate(anns map[string]string) error { func (a loadbalancing) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, loadBalanceAnnotations.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, loadBalanceAnnotations.Annotations)
} }

View file

@ -104,4 +104,4 @@ func (l log) GetDocumentation() parser.AnnotationFields {
func (a log) Validate(anns map[string]string) error { func (a log) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, logAnnotations.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, logAnnotations.Annotations)
} }

View file

@ -165,4 +165,4 @@ func (a mirror) GetDocumentation() parser.AnnotationFields {
func (a mirror) Validate(anns map[string]string) error { func (a mirror) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, mirrorAnnotation.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, mirrorAnnotation.Annotations)
} }

View file

@ -157,4 +157,4 @@ func (a modSecurity) GetDocumentation() parser.AnnotationFields {
func (a modSecurity) Validate(anns map[string]string) error { func (a modSecurity) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, modsecurityAnnotation.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, modsecurityAnnotation.Annotations)
} }

View file

@ -153,4 +153,4 @@ func (c opentelemetry) GetDocumentation() parser.AnnotationFields {
func (a opentelemetry) Validate(anns map[string]string) error { func (a opentelemetry) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, otelAnnotations.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, otelAnnotations.Annotations)
} }

View file

@ -110,4 +110,4 @@ func (s opentracing) GetDocumentation() parser.AnnotationFields {
func (a opentracing) Validate(anns map[string]string) error { func (a opentracing) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, opentracingAnnotations.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, opentracingAnnotations.Annotations)
} }

View file

@ -70,4 +70,4 @@ func (a portInRedirect) GetDocumentation() parser.AnnotationFields {
func (a portInRedirect) Validate(anns map[string]string) error { func (a portInRedirect) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, portsInRedirectAnnotations.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, portsInRedirectAnnotations.Annotations)
} }

View file

@ -361,4 +361,4 @@ func (a proxy) GetDocumentation() parser.AnnotationFields {
func (a proxy) Validate(anns map[string]string) error { func (a proxy) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, proxyAnnotations.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, proxyAnnotations.Annotations)
} }

View file

@ -263,4 +263,4 @@ func (p proxySSL) GetDocumentation() parser.AnnotationFields {
func (a proxySSL) Validate(anns map[string]string) error { func (a proxySSL) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, proxySSLAnnotation.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, proxySSLAnnotation.Annotations)
} }

View file

@ -298,4 +298,4 @@ func (a ratelimit) GetDocumentation() parser.AnnotationFields {
func (a ratelimit) Validate(anns map[string]string) error { func (a ratelimit) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, rateLimitAnnotations.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, rateLimitAnnotations.Annotations)
} }

View file

@ -181,4 +181,4 @@ func (a redirect) GetDocumentation() parser.AnnotationFields {
func (a redirect) Validate(anns map[string]string) error { func (a redirect) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, redirectAnnotations.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, redirectAnnotations.Annotations)
} }

View file

@ -212,4 +212,4 @@ func (a rewrite) GetDocumentation() parser.AnnotationFields {
func (a rewrite) Validate(anns map[string]string) error { func (a rewrite) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, rewriteAnnotations.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, rewriteAnnotations.Annotations)
} }

View file

@ -72,4 +72,4 @@ func (s satisfy) GetDocumentation() parser.AnnotationFields {
func (a satisfy) Validate(anns map[string]string) error { func (a satisfy) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, satisfyAnnotations.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, satisfyAnnotations.Annotations)
} }

View file

@ -66,4 +66,4 @@ func (a serverSnippet) GetDocumentation() parser.AnnotationFields {
func (a serverSnippet) Validate(anns map[string]string) error { func (a serverSnippet) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, serverSnippetAnnotations.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, serverSnippetAnnotations.Annotations)
} }

View file

@ -72,4 +72,4 @@ func (s serviceUpstream) GetDocumentation() parser.AnnotationFields {
func (a serviceUpstream) Validate(anns map[string]string) error { func (a serviceUpstream) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, serviceUpstreamAnnotations.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, serviceUpstreamAnnotations.Annotations)
} }

View file

@ -301,4 +301,4 @@ func (a affinity) GetDocumentation() parser.AnnotationFields {
func (a affinity) Validate(anns map[string]string) error { func (a affinity) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, sessionAffinityAnnotations.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, sessionAffinityAnnotations.Annotations)
} }

View file

@ -66,4 +66,4 @@ func (a snippet) GetDocumentation() parser.AnnotationFields {
func (a snippet) Validate(anns map[string]string) error { func (a snippet) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, configurationSnippetAnnotations.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, configurationSnippetAnnotations.Annotations)
} }

View file

@ -107,4 +107,4 @@ func (sc sslCipher) GetDocumentation() parser.AnnotationFields {
func (a sslCipher) Validate(anns map[string]string) error { func (a sslCipher) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, sslCipherAnnotations.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, sslCipherAnnotations.Annotations)
} }

View file

@ -69,4 +69,4 @@ func (a sslpt) GetDocumentation() parser.AnnotationFields {
func (a sslpt) Validate(anns map[string]string) error { func (a sslpt) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, sslPassthroughAnnotations.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, sslPassthroughAnnotations.Annotations)
} }

View file

@ -66,4 +66,4 @@ func (a streamSnippet) GetDocumentation() parser.AnnotationFields {
func (a streamSnippet) Validate(anns map[string]string) error { func (a streamSnippet) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, streamSnippetAnnotations.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, streamSnippetAnnotations.Annotations)
} }

View file

@ -111,4 +111,4 @@ func (a upstreamhashby) GetDocumentation() parser.AnnotationFields {
func (a upstreamhashby) Validate(anns map[string]string) error { func (a upstreamhashby) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, upstreamHashByAnnotations.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, upstreamHashByAnnotations.Annotations)
} }

View file

@ -67,4 +67,4 @@ func (a upstreamVhost) GetDocumentation() parser.AnnotationFields {
func (a upstreamVhost) Validate(anns map[string]string) error { func (a upstreamVhost) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, upstreamVhostAnnotations.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, upstreamVhostAnnotations.Annotations)
} }

View file

@ -65,4 +65,4 @@ func (cbbs xforwardedprefix) GetDocumentation() parser.AnnotationFields {
func (a xforwardedprefix) Validate(anns map[string]string) error { func (a xforwardedprefix) Validate(anns map[string]string) error {
maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk) maxrisk := parser.StringRiskToRisk(a.r.GetSecurityConfiguration().AnnotationsRisk)
return parser.CheckAnnotationRisk(anns, maxrisk, xForwardedForAnnotations.Annotations) return parser.CheckAnnotationRisk(anns, maxrisk, xForwardedForAnnotations.Annotations)
} }

View file

@ -115,6 +115,10 @@ type ValidationError struct {
Reason error Reason error
} }
type RiskyAnnotationError struct {
Reason error
}
func (e ValidationError) Error() string { func (e ValidationError) Error() string {
return e.Reason.Error() return e.Reason.Error()
} }
@ -132,3 +136,21 @@ func IsValidationError(e error) bool {
_, ok := e.(ValidationError) _, ok := e.(ValidationError)
return ok return ok
} }
// NewValidationError returns a new LocationDenied error
func NewRiskyAnnotations(name string) error {
return RiskyAnnotationError{
Reason: fmt.Errorf("annotation group %s contains risky annotation based on ingress configuration", name),
}
}
// IsRiskyAnnotationError checks if the err is an error which
// indicates that some annotation value is invalid
func IsRiskyAnnotationError(e error) bool {
_, ok := e.(ValidationError)
return ok
}
func (e RiskyAnnotationError) Error() string {
return e.Reason.Error()
}

View file

@ -152,6 +152,9 @@ Requires the update-status parameter.`)
annotationsPrefix = flags.String("annotations-prefix", parser.DefaultAnnotationsPrefix, annotationsPrefix = flags.String("annotations-prefix", parser.DefaultAnnotationsPrefix,
`Prefix of the Ingress annotations specific to the NGINX controller.`) `Prefix of the Ingress annotations specific to the NGINX controller.`)
disableAnnotationValidation = flags.Bool("disable-annotation-validation", parser.DefaultDisableAnnotationValidation,
`Prefix of the Ingress annotations specific to the NGINX controller.`)
enableSSLChainCompletion = flags.Bool("enable-ssl-chain-completion", false, enableSSLChainCompletion = flags.Bool("enable-ssl-chain-completion", false,
`Autocomplete SSL certificate chains with missing intermediate CA certificates. `Autocomplete SSL certificate chains with missing intermediate CA certificates.
Certificates uploaded to Kubernetes must have the "Authority Information Access" X.509 v3 Certificates uploaded to Kubernetes must have the "Authority Information Access" X.509 v3
@ -249,6 +252,7 @@ https://blog.maxmind.com/2019/12/18/significant-changes-to-accessing-and-using-g
} }
parser.AnnotationsPrefix = *annotationsPrefix parser.AnnotationsPrefix = *annotationsPrefix
parser.DisableAnnotationValidation = *disableAnnotationValidation
// check port collisions // check port collisions
if !ing_net.IsPortAvailable(*httpPort) { if !ing_net.IsPortAvailable(*httpPort) {

View file

@ -0,0 +1,38 @@
# TODO: remove the need to use fullnameOverride
fullnameOverride: nginx-ingress
controller:
image:
repository: ingress-controller/controller
chroot: true
tag: 1.0.0-dev
digest:
digestChroot:
containerPort:
http: "1080"
https: "1443"
extraArgs:
http-port: "1080"
https-port: "1443"
# e2e tests do not require information about ingress status
update-status: "false"
scope:
enabled: true
config:
worker-processes: "1"
service:
type: NodePort
admissionWebhooks:
enabled: true
certificate: "/usr/local/certificates/cert"
key: "/usr/local/certificates/key"
defaultBackend:
enabled: false
rbac:
create: true
scope: true

View file

@ -47,7 +47,7 @@ import (
_ "k8s.io/ingress-nginx/test/e2e/settings" _ "k8s.io/ingress-nginx/test/e2e/settings"
_ "k8s.io/ingress-nginx/test/e2e/settings/modsecurity" _ "k8s.io/ingress-nginx/test/e2e/settings/modsecurity"
_ "k8s.io/ingress-nginx/test/e2e/settings/ocsp" _ "k8s.io/ingress-nginx/test/e2e/settings/ocsp"
// _ "k8s.io/ingress-nginx/test/e2e/settings/validations" // Test is not working, need to check the cross namespace stuff _ "k8s.io/ingress-nginx/test/e2e/settings/validations"
_ "k8s.io/ingress-nginx/test/e2e/ssl" _ "k8s.io/ingress-nginx/test/e2e/ssl"
_ "k8s.io/ingress-nginx/test/e2e/status" _ "k8s.io/ingress-nginx/test/e2e/status"

View file

@ -18,93 +18,69 @@ package annotations
import ( import (
"context" "context"
"fmt"
"net/http"
"strings"
"github.com/onsi/ginkgo/v2" "github.com/onsi/ginkgo/v2"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"golang.org/x/crypto/bcrypt"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/ingress-nginx/test/e2e/framework" "k8s.io/ingress-nginx/test/e2e/framework"
) )
func buildSecret(username, password, name, namespace string) *corev1.Secret { var _ = framework.IngressNginxDescribeSerial("annotation validations", func() {
//out, err := exec.Command("openssl", "passwd", "-crypt", password).CombinedOutput() f := framework.NewDefaultFramework("validations")
out, err := bcrypt.GenerateFromPassword([]byte(password), 14)
encpass := fmt.Sprintf("%v:%s\n", username, out)
assert.Nil(ginkgo.GinkgoT(), err)
return &corev1.Secret{ ginkgo.It("should allow ingress based on their risk on webhooks", func() {
ObjectMeta: metav1.ObjectMeta{
Name: name,
Namespace: namespace,
DeletionGracePeriodSeconds: framework.NewInt64(1),
},
Data: map[string][]byte{
"auth": []byte(encpass),
},
Type: corev1.SecretTypeOpaque,
}
}
var _ = framework.DescribeAnnotation("annotation validations", func() {
f := framework.NewDefaultFramework("annotations-validations")
ginkgo.BeforeEach(func() {
f.NewEchoDeployment()
otherns := &corev1.Namespace{
ObjectMeta: metav1.ObjectMeta{
Name: "otherns",
},
}
_, err := f.KubeClientSet.CoreV1().Namespaces().Create(context.Background(), otherns, metav1.CreateOptions{})
assert.Nil(ginkgo.GinkgoT(), err, "creating namespace")
})
ginkgo.AfterEach(func() {
err := f.KubeClientSet.CoreV1().Namespaces().Delete(context.Background(), "otherns", metav1.DeleteOptions{})
assert.Nil(ginkgo.GinkgoT(), err, "deleting namespace")
})
ginkgo.It("should return status code 401 when authentication is configured but Authorization header is not configured", func() {
host := "annotation-validations" host := "annotation-validations"
// Allow cross namespace consumption
f.UpdateNginxConfigMapData("allow-cross-namespace-resources", "true") // Low and Medium Risk annotations should be allowed, the rest should be denied
f.UpdateNginxConfigMapData("annotations-risk", "Medium")
// Sleep a while just to guarantee that the configmap is applied // Sleep a while just to guarantee that the configmap is applied
framework.Sleep() framework.Sleep()
s := f.EnsureSecret(buildSecret("foo", "bar", "test", "otherns"))
annotations := map[string]string{ annotations := map[string]string{
"nginx.ingress.kubernetes.io/auth-type": "basic", "nginx.ingress.kubernetes.io/default-backend": "default/bla", // low risk
"nginx.ingress.kubernetes.io/auth-secret": fmt.Sprintf("%s/%s", s.Namespace, s.Name), "nginx.ingress.kubernetes.io/denylist-source-range": "1.1.1.1/32", // medium risk
"nginx.ingress.kubernetes.io/auth-realm": "test auth",
} }
ginkgo.By("allow ingress with low/medium risk annotations")
ing := framework.NewSingleIngress(host, "/", host, f.Namespace, framework.EchoService, 80, annotations) ing := framework.NewSingleIngress(host, "/", host, f.Namespace, framework.EchoService, 80, annotations)
f.EnsureIngress(ing) _, err := f.KubeClientSet.NetworkingV1().Ingresses(f.Namespace).Create(context.TODO(), ing, metav1.CreateOptions{})
assert.Nil(ginkgo.GinkgoT(), err, "creating ingress with allowed annotations should not trigger an error")
f.WaitForNginxServer(host, ginkgo.By("block ingress with risky annotations")
func(server string) bool { annotations["nginx.ingress.kubernetes.io/modsecurity-transaction-id"] = "bla123" // High should be blocked
return strings.Contains(server, "server_name annotation-validations") annotations["nginx.ingress.kubernetes.io/modsecurity-snippet"] = "some random stuff;" // High should be blocked
}) ing = framework.NewSingleIngress(host, "/", host, f.Namespace, framework.EchoService, 80, annotations)
_, err = f.KubeClientSet.NetworkingV1().Ingresses(f.Namespace).Update(context.TODO(), ing, metav1.UpdateOptions{})
assert.NotNil(ginkgo.GinkgoT(), err, "creating ingress with risky annotations should trigger an error")
f.HTTPTestClient(). })
GET("/").
WithHeader("Host", host). ginkgo.It("should allow ingress based on their risk on webhooks", func() {
Expect(). host := "annotation-validations"
Status(http.StatusUnauthorized).
Body().Contains("401 Authorization Required") // Low and Medium Risk annotations should be allowed, the rest should be denied
f.UpdateNginxConfigMapData("annotations-risk", "Medium")
// Sleep a while just to guarantee that the configmap is applied
framework.Sleep()
annotations := map[string]string{
"nginx.ingress.kubernetes.io/default-backend": "default/bla", // low risk
"nginx.ingress.kubernetes.io/denylist-source-range": "1.1.1.1/32", // medium risk
}
ginkgo.By("allow ingress with low/medium risk annotations")
ing := framework.NewSingleIngress(host, "/", host, f.Namespace, framework.EchoService, 80, annotations)
_, err := f.KubeClientSet.NetworkingV1().Ingresses(f.Namespace).Create(context.TODO(), ing, metav1.CreateOptions{})
assert.Nil(ginkgo.GinkgoT(), err, "creating ingress with allowed annotations should not trigger an error")
ginkgo.By("block ingress with risky annotations")
annotations["nginx.ingress.kubernetes.io/modsecurity-transaction-id"] = "bla123" // High should be blocked
annotations["nginx.ingress.kubernetes.io/modsecurity-snippet"] = "some random stuff;" // High should be blocked
ing = framework.NewSingleIngress(host, "/", host, f.Namespace, framework.EchoService, 80, annotations)
_, err = f.KubeClientSet.NetworkingV1().Ingresses(f.Namespace).Update(context.TODO(), ing, metav1.UpdateOptions{})
assert.NotNil(ginkgo.GinkgoT(), err, "creating ingress with risky annotations should trigger an error")
f.HTTPTestClient().
GET("/").
WithHeader("Host", host).
WithBasicAuth("foo", "bar").
Expect().
Status(http.StatusOK)
}) })
}) })