Knowledge Base

Kubernetes API открыт публично (порт 6443 / 8080)

Kubernetes API Server открыт публично

Категория: Server Hardening · Риск: critical

Kubernetes API Server открыт публично

Критическая угроза

Kubernetes API Server (порт 6443 — HTTPS, порт 8080 — небезопасный HTTP) — центральный компонент кластера. Несанкционированный доступ к нему означает:

# Проверка публичного доступа к K8s API
curl -sk https://<IP>:6443/api | jq .
# Если вернул данные без 401 — анонимный доступ включён

# Получить список секретов (при анонимном доступе)
kubectl --server=https://<IP>:6443 --insecure-skip-tls-verify get secrets --all-namespaces

Немедленное исправление

Закрыть порты файрволом

# Разрешить только worker nodes и admin IP
ufw allow from <WORKER_NODE_IP> to any port 6443
ufw allow from <ADMIN_IP> to any port 6443
ufw deny 6443

# Порт 8080 (небезопасный) — всегда закрыть
ufw deny 8080

Отключить анонимный доступ

# kube-apiserver (kubeadm)
# /etc/kubernetes/manifests/kube-apiserver.yaml
spec:
  containers:
  - command:
    - kube-apiserver
    - --anonymous-auth=false          # ← добавить
    - --insecure-port=0               # ← отключить HTTP порт
    - --authorization-mode=Node,RBAC  # ← строгая авторизация

Managed Kubernetes (AKS, EKS, GKE)

# AKS — разрешить доступ только с конкретных IP
az aks update -n myCluster -g myRG \
    --api-server-authorized-ip-ranges "203.0.113.0/24"

# EKS — настройка через Security Groups
# GKE — Master authorized networks

Аудит RBAC

# Проверить кто имеет admin-права
kubectl get clusterrolebindings -o json | \
    jq '.items[] | select(.roleRef.name=="cluster-admin") | .subjects'

# Проверить service account permissions
kubectl auth can-i --list --as=system:serviceaccount:default:default

Связанные проверки