NGINX Plus Ingress Controller + WAF 통합 앱 보안

이 포스트는 NGINX Plus Ingress Controller 와 WAF를 통합하여 앱 보호를 구성하고 통합하는 이유에 대해 설명합니다.

기업은 서비스와 애플리케이션을 신속하게 시장에 출시해야 한다는 것을 알고 있습니다. 그렇게 하지 않으면 경쟁자가 먼저 출시를 할 것이기 때문입니다. 그러나 웹 애플리케이션은 사이버 공격의 주요 대상이며 이를 빠르게 업데이트하면 잠재적인 보안 취약성이 QA를 통과하지 못하고 Production에 들어갈 위험이 높아집니다.

많은 요인으로 인해 강력한 보안 표준을 일관되게 적용하기가 어렵습니다. 코드를 생산에 신속하게 릴리스해야 한다는 압박감 때문에 보안을 소홀히 하고 싶은 유혹이 생깁니다. 취약성 스캐너와 같은 자동화 도구에 지나치게 의존하는 것은 모든 문제를 파악하지 못하기 때문에 위험합니다. 다양한 개발팀이 기여한 코드를 결합하면 누가 보안 시행을 담당하는지 명확하지 않게 됩니다. Production 환경에서 여러 애플리케이션 및 애플리케이션 버전을 실행하면 애플리케이션 취약점이 몇 배로 늘어납니다.

결과적으로 웹 애플리케이션 방화벽(WAF)과 같은 보안 도구의 필요성이 그 어느 때보다 절실해졌습니다. 이러한 보안 도구는 종종 Load Balancing Proxy와 통합되고 기업 네트워크의 Edge(또는 Front Door)에 배포되어 보안 경계를 생성합니다.

최신 애플리케이션 및 인프라의 보안 침해로 인해 이 접근 방식에 필요한 두 가지 개선 사항이 드러났습니다.

  • 주변의 보안이 충분하지 않습니다. – 보호하기 쉬운 단일 경계는 거의 없으며 WAF와 같은 Proxy 기반 보안 도구는 보호하는 애플리케이션에 더 가깝게 배포해야 합니다.
  • 보안은 더 이상 CISO 및 SecOps팀의 유일한 영역이 아닙니다. – DevOps팀은 CI/CD Pipeline의 일부로 보안 정책을 수락, 테스트 및 배포하는 데 중요한 역할을 합니다.

목차

1. NGINX App Protect가 포함된 NGINX Plus Ingress Controller
2. WAF를 NGINX Plus Ingress Controller에 통합하는 이유
3. NGINX Plus Ingress Controller에서 앱 보호 구성
3-1. 로깅(Logging)
3-2. 리소스 임계값
4. 결론

1. NGINX App Protect가 포함된 NGINX Plus Ingress Controller

Kubernetes 용 NGINX Plus Ingress Controller Release 1.8.0 이상을 사용하면 Ingress Controller에 NGINX App Protect WAF를 포함할 수 있습니다.

NGINX App Protect를 NGINX Plus Ingress Controller Build 하려면 NGINX Plus와 App Protect 모두에 대한 구독이 있어야 합니다. 통합 NGINX Plus Ingress Controller 이미지(Docker 컨테이너)를 Build 하는 데 필요한 몇 가지 간단한 단계가 전부입니다. Red Hat OpenShift를 포함하여 지원되는 플랫폼에서 Helm 차트 또는 NGINX Ingress Operator를 사용하여 이미지를 수동으로 배포할 수 있습니다. 그런 다음 익숙한 Kubernetes API를 사용하여 보안 정책 및 구성을 관리합니다.

2. WAF를 NGINX Plus Ingress Controller에 통합하는 이유

NGINX App Protect WAF를 NGINX Plus Ingress Controller에 통합하면 다음과 같은 세 가지 고유한 이점이 있습니다.

애플리케이션 경계 보안 – 잘 설계된 Kubernetes 배포에서 Ingress Controller는 Kubernetes 내에서 실행되는 서비스로 흐르는 Data Plane 트래픽의 유일한 진입점이므로 보안 Proxy에 이상적인 위치입니다.

Data Plane 통합 – Ingress Controller 내에 WAF를 내장하면 별도의 WAF 솔루션이 필요하지 않습니다. 이렇게 하면 복잡성, 비용 및 장애 지점 수를 줄일 수 있습니다.

Control Plane 통합 – 이제 Kubernetes API로 WAF 구성을 관리할 수 있으므로 CI/CD 프로세스를 훨씬 쉽게 자동화할 수 있습니다. Ingress Controller 구성은 Kubernetes RBAC(Role-Based Access Control) 방식을 준수하므로 WAF 구성을 전용 DevSecOps팀에 안전하게 위임할 수 있습니다.

App Protect의 구성 객체는 Ingress Controller(YAML 파일 사용)와 NGINX Plus(JSON 사용) 모두에서 일관성이 있습니다. Master 구성은 어느 장치로든 쉽게 변환 및 배포할 수 있으므로 WAF 구성을 코드로 관리하고 모든 애플리케이션 환경에 배포하는 것이 더욱 쉬워집니다.

3. NGINX Plus Ingress Controller 에서 App Protect 구성

다음 두 가지 새로운 사용자 정의 리소스를 사용하여 NGINX Plus Ingress Controller에서 App Protect 구성합니다.

  • APPolicy는 적용할 App Protect에 대한 WAF 정책을 정의합니다. WAF 정책은 독립형 App Protect JSON‑Format 정책의 YAML 버전입니다.
  • APLogConf는 App Protect 모듈의 로깅 동작을 정의합니다.

Ingress Controller 이미지에는 Build 시 포함되는 App Protect 서명 세트도 포함됩니다.

적절한 APPolicy 및 APLogConf 리소스를 배포한 후에는 일련의 Annotation을 사용하여 Kubernetes Ingress 리소스에서 참조합니다.

apiVersion: extensions/v1beta 
kind: Ingress 
metadata: 
  name: cafe-ingress 
  annotations: 
    kubernetes.io/ingress.class: "nginx" 
    appprotect.f5.com/app-protect-policy: "default/dataguard-alarm" 
    appprotect.f5.com/app-protect-enable: "True" 
    appprotect.f5.com/app-protect-security-log-enable: "True" 
    appprotect.f5.com/app-protect-security-log: "default/logconf" 
    appprotect.f5.com/app-protect-security-log-destination: "syslog:server=10.27.2.34:514" 
spec: 
  ...

다음 두 가지 새로운 사용자 정의 리소스를 사용하여 NGINX Plus Ingress Controller에서 App Protect를 구성합니다.

APPolicy 및 APLogConf 리소스는 DevSecOps팀이 소유한 다른 Namespace에서 정의할 수 있습니다. 이를 통해 보안 정책을 전담팀에 위임하는 대기업에서 안전하게 문제를 분리할 수 있습니다.

App Protect 정책은 OWASP Top 10, XSS(Cross-Site Scripting), 주입(Ingection), 회피 기술(Evasion Technique), 정보 유출(Data Guard 사용) 등 다양한 유형의 위협으로부터 웹 애플리케이션을 보호합니다. 다음 샘플 APPolicy 사용자 정의 리소스는 차단 모드에서 Data Guard 위반을 사용하도록 활성화합니다.

apiVersion: appprotect.f5.com/v1beta1 
kind: APPolicy 
metadata:  
  name: dataguard-alarm 
spec: 
  policy: 
    applicationLanguage: utf-8 
    blocking-settings: 
      violations: 
      - alarm: true 
        block: true 
        name: VIOL_DATA_GUARD 
    data-guard: 
      creditCardNumbers: true 
      enabled: true 
      enforcementMode: ignore-urls-in-list 
      maskData: true 
      usSocialSecurityNumbers: true 
    enforcementMode: blocking
    name: dataguard-alarm 
    template:
     name: POLICY_TEMPLATE_NGINX_BASE

3-1. 로깅(Logging)

App Protect 및 NGINX Plus Ingress Controller 에 대한 Log는 보안팀이 일반적으로 DevOps 및 애플리케이션 소유자와 독립적으로 운영되는 방식을 반영하기 위해 설계상 분리되어 있습니다. syslog Pod의 클러스터 IP 주소에 대한 app-protect-security-log-destination Annotation에 대한 매개변수를 설정하여 Kubernetes Pod에서 연결할 수 있는 모든 syslog 대상으로 App Protect Log를 보낼 수 있습니다(위의 Ingress 리소스 참조). 또한 APLogConf 리소스를 사용하여 관심 있는 App Protect Log를 지정하고 묵시적으로 어떤 Log가 syslog Pod에 Push 되는지 지정할 수 있습니다. NGINX Plus Ingress Controller Log는 모든 Kubernetes 컨테이너와 마찬가지로 로컬 표준 Output으로 전달됩니다.

3-2. 리소스 임계값

마지막으로 NGINX Plus Ingress Controller의 NGINX App Protect는 App Protect 프로세스의 CPU 및 메모리 사용률 모두에 대해 구성 가능한 리소스 보호 임계값을 제공하여 다른 프로세스가 고갈되지 않도록 합니다. 이는 리소스 공유에 의존하고 잠재적으로 ‘noisy neighbor’ 문제를 겪을 수 있는 Kubernetes와 같은 Multi ‑ Tenant 환경에서 특히 중요합니다. 다음 샘플 ConfigMap은 App Protect 프로세스에 대한 리소스 임계값을 설정합니다.

kind: ConfigMap 
apiVersion: v1 
metadata: 
  name: nginx-config 
  namespace: nginx-ingress 
data: 
  app_protect_physical_memory_util_thresholds: "high=100 low=10" 
  app_protect_cpu_thresholds: "high=100 low=50" 
  app_protect_failure_mode_action: "drop"

상한 임계값은 App Protect가 장애 모드로 들어가는 사용률을 설정하고 낮은 임계값은 장애 모드를 종료하는 사용률을 설정합니다. 메모리 사용률의 경우 각각 100% 및 10%이고 CPU의 경우 100% 및 50%입니다. app_protect_failure_mode_action에 대한 값 하락은 App Protect가 실패 모드에 있는 동안 연결을 닫아 트래픽을 거부함을 의미합니다.

4. 결론

릴리스 1.8.0의 Ingress 리소스 구성은 Annotation을 사용하여 검사되는 요청과 검사되지 않는 요청에 대한 세분화된 제어를 제공하지 않는 App Protect 정책을 참조합니다.

향후 NGINX Plus Ingress Controller 릴리스에서는 NGINX Ingress Resources와 통합된 보다 상세하고 사용자 정의 가능한 구성을 확인할 수 있습니다. 이렇게 하면 WAF 정책이 요청에 적용되는 방식을 추가로 제어할 수 있습니다.

Modern 컨테이너의 애플리케이션의 경우 모든 Ingress 트래픽(“North-South”)은 신뢰할 수 없는 반면 내부적으로 생성된 트래픽(“East-West”)은 잘 구성되고 신뢰할 수 있다고 가정하는 것이 안전한 경우가 많습니다. 이 경우 Ingress Controller는 WAF와 같은 보안 Proxy에 이상적인 위치입니다.

NGINX App Protect가 포함된 NGINX Plus Ingress Controller는 WAF를 통합하는 유일한 Ingress Controller 구현입니다. Ingress Controller에 WAF를 내장하면 Data Plane 장치를 하나로 통합하고 해당 구성에 Kubernetes API를 활용하여 효율성이 더욱 향상됩니다.

솔루션 개요를 확인하고 NGINX Plus Ingress Controller 성능을 직접 테스트 및 사용해 보려면 지금 30일 무료 평가판을 신청하거나 사용 사례에 대해 최신 소식을 빠르게 전달받고 싶으시면 아래 뉴스레터를 구독하세요.