From e0db79a3f10d538e6c596f20b44ff164bba117d1 Mon Sep 17 00:00:00 2001 From: Thore Cimbal Date: Tue, 28 Jul 2026 15:09:29 +0200 Subject: [PATCH] feat: Default-deny ingress NetworkPolicy for authentik namespace Ingress-only default-deny (egress untouched) plus explicit allows: Traefik (kube-system) + MAS (matrix ns) -> authentik-server on 80/443, and Traefik -> cert-manager's ACME HTTP-01 solver pods on 8089. authentik-postgresql already has its own Bitnami-chart-managed policy, left alone. Part of issue #10. --- apps/authentik/kustomization.yaml | 1 + apps/authentik/networkpolicy.yaml | 64 +++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 apps/authentik/networkpolicy.yaml diff --git a/apps/authentik/kustomization.yaml b/apps/authentik/kustomization.yaml index 860ee7a..c29e79a 100755 --- a/apps/authentik/kustomization.yaml +++ b/apps/authentik/kustomization.yaml @@ -8,3 +8,4 @@ resources: - certificate.yaml - authentik.yaml - ingress.yaml + - networkpolicy.yaml diff --git a/apps/authentik/networkpolicy.yaml b/apps/authentik/networkpolicy.yaml new file mode 100644 index 0000000..96190a8 --- /dev/null +++ b/apps/authentik/networkpolicy.yaml @@ -0,0 +1,64 @@ +# Default-deny ingress for the authentik namespace, with explicit allow rules for the +# traffic paths that actually need to reach in: Traefik (kube-system) for the public +# auth.axion1337.chat endpoint and ACME HTTP-01 challenges, and MAS (matrix namespace) +# for upstream OIDC calls. Egress is intentionally untouched (federation-equivalent +# outbound calls like SMTP aren't restricted here). +# +# Note: authentik-postgresql already has its own NetworkPolicy from the Bitnami +# postgresql subchart (port 5432, no source restriction) - left alone, not duplicated, +# since it would get reset on the next Helm upgrade anyway. +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + name: default-deny-ingress + namespace: authentik +spec: + podSelector: {} + policyTypes: + - Ingress +--- +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + name: allow-ingress-authentik-server + namespace: authentik +spec: + podSelector: + matchLabels: + app.kubernetes.io/name: authentik + app.kubernetes.io/component: server + policyTypes: + - Ingress + ingress: + - from: + - namespaceSelector: + matchLabels: + kubernetes.io/metadata.name: kube-system + - namespaceSelector: + matchLabels: + kubernetes.io/metadata.name: matrix + ports: + - protocol: TCP + port: 80 + - protocol: TCP + port: 443 +--- +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + name: allow-ingress-acme-solver + namespace: authentik +spec: + podSelector: + matchLabels: + acme.cert-manager.io/http01-solver: "true" + policyTypes: + - Ingress + ingress: + - from: + - namespaceSelector: + matchLabels: + kubernetes.io/metadata.name: kube-system + ports: + - protocol: TCP + port: 8089