NGINX App Protect 컨테이너 앱 보안

NGINX App Protect 는 웹 애플리케이션 보호를 위한 모듈로, NGINX Plus를 기반으로 하여 웹 애플리케이션의 보안을 강화하는데 사용됩니다.

컴퓨터 보안 측면에서 경계는 애플리케이션 및 내부의 기타 인프라 구성 요소에 대한 “Trust Zone”을 설정하는 개념적 라인입니다.

Castle-and-Moat 방식을 사용하는 기존 인프라 환경에서는 경계가 Intranet(내부 네트워크)을 Extranet 또는 인터넷과 분리했습니다. Intranet은 안전하다고 가정했으며 위협은 외부에서만 온다고 가정했습니다. 보안 상태는 다소 정적이었고 패킷 검사 및 Access Control 조치를 통해 Intranet 주변에 경계를 구축하는 것으로 구성되었습니다.

그러나 시간이 지남에 따라 외부 공격자는 보안 제어를 우회하고 Intranet의 구성 요소를 손상시키거나 외부 공격을 조작하여 요청이 경계 내에서 발생하는 것처럼 보이게 만드는 방법을 찾았습니다. 이로 인해 Trust가 구축되기 전에 모든 Entity(내부 및 외부)를 지속적으로 평가하는 Zero Trust 보안 모델로 변경하게 되었습니다. Intranet은 더 이상 안전한 것으로 간주되지 않습니다.

디지털 혁신과 Microservices와 같은 새로운 애플리케이션 아키텍처로 인해 추가적인 보안 문제가 발생했습니다. 많은 기업 애플리케이션이 퍼블릭 클라우드에서 호스팅 되거나 클라우드 및 On-Premise 토폴로지에 분산되어 있어 애플리케이션을 보호하는 보안 인프라가 더 이상 전적으로 로컬 관리자의 통제하에 있지 않습니다. 그 결과 이제 많은 조직이 개별 애플리케이션(또는 그들 사이에 직접적인 구조적 종속성이 있는 소규모 애플리케이션 그룹) 주위에 경계를 설정합니다. 이 그래픽에서 녹색 점선은 경계를 나타냅니다.

아키텍처 모델에 관계없이, 들어오는 트래픽을 검사하고 그 안에 있는 애플리케이션을 보호하는 보안 정책을 시행하기 위해 경계에 있는 “Gatekeeper”가 있습니다. 이 Gatekeeper를 Edge라고 합니다. 세 가지 일반적인 배포 패턴에 대한 다음 그림에서 Edge는 PROTECT라는 단어를 둘러싸는 빨간색 상자로 표시됩니다.

Kubernetes 프레임워크와 같은 컨테이너화된 아키텍처에서는 동일한 개념이 적용됩니다. Ingress Controller는 전체 Kubernetes 클러스터의 Edge 역할을 하여 외부 클라이언트의 액세스를 관리하고 클러스터의 Kubernetes 서비스로 요청을 라우팅합니다. 그러나 다음 다이어그램에 표시된 것처럼 보안 정책은 클러스터 내에서 Pod 별 또는 Service 별처럼 보다 세분화된 수준으로 시행될 수 있습니다.

  • Pod 별 보호(왼쪽에 설명됨)를 통해 Pod는 하나 이상의 컨테이너에서 애플리케이션 또는 애플리케이션 구성 요소를 포함하는 경계를 정의합니다.
  • Service 별 보호(오른쪽에 설명됨)를 통해 서비스는 하나 이상의 Pod를 통해 애플리케이션 배포의 인스턴스를 Expose 합니다. 경계는 서비스 뒤의 Pod 주위에 설정됩니다.

목차

1. NGINX App Protect 로 경계 보안
2. NGINX App Protect 를 사용한 CI/CD Pipeline의 경계 보안

1. NGINX App Protect 로 경계 보안

NGINX App Protect 는 웹 애플리케이션 방화벽(WAF) 기술을 기반으로 구축된 최신 애플리케이션 보안 솔루션입니다. NGINX App Protect 를 사용하면 배포 환경이나 애플리케이션 아키텍처(On-Premise, 클라우드, 하이브리드, Microservices 기반 또는 컨테이너)에 관계없이 경계를 보호하여 애플리케이션에 보안을 적용할 수 있습니다.

NGINX App Protect 를 사용하여 Edge에서 보안을 구현하면 경계 외부에서 보안을 수행할 수 있다는 주요 이점을 제공합니다. 기본적으로 트래픽 검사 및 Access Control는 경계를 통과하기 전에 위협을 차단하기 위해 Edge에서 발생합니다. 애플리케이션 이전의 마지막 Hop인 Edge는 애플리케이션에 대한 위협의 유형과 수를 가장 잘 볼 수 있는 곳입니다.

다음 Snippet은 경계 내에서 개별적으로 액세스하는 세 개의 애플리케이션(app1, app2 및 app3)을 보호하도록 NGINX App Protect 를 구성합니다.

load_module modules/ngx_http_app_protect_module.so; 
error_log /var/log/nginx/error.log debug;

http {
    # Enable NGINX App Protect in 'http' context
    app_protect_enable on;  

    # Enable remote logging        
    app_protect_security_log_enable on; 

    # Default JSON security policy
    app_protect_policy_file "/etc/nginx/NginxDefaultPolicy.json";  

    # Set remote logging options (in referenced file) and log server IP address/port
    app_protect_security_log "/etc/nginx/log-default.json" syslog:server=127.0.0.1:515;

    server { 
        listen 80;
        server_name app1.com;
        app_protect_policy_file "/etc/nginx/NginxApp1Policy.json"; # JSON policy for app1

        location / {
            proxy_pass http://www.app1.com:8080$request_uri;
        }
    }

    server {
        listen 80;
        server_name app2.com;
        app_protect_policy_file "/etc/nginx/NginxApp2Policy.json"; # JSON policy for app2

        location / {
            proxy_pass http://www.app2.com:8080$request_uri;
        }
    }

    server {
        listen 80;
        server_name app3.com;
        app_protect_policy_file "/etc/nginx/NginxApp3Policy.json"; # JSON policy for app3

        location / {
            proxy_pass http://www.app3.com:8080$request_uri;
        }
    }
}

다음 Snippet은 NGINX App Protect 를 구성하여 경계 내의 단일 애플리케이션에 포함되고 표시되는 app1, app2 및 app3을 보호합니다.

load_module modules/ngx_http_app_protect_module.so; 
error_log /var/log/nginx/error.log debug;

http {
    server {
        listen      80;
        server_name app.com;

        # Enable NGINX App Protect in 'http' context
        app_protect_enable on;  

        # Enable remote logging        
        app_protect_security_log_enable on; 

        # Default JSON security policy
        app_protect_policy_file "/etc/nginx/NginxDefaultPolicy.json";  

        # Set remote logging options (in referenced file) and log server IP address/port 
        app_protect_security_log "/etc/nginx/log-default.json" 
                                 syslog:server=10.1.20.6:5144;

        location / {
            # Main JSON policy file
            app_protect_policy_file "/etc/nginx/policy/policy_main.json";
            proxy_pass http://app.com$request_uri;
        }

        location /app1 {
            # JSON policy file for app1
            app_protect_policy_file "/etc/nginx/policy/policy_app1.json"; 
            proxy_pass http://app.com$request_uri;
        }

        location /app2 {
            # JSON policy file for app2
            app_protect_policy_file "/etc/nginx/policy/policy_app2.json"; 
            proxy_pass http://app.com$request_uri;
        }

        location /app3 {
            # JSON policy file for app3
            app_protect_policy_file "/etc/nginx/policy/policy_app3.json"; 
            proxy_pass http://app.com$request_uri;
        }
    }
}

두 구성 모두에서 각 애플리케이션에 대한 별도의 app_protect_policy_file 지시문이 있으며 보안 요구 사항이 다르기 때문에 각각 고유한 보안 정책을 할당합니다.

2. NGINX App Protect를 사용한 CI/CD Pipeline의 경계 보안

NGINX App Protect 는 최신 애플리케이션의 확장성 및 자동화와 관련된 보안 문제를 해결합니다. NGINX App Protect를 CI/CD Pipeline 의 여러 통합 지점에 직접 삽입하면 애플리케이션, Pod 및 Service를 코드에 더 가깝게 보호하여 개발, 운영 및 보안 간의 격차를 해소할 수 있습니다.

애플리케이션 개발 주기에 보안을 통합하면 보안 테스트를 수행하고 자동화하여 애플리케이션 및 애플리케이션 구성 요소에 대한 보안 위험을 발견할 수 있습니다. 보안 규정 준수 요구 사항이 충족되지 않으면 보안 정책 적용을 정의하고 애플리케이션 배포를 되돌릴 수 있습니다. 효과적으로 애플리케이션이 배포되기 전에 애플리케이션의 새 버전에 NGINX App Protect를 통합하여 안전한 애플리케이션을 지속적으로 제공합니다.

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

NGINX STORE 뉴스레터 및 최신 소식 구독하기

* indicates required