API 호출을 인증하는 방법에는 X.509 클라이언트 인증서부터 HTTP 기본 인증까지 다양한 옵션이 존재합니다.
그러나 최근 몇 년 간, OAuth 2.0 액세스 토큰이 사실상의 표준으로 자리잡았습니다.
이 액세스 토큰은 클라이언트에서 API 서버로 전달되는 인증 자격 증명으로, 일반적으로 HTTP 헤더를 통해 전송됩니다.
하지만 OAuth 2.0은 다양한 관련 표준들이 얽혀 있는 복잡한 시스템입니다.
OAuth 2.0 인증 흐름을 발급, 제시, 검증하는 과정은 여러 표준에 의존하며,
이 글을 작성하는 시점에서만 하더라도 8개의 OAuth 2.0 표준이 존재합니다.
그 중 가장 대표적인 것이 바로 액세스 토큰입니다.
하지만 OAuth 2.0 핵심 사양(RFC 6749)은 액세스 토큰의 형식을 명시하지 않기 때문에,
실제로 사용되는 액세스 토큰 형식은 두 가지로 나눠집니다.
인증된 클라이언트는 보호된 리소스에 접근하기 위해, 각 HTTP 요청에 액세스 토큰을 함께 전달합니다.
액세스 토큰 검증은 발급한 신뢰할 수 있는 ID 공급자(IdP)를 통해 이루어지며,
이 과정에서 토큰이 실제로 발급 되었고, 만료되지 않았는지를 확인해야 합니다.
JWT는 발급된 ID 공급자(IdP)에서 암호화 방식으로 서명되므로, "오프라인" 환경에서도 검증이 가능합니다.
JWT는 일반적으로 만료 날짜도 포함되어 있어, 이를 통해 토큰의 유효성을 쉽게 확인할 수 있습니다.
NGINX Plus의 auth_jwt 모듈은 바로 이 "오프라인" JWT 검증을 처리합니다.
반면, 불투명 토큰은 이를 발급한 IdP로 다시 보내어 검증을 받아야 합니다.
이 방식은 IdP가 토큰을 취소할 수 있다는 장점이 있습니다.
예를 들어, 글로벌 로그아웃 작업을 수행할 때, 사용자가 로그아웃을 해도 이전에 로그인한 세션을 취소할 수 있어 보안상 유리합니다.
그러나 이 경우, JWT와 달리 IdP에서 실시간으로 검증을 해야 하므로 그에 따른 오버헤드가 발생할 수 있습니다.
이 블로그에서는 NGINX와 NGINX Plus가 OAuth 2.0 Relying Party로서 역할을 수행하는 방법을 다룹니다.
여기서 Relying Party란, **ID 공급자(IdP)**로부터 액세스 토큰을 받아 검증하고, 검증된 요청만을 프록시하는 시스템을 의미합니다.
이를 통해 NGINX가 어떻게 액세스 토큰 검증을 처리하며, 검증 프로세스가 통과된 요청만을 서버로 전달하는지 설명합니다.
또한, 검증 응답을 캐싱하여 사용자 경험을 개선하는 방법도 다룹니다.
NGINX Plus에서는 R18 버전부터 JavaScript 모듈을 활용해 캐시를 관리하고,
이 캐시를 NGINX Plus 인스턴스 클러스터에 분산시켜 성능을 최적화하는 방법을 소개합니다.
이를 통해, 토큰 검증에 필요한 리소스를 절감하고, 높은 트래픽 환경에서도 효율적인 보안 처리가 가능합니다.
본 블로그의 내용은 NGINX Open Source와 NGINX Plus 모두에 적용되며, NGINX Plus에 대한 언급은 해당 제품에만 적용됩니다.
액세스 토큰 검증을 위한 표준화된 방법은 바로 **토큰 내성(Token Introspection)**입니다.
이 방법은 RFC 7662에 정의되어 있으며, 이제 많은 주요 **ID 공급자(IdP)**와 클라우드 공급업체에서 널리 지원되고 있습니다.
토큰 내성은 Relying Party가 액세스 토큰을 IdP에 제출하여, 해당 토큰의 유효성 및 상태를 검증하는 JSON/REST 인터페이스를 정의합니다.
이를 통해 IdP는 액세스 토큰에 대한 정보를 반환하며, 그 결과를 바탕으로 Relying Party가 적절한 액션을 취할 수 있습니다.
하지만, 어떤 토큰 형식을 사용하더라도 각 백엔드 서비스나 애플리케이션에서 직접 검증을 수행하는 것은 여러 가지 문제를 일으킬 수 있습니다.
특히, 서비스마다 검증 로직이 달라지면 중복된 코드와 불필요한 처리가 많아집니다.
또한, 다양한 오류 조건과 에지 케이스를 모두 고려해야 하기 때문에,
각 서비스에서 검증을 독립적으로 처리하면 일관성 없는 구현과 예측할 수 없는 사용자 경험이 발생할 수 있습니다.
백엔드 서비스에서 고려해야 할 주요 오류 조건
NGINX auth_request 모듈을 사용하여 액세스 토큰 검증
액세스 토큰 검증을 중앙에서 처리하기 위해 NGINX의 auth_request 모듈을 사용하는 방법은 코드 중복을 방지하고,
검증 프로세스를 일관성 있게 유지하는 효과적인 접근 방식입니다.
이를 통해 여러 가지 중요한 이점을 얻을 수 있습니다.
1. 요청은 유효한 토큰을 가진 경우에만 백엔드 서비스에 전달됩니다
NGINX는 요청이 클라이언트로부터 유효한 액세스 토큰을 제시하는 경우에만 백엔드 서비스로 전달하도록 설정할 수 있습니다.
auth_request 모듈은 인증을 처리하는 별도의 엔드포인트에 요청을 보내 액세스 토큰을 검증하고,
검증이 성공적으로 완료된 경우에만 원래 요청을 백엔드 서비스로 포워딩합니다.
만약 토큰이 유효하지 않으면 요청은 차단되며, 클라이언트는 인증 오류를 받게 됩니다.
2. 기존 백엔드 서비스는 코드 변경 없이 보호됩니다
NGINX를 사용하면 기존의 백엔드 서비스에 별다른 코드 변경 없이 액세스 토큰으로 보호를 추가할 수 있습니다.
auth_request 모듈을 통해 액세스 토큰 검증을 NGINX에서 처리함으로써,
기존 백엔드는 인증 관련 로직을 신경 쓸 필요 없이 기존의 비즈니스 로직에 집중할 수 있습니다.
모든 인증 작업은 NGINX에서 중앙 집중식으로 처리되므로, 백엔드 코드의 변경 없이도 강력한 보안이 적용됩니다.
3. NGINX 인스턴스만 IdP에 등록하면 됩니다
보안 인증을 위한 Identity Provider(IdP) 등록은 단 한 번만 수행하면 됩니다.
즉, NGINX만 IdP에 등록하면 각 백엔드 서비스가 개별적으로 등록하거나 인증을 처리할 필요가 없습니다.
NGINX는 중앙 인증 지점 역할을 하며, 백엔드 서비스는 NGINX의 검증을 신뢰하게 됩니다.
이로 인해 인증 관리가 간소화되고, 인증 프로세스의 일관성도 유지됩니다.
4. 누락되거나 잘못된 토큰에 대한 일관된 오류 처리
토큰이 누락되었거나 잘못된 경우, NGINX는 일관된 오류 처리를 제공합니다.
auth_request 모듈은 인증 요청을 처리하고, 인증 실패 시 HTTP 상태 코드(예: 401 Unauthorized)를 반환합니다.
이러한 오류 처리는 모든 백엔드 서비스에서 일관되게 동작하며,
개발자는 각 서비스에서 발생할 수 있는 다양한 오류를 따로 처리할 필요 없이 공통된 오류 처리 로직을 사용할 수 있습니다.
NGINX auth_request 모듈 사용 예시
다음은 NGINX에서 auth_request 모듈을 사용하여 액세스 토큰을 검증하는 설정 예시입니다.
NGINX가 하나 이상의 애플리케이션에 대한 역방향 프록시 역할을 하므로,
auth_request모듈을 사용하여 백엔드로 요청을 프록시하기 전에 IdP에 대한 API 호출을 트리거할 수 있습니다.
잠시 후에 살펴보겠지만, 다음 솔루션에는 근본적인 결함이 있지만,
모듈의 기본 작동을 소개하는데 auth_request, 이는 이후 섹션에서 자세히 설명하겠습니다.
1 | server { |
2 | listen 80; |
3 | |
4 | location / { |
5 | auth_request /_oauth2_token_introspection; |
6 | proxy_pass http://my_backend; |
7 | } |
8 | |
9 | location = /_oauth2_token_introspection { |
10 | internal; |
11 | proxy_method POST; |
12 | proxy_set_header Authorization "bearer SecretForOAuthServer"; |
13 | proxy_set_header Content-Type "application/x-www-form-urlencoded"; |
14 | proxy_set_body "token=$http_apikey&token_hint=access_token"; |
15 | proxy_pass https://idp.example.com/oauth/token; |
16 | } |
17 | } |
지시문 auth_request(5행)은 API 호출을 처리할 위치를 지정합니다.
백엔드(6행)로의 프록시는 응답이 auth_request성공한 경우에만 발생합니다.
auth_request위치는 9행에서 정의됩니다. 외부 클라이언트가 직접 액세스하지 못하도록 표시되어 있습니다 internal.
11-14행은 토큰 인트로스펙션 요청 형식을 준수하도록 요청의 다양한 속성을 정의합니다.
인트로스펙션 요청에서 전송된 액세스 토큰은 14행에 정의된 본문의 구성 요소입니다.
여기서는 token=$http_apikey클라이언트가 apikey요청 헤더에서 액세스 토큰을 제공해야 함을 나타냅니다.
물론 액세스 토큰은 요청의 모든 속성에서 제공될 수 있으며, 이 경우 다른 NGINX 변수를 사용합니다.
언급했듯이, auth_request이런 방식으로 모듈을 사용하는 것은 완전한 해결책이 아닙니다.
auth_request모듈은 HTTP 상태 코드를 사용하여 성공( =좋음,  =나쁨)을 결정합니다.
그러나 OAuth 2.0 토큰 인트로스펙션 응답은 JSON 객체에서 성공 또는 실패를 인코딩하고 두 경우 모두 HTTP 상태 코드를 반환합니다 .2xx4xx200 (OK)
우리에게 필요한 것은 IdP의 인트로스펙션 응답을 적절한 HTTP 상태 코드로 변환해주는 JSON 파서입니다.
이를 통해 모듈이 auth_request해당 응답을 올바르게 해석할 수 있습니다.
다행히도 JSON 파싱은 NGINX JavaScript 모듈(njs)에 대한 사소한 작업입니다.
따라서 토큰 인트로스펙션 요청을 수행하기 위한 블록을 정의하는 대신,
모듈에 JavaScript 함수를 호출하라고 location말합니다 .auth_request
[ 편집자 - 이 게시물은 NGINX JavaScript 모듈의 사용 사례를 탐색하는 여러 게시물 중 하나입니다.
전체 목록은 NGINX JavaScript 모듈의 사용 사례를 참조하세요 .
이 섹션의 코드는 NGINX Plus R23 이상 에서 지시어를js_import 대체하는 지시어를 사용하도록 업데이트되었습니다.
자세한 내용은 NGINX JavaScript 모듈 의 참조 문서를 참조하세요 .
예제 구성 섹션은 NGINX 구성 및 JavaScript 파일에 대한 올바른 구문을 보여줍니다. ]js_include
참고: 이 솔루션은 JavaScript 모듈을 nginx.confload_module 의 지시문 과 함께 동적 모듈로 로드해야 합니다 .
지침은 NGINX Plus 관리자 가이드 를 참조하세요 .
1 | js_import oauth2.js; # Location of JavaScript code |
2 | |
3 | server { |
4 | listen 80; |
5 | |
6 | location / { |
7 | auth_request /_oauth2_token_introspection; |
8 | proxy_pass http://my_backend; |
9 | } |
10 | |
11 | location = /_oauth2_token_introspection { |
12 | internal; |
13 | js_content oauth2.introspectAccessToken; |
14 | } |
13번째 줄의 지시문 js_content은 JavaScript 함수, 를 핸들러 introspectAccessToken로 지정합니다.
auth_request. 핸들러 함수는 oauth2.js 에 정의되어 있습니다 .
1 | function introspectAccessToken(r) { |
2 | r.subrequest("/_oauth2_send_request", |
3 | function(reply) { |
4 | if (reply.status == 200) { |
5 | var response = JSON.parse(reply.responseText); |
6 | if (response.active == true) { |
7 | r.return(204); // Token is valid, return success code |
8 | } else { |
9 | r.return(403); // Token is invalid, return forbidden code |
10 | } |
11 | } else { |
12 | r.return(401); // Unexpected response, return 'auth required' |
13 | } |
14 | } |
15 | ); |
16 | } |
17 | |
18 | export default { introspectAccessToken } |
이 함수는 아래 구성 스니펫에 정의된 다른 위치( /oauth2_send_requestintrospectAccessToken ) 에 HTTP 하위 요청(2번째 줄)을 만듭니다.
그런 다음 JavaScript 코드는 응답(5번째 줄)을 구문 분석하고 필드 값에 따라 적절한 상태 코드를 모듈 로 다시 보냅니다.
유효한(활성화된) 토큰은 HTTP (하지만 성공)를 반환하고 잘못된 토큰은 HTTP를 반환합니다.
오류 조건은 HTTP를 반환 하므로 오류와 잘못된 토큰을 구별할 수 있습니다.
auth_requestactive204 (No Content)403 (Forbidden)401 (Unauthorized)
참고: 이 코드는 개념 증명으로만 제공되며 프로덕션 품질이 아닙니다.
포괄적인 오류 처리 및 로깅이 포함된 완전한 솔루션이 아래에 제공됩니다 .
2번째 줄에 정의된 하위 요청 대상 위치는 원래 구성과 매우 유사합니다 auth_request.
16 | location /_oauth2_send_request { |
17 | internal; |
18 | proxy_method POST; |
19 | proxy_set_header Authorization "Bearer SecretForOAuthServer"; |
20 | proxy_set_header Content-Type "application/x-www-form-urlencoded"; |
21 | proxy_set_body "token=$http_apikey&token_hint=access_token"; |
22 | proxy_pass https://idp.example.com/oauth/token/introspect; |
23 | } |
OAuth 2.0 토큰 인트로스펙션 요청은 `/ _oauth2_send_request` 경로에 모든 필수 구성이 포함되어 있습니다. 주요 구성 요소로는 인증(19행), 액세스 토큰(21행), 토큰 인트로스펙션 엔드포인트의 URL(22행)이 있으며, 일반적으로 이 세 가지 항목만으로 요청을 처리할 수 있습니다.
IdP(Identity Provider)가 NGINX 인스턴스에서 토큰 인트로스펙션 요청을 수락하려면 인증이 필요합니다. OAuth 2.0 토큰 인트로스펙션 사양은 인증을 필수로 요구하지만, 특정 인증 방식을 명시하지는 않습니다. 이 예제에서는 `Authorization` 헤더에 베어러 토큰을 사용하는 방식을 적용했습니다.
구성 적용 후, NGINX는 클라이언트로부터 요청을 수신하면 이를 JavaScript 모듈로 전달하여 IdP에 토큰 인트로스펙션 요청을 전송합니다. IdP로부터 받은 응답을 검토하고, 응답 필드에서 `active` 값이 `true`일 경우 인증이 성공한 것으로 판단합니다. 이러한 접근 방식은 NGINX를 활용해 OAuth 2.0 토큰 인트로스펙션을 간결하고 효율적으로 수행할 수 있는 솔루션으로, 다른 인증 API에도 손쉽게 적용 가능합니다.
다만, 토큰 인트로스펙션의 주요 과제는 모든 HTTP 요청에 추가적인 지연 시간을 초래한다는 점입니다. 특히 IdP가 호스팅 서비스나 클라우드 기반 솔루션인 경우 이러한 지연은 심각한 성능 문제로 이어질 수 있습니다.
이를 해결하기 위해 NGINX와 NGINX Plus는 토큰 인트로스펙션 응답을 캐싱하는 기능을 제공하여 이러한 단점을 최적화할 수 있습니다. 캐싱을 통해 인증 요청으로 인한 지연 시간을 효과적으로 줄이고, 전체 시스템의 성능과 안정성을 향상시킬 수 있습니다.
OAuth 2.0 토큰 내성은 JSON/REST 엔드포인트에서 IdP에 의해 제공되므로 표준 응답은 HTTP 상태가 있는 JSON 본문입니다
200. 이 응답이 액세스 토큰과 키로 연결되면 캐시 가능성이 높아집니다.
NGINX는 액세스 토큰에 대한 인트로스펙션 응답을 캐싱할 수 있도록 구성할 수 있습니다.
이를 통해 동일한 액세스 토큰이 다시 제시될 경우,
IdP에 추가적인 API 호출을 수행하는 대신 캐시된 응답을 활용하여 요청을 처리합니다.
이러한 캐싱 방식은 후속 요청의 처리 속도를 크게 개선하여 전반적인 대기 시간을 줄이는 데 효과적입니다.
만료되거나 취소된 액세스 토큰을 수락할 위험을 줄이기 위해 캐시된 응답의 유효 기간을 세밀히 제어할 수 있습니다.
예를 들어, API 클라이언트가 짧은 시간 동안 여러 요청을 집중적으로 보내는 경우,
캐시 유효 기간을 10초로 설정하면 사용자 경험을 향상시키는 동시에 보안 리스크를 최소화할 수 있습니다.
캐싱은 적절한 저장소 구성을 통해 활성화됩니다. 이를 위해 인트로스펙션 응답을 저장할 디스크
디렉토리와 액세스 토큰 키를 관리할 공유 메모리 영역을 지정해야 합니다.
이러한 구성은 캐싱된 데이터를 효율적으로 관리하면서 성능과 안정성을 동시에 보장합니다.
1 | proxy_cache_path /var/cache/nginx/oauth keys_zone=token_responses:1m max_size=2m; |
이 proxy_cache_path지시문은 필요한 저장소를 할당합니다:
인트로스펙션 응답을 위한 /var/cache/nginx/oauth 와 키에 대한 token_responses 라는 메모리 영역입니다 .
컨텍스트에서 구성되므로 http및 블록 외부에 나타납니다 server.
캐싱 자체는 토큰 인트로스펙션 응답이 처리되는 블록 location내부에서 활성화됩니다 .location
18 | location /_oauth2_send_request { |
19 | internal; |
20 | proxy_method POST; |
21 | proxy_set_header Authorization "Bearer SecretForOAuthServer"; |
22 | proxy_set_header Content-Type "application/x-www-form-urlencoded"; |
23 | proxy_set_body "token=$http_apikey&token_hint=access_token"; |
24 | proxy_pass https://idp.example.com/oauth/token/introspect; |
25 | |
26 | proxy_cache token_responses; # Enable caching |
27 | proxy_cache_key $http_apikey; # Cache for each access token |
28 | proxy_cache_lock on; # Duplicate tokens must wait |
29 | proxy_cache_valid 200 10s; # How long to use each response |
30 | proxy_ignore_headers Cache-Control Expires Set-Cookie; |
31 | } |
캐싱은 proxy_cache 지시문(26행)을 통해 활성화됩니다. 기본적으로 NGINX는 URI에 따라 응답을 캐싱하지만,
이 경우 요청 헤더에서 제공되는 액세스 토큰(apikey)에 따라 응답을 캐싱하려고 합니다(27행).
26~28행에서는 proxy_cache_lock 지시문을 사용하여, 동일한 캐시 키에 대한 동시 요청이 있을 경우
첫 번째 요청이 캐시를 채운 후에 나머지 요청이 응답을 받을 수 있도록 대기하도록 NGINX에 지시합니다.
29행에서 proxy_cache_valid 지시문을 사용하여, 인트로스펙션 응답이 캐시될 유효 기간을 설정합니다.
이 지시문이 없으면, NGINX는 IdP에서 제공한 캐시 제어 헤더에 따라 캐시 시간을 결정합니다.
그러나 이러한 헤더는 항상 신뢰할 수 없기 때문에,
proxy_cache_valid 지시문을 통해 NGINX에 응답 캐시 방법을 명확히 지시합니다(30행).
이렇게 설정된 캐싱 기능을 통해, 액세스 토큰을 제시하는 클라이언트는 10초마다 토큰 검증을 위한 추가 요청을 하더라도,
그에 따른 지연 비용은 최소화할 수 있습니다.
최적화 2: NGINX Plus를 사용한 분산 캐싱
토큰 인트로스펙션 캐싱은 보안을 해치지 않으면서 애플리케이션 성능을 크게 개선하는 효과적인 방법입니다.
하지만, NGINX가 분산 환경(예: 여러 데이터 센터, 클라우드 플랫폼, 액티브-액티브 클러스터)에서 운영될 경우,
캐시된 토큰 인트로스펙션 응답은 요청을 처리한 NGINX 인스턴스에만 존재합니다.
NGINX Plus를 사용하면 keyval 모듈(메모리 내 키-값 저장소)을 통해 캐시된 토큰 인트로스펙션 응답을 저장할 수 있습니다.
또한, zone_sync 모듈을 사용하면 여러 NGINX Plus 인스턴스 간에 캐시된 응답을 동기화할 수 있어,
어떤 NGINX Plus 인스턴스에서 토큰 인트로스펙션 요청을 수행했는지에 관계없이 응답을 클러스터 내 모든 인스턴스에서 사용할 수 있습니다.
참고: zone_sync 모듈을 통한 런타임 상태 공유는 이 블로그의 범위를 벗어나므로, 이에 대한 자세한 사항은 NGINX Plus 관리자 가이드를 참조하세요.
NGINX Plus R18 이상에서는 keyval 모듈을 사용해 변수 값을 수정하여 키-값 저장소를 업데이트할 수 있습니다.
JavaScript 모듈은 NGINX 변수에 접근할 수 있기 때문에, 응답 처리 중에도 키-값 저장소에 인트로스펙션 응답을 채울 수 있습니다.
NGINX 파일 시스템 캐시처럼, 키-값 저장소는 저장소를 지정하여 활성화됩니다.
이 경우 액세스 토큰을 키로, 인트로스펙션 응답을 값으로 저장하는 메모리 영역을 설정하게 됩니다.
1 | keyval_zone zone=access_tokens:4m timeout=10s sync; |
2 | keyval $http_apikey $token_data zone=access_tokens; |
timeout지시문 에 대한 매개변수를 사용하여 auth_request_cache.confkeyval_zone 의 29번째 줄에서와 같이
캐시된 응답에 대해 동일한 10초 유효 기간을 지정하여 NGINX Plus 클러스터의 각 멤버가 만료 시 응답을 독립적으로 제거하도록 합니다.
2번째 줄은 각 항목에 대한 키-값 쌍을 지정합니다.
키는 요청 헤더에 제공된 액세스 토큰 이고 값은 변수에서 평가한 인트로스펙션 응답입니다 .apikey$token_data
apikey이제 요청 헤더를 포함하는 각 요청에 대해 $token_data변수는 이전 토큰 인트로스펙션 응답(있는 경우)으로 채워집니다.
따라서 JavaScript 코드를 업데이트하여 토큰 인트로스펙션 응답이 이미 있는지 확인합니다.
1 | function introspectAccessToken(r) { |
2 | if (r.variables.token_data) { |
3 | tokenResult(r); // Existing response in key-value store so do validation |
4 | } else { |
5 | r.subrequest("/_oauth2_send_request", |
6 | function(reply) { |
7 | if (reply.status == 200) { |
8 | r.variables.token_data = reply.responseText; // Create entry |
9 | tokenResult(r); // Do validation of response |
10 | } else { |
11 | r.return(401); // Unexpected response, return auth-required |
12 | } |
13 | } |
14 | ); |
15 | } |
16 | } |
2번째 줄은 이 액세스 토큰에 대한 키-값 저장소 항목이 이미 있는지 테스트합니다.
인트로스펙션 응답을 얻을 수 있는 경로가 두 가지(키-값 저장소에서 또는 인트로스펙션 응답에서) 있기 때문에
검증 논리를 다음과 같은 별도 함수로 옮깁니다 tokenResult.
18 | function tokenResult(r) { |
19 | var response = JSON.parse(r.variables.token_data); |
20 | |
21 | if (response.active) { |
22 | r.return(204); |
23 | } else { |
24 | r.return(401); |
25 | } |
26 | } |
이제 각 토큰 인트로스펙션 응답은 키-값 저장소에 저장되고 NGINX Plus 클러스터의 다른 모든 멤버에서 동기화됩니다.
다음 예는 유효한 액세스 토큰이 있는 간단한 HTTP 요청과 키-값 저장소의 내용을 표시하기 위한 NGINX Plus API에 대한 쿼리를 보여줍니다.
$ curl -IH "apikey: tQ7AfuEFvI1yI-XNPNhjT38vg_reGkpDFA" http://localhost/HTTP/1.1 200 OK
Date: Wed, 24 Apr 2019 17:41:34 GMT
Content-Type: application/json
Content-Length: 612
$ curl http://localhost/api/4/http/keyvals/access_tokens
{"tQ7AfuEFvI1yI-XNPNhjT38vg_reGkpDFA":"{\"active\":true}"}
키-값 저장소 자체는 JSON 형식을 사용하므로 토큰 내부 검사 응답에는 따옴표에 이스케이프가 자동으로 적용됩니다.
OAuth 2.0 토큰 내성의 유용한 기능은 응답에 활성 상태 외에도 토큰에 대한 정보가 포함될 수 있다는 것입니다.
이러한 정보에는 토큰 만료 날짜와 연관된 사용자의 속성(사용자 이름, 이메일 주소 등)이 포함됩니다.
토큰 속성을 사용한 토큰 내성 검사 응답
토큰 내성 검사 응답을 통해 제공되는 추가 정보는 보안과 액세스 제어에 매우 중요한 역할을 할 수 있습니다.
이 정보는 다양한 방식으로 활용될 수 있으며, 예를 들어 세분화된 액세스 제어 정책을 구현하거나,
백엔드 애플리케이션에 필요한 추가 정보를 제공하는 데 사용될 수 있습니다.
이러한 추가 정보는 auth_request 모듈을 사용하여 HTTP 응답과 함께 전달될 수 있습니다.
토큰 내성 검사 응답을 활용한 예시
auth_request 모듈은 인증 과정에서 액세스 토큰을 확인하고, 그 결과로 추가적인 정보를 HTTP 응답 헤더로 전달할 수 있습니다.
이 정보를 활용하면, 다양한 애플리케이션 레벨에서 토큰의 상태와 관련된 세부 정보를 처리하고,
액세스 제어 결정을 내리는 데 도움을 줄 수 있습니다.
주요 예시: 응답 헤더에 추가 정보 포함하기
토큰 내성 검사 후, auth_request 모듈은 성공적인 HTTP 응답
(예: 204 No Content)과 함께 토큰에 대한 추가 정보를 응답 헤더로 전달할 수 있습니다.
예를 들어, 액세스 토큰에 대한 유효성 검사 후, 응답 헤더에 다음과 같은 정보가 포함될 수 있습니다:
18 | function tokenResult(r) { |
19 | var response = JSON.parse(r.variables.token_data); |
20 | |
21 | if (response.active) { |
22 | // Convert all members of the response into response headers |
23 | for (var p in response) { |
24 | if (!response.hasOwnProperty(p)) continue; |
25 | r.log("OAuth2 Token-" + p + ": " + response[p]); |
26 | r.headersOut['Token-' + p] = response[p]; |
27 | } |
28 | r.status = 204; |
29 | r.sendHeader(); |
30 | r.finish(); |
31 | } else { |
32 | r.return(401); |
33 | } |
34 | } |
auth_request우리는 인트로스펙션 응답(23행)의 각 속성을 반복하고 응답 헤더로 모듈로 다시 보냅니다.
각 헤더 이름은 표준 응답 헤더(26행)와의 충돌을 피하기 위해 접두사로 붙습니다 Token-.
이러한 응답 헤더는 이제 NGINX 변수로 변환하여 일반 구성의 일부로 사용할 수 있습니다.
9 | location / { |
10 | auth_request /_oauth2_token_introspection; |
11 | auth_request_set $username $sent_http_token_username; |
12 | proxy_set_header X-Username $username; |
13 | proxy_pass http://my_backend; |
14 | } |
username이 예에서 속성을 새 변수로 변환합니다 $username(11번째 줄).
auth_request_set지시문을 사용하면 토큰 인트로스펙션 응답의 컨텍스트를 현재 요청의 컨텍스트로 내보낼 수 있습니다.
각 속성에 대한 응답 헤더(JavaScript 코드에서 추가됨)는 . 그런 다음 12번째 줄에는 백엔드로 프록시되는 요청 헤더로 값을 포함합니다 .
토큰 인트로스펙션 응답에서 반환된 모든 속성에 대해 이 구성을 반복할 수 있습니다.$sent_http_token_attribute$username
위에서 제시된 코드는 개념 증명(proof of concept) 수준이나 특정 사용 사례에 맞춘 사용자 정의 환경에서 잘 작동할 수 있습니다.
그러나 프로덕션 환경에서는 추가적인 고려가 필요합니다. 오류 처리, 로깅, 그리고 유연한 구성 등을 통해 시스템의 안정성을 높이고
유지보수성을 강화하는 것이 중요합니다.
GitHub의 공식 리포지토리에서는 NGINX 및 NGINX Plus에 대한 더 강력하고 세부적인 구현 예시를 찾아볼 수 있습니다.
NGINX를 사용할 때, 액세스 토큰의 인트로스펙션 응답을 디스크 캐싱 방식으로 저장하여 후속 요청 시 빠른 응답을 제공할 수 있습니다. 이 방식은 파일 시스템 캐시를 활용하여 디스크에 저장된 캐시된 응답을 참조함으로써 인트로스펙션 검사를 반복할 필요 없이 성능을 향상시킬 수 있습니다.
NGINX Plus에서는 키-값 저장소를 사용하여 액세스 토큰의 인트로스펙션 응답을 메모리 내에서 캐시할 수 있습니다. 이를 통해 응답 속도를 더욱 개선하고, 분산 캐시로 여러 NGINX Plus 인스턴스에서 인트로스펙션 응답을 공유할 수 있습니다. 이 방식은 특히 다수의 데이터 센터나 클라우드 환경에서의 배포에 적합하며, NGINX Plus의 클러스터링 기능을 활용하여 전체 시스템에서 캐시된 응답을 효율적으로 동기화할 수 있습니다.
이 블로그에서는 NGINX 모듈을 JavaScript 모듈과 함께 사용하여 클라이언트 요청에서
OAuth 2.0 토큰 인트로스펙션을 수행하는 방법을 보여주었습니다.
auth_request. 또한 캐싱으로 해당 솔루션을 확장하고 NGINX 구성에서 사용할 인트로스펙션 응답에서 속성을 추출했습니다.
또한 NGINX Plus 키-값 저장소를 NGINX Plus 인스턴스 클러스터 전반의 프로덕션 배포에 적합한,
내성 응답을 위한 분산 캐시로 사용하는 방법도 설명했습니다.
NGINX Plus로 OAuth 2.0 토큰을 직접 사용해 보세요.
오늘 무료 30일 평가판을 시작하거나 사용 사례에 대해 논의하려면 저희에게 문의하세요 .
PCI DSS 규정을 준수하는 앱 보안 솔루션: NGINX App Protect
디지털 혁신은 보안 환경에 깊은 영향을 미쳤습니다. 특히, 조직들이 비즈니스 민첩성을 극대화하기 위해 모놀리식 애플리케이션에서 클라우드 네이티브 마이크로서비스 아키텍처로 전환함에 따라 기존의 전통적인 보안 방식은 더 이상 유효하지 않게 되었습니다. 마이크로서비스 아키텍처는 여러 서비스 간 네트워크 통신을 기반으로 하여, 기존의 모놀리식 아키텍처보다 사이버 공격에 훨씬 더 취약해졌습니다. 이에 따라 조직은 보안과 민첩성 사이의 적절한 균형을 찾아야 하며, 특히 PCI DSS(결제 카드 산업 데이터 보안 표준) 규정 준수는 신용 카드 거래를 처리하는 모든 기업에게 필수적인 요소입니다.
이번 글에서는 NGINX App Protect와 같은 고급 보안 솔루션이 어떻게 PCI DSS 규정 준수를 돕고, 특히 **웹 애플리케이션 방화벽(WAF)**을 통해 웹 기반 공격을 방어하는지에 대해 설명하겠습니다.
1. PCI DSS 규정 준수는 오늘날의 최신 애플리케이션에 매우 중요합니다
**PCI DSS (Payment Card Industry Data Security Standard)**는 카드 소유자 데이터를 보호하기 위한 보안 요구 사항을 정의한 국제적인 표준입니다. 이 표준은 신용 카드 결제 처리에 관련된 모든 당사자들이 카드 소유자 데이터를 안전하게 처리하도록 요구합니다. 특히, PCI DSS 규정에서 강조하는 첫 번째 요구 사항은 **“카드 소유자 데이터를 보호하기 위해 방화벽을 설치하고 유지 보수”**하는 것입니다.
주요 요구 사항
하지만 단순히 WAF를 설치하는 것만으로는 충분하지 않습니다. 지속적으로 새로운 형태의 공격이 등장하기 때문에, 최신 애플리케이션 환경에서는 보안 정책을 지속적으로 갱신하고 업데이트하는 것이 필수적입니다.
PCI DSS 요구 사항 6.5: 방어해야 할 취약점
PCI DSS 규정에서는 WAF가 최소한 방어해야 하는 취약점을 명시하고 있습니다. 대표적으로는 다음과 같은 공격이 포함됩니다:
OWASP의 Top 10에도 다양한 보안 취약점이 포함되어 있습니다. 이를 방어하기 위해서는 WAF와 같은 보안 솔루션을 통해 실시간으로 웹 애플리케이션을 보호하고, 새로운 형태의 공격을 탐지할 수 있어야 합니다.
2. NGINX App Protect는 PCI DSS 요구 사항을 충족하거나 능가합니다
NGINX App Protect는 PCI DSS 규정 준수와 최신 보안 취약성으로부터 애플리케이션을 보호하는 데 매우 효과적인 웹 애플리케이션 방화벽(WAF) 솔루션입니다. 이 솔루션은 PCI DSS 요구 사항을 충족하거나 능가하며, 특히 신용 카드 결제와 관련된 민감한 데이터 보호와 웹 기반 공격 탐지 및 방어를 매우 효과적으로 수행합니다.
2.1. 최신 보안 위협에 대응
NGINX App Protect는 최소 2개월마다 6,000개 이상의 서명을 업데이트하여 최신의 보안 위협을 방어합니다. 이를 통해 기존 WAF보다 더 빠르고 정확하게 새로운 공격 패턴을 인식하고 차단할 수 있습니다.
2.2. 강력한 보안 성능
NGINX App Protect는 애플리케이션에 가깝게 배치되어 있어 애플리케이션 성능에 미치는 영향이 적고, 보안 정책을 빠르게 업데이트할 수 있습니다. 또한, CI/CD 파이프라인에 통합될 수 있어 보안이 자동화된 개발 환경에서 실시간으로 적용됩니다.
2.3. 통합된 보호 기능
NGINX App Protect는 다양한 공격 방식을 처리합니다:
2.4. 유연한 배포 및 확장성
NGINX App Protect는 모든 플랫폼에서 일관된 성능을 제공합니다:
2.5. 실제 환경에서의 강력한 보호
NGINX App Protect는 하이브리드 클라우드 환경에서의 보호를 극대화하며, PCI DSS 요구 사항을 완벽하게 준수할 수 있도록 돕습니다. 이 솔루션을 통해 애플리케이션이 PCI DSS 준수 상태를 유지하면서도 높은 성능과 민첩성을 제공할 수 있습니다.
결론
NGINX App Protect는 PCI DSS 요구 사항을 충족하는 웹 애플리케이션 방화벽(WAF) 솔루션으로, 최신의 사이버 공격으로부터 기업의 애플리케이션을 효과적으로 보호합니다. 마이크로서비스 아키텍처와 클라우드 네이티브 환경에서 요구되는 보안과 민첩성의 균형을 맞추는 데 있어, NGINX App Protect는 강력하고 유연한 보안 기능을 제공합니다. 30일 무료 체험을 통해 NGINX App Protect가 어떻게 PCI DSS 규정 준수 문제를 해결하는 완벽한 조합이 될 수 있는지 직접 경험해 보시기 바랍니다.
이제 NGINX App Protect를 통해 신용 카드 결제와 관련된 민감한 데이터를 보호하고, 최신 보안 위협으로부터 애플리케이션을 효과적으로 방어할 수 있습니다.
시작은 모놀리식 아키텍처였습니다.
이는 소프트웨어 개발자들에게 오랫동안 유용하게 사용되었고, 여전히 일부 사용 사례에서는 효과적입니다.
하지만 애플리케이션이 커지면서 모놀리식 구조는 개발, 보안 및 유지 관리가 어려워졌습니다.
이때 대안으로 등장한 것이 마이크로서비스입니다.
모놀리식 아키텍처가 작고 독립적인 서비스로 분해되어 각각 단일 비즈니스 기능을 수행하고,
네트워크를 통해 통신하여 애플리케이션의 전체 기능을 제공합니다.
초기에는 웹 개발자들이 SOAP을 통신 프로토콜로 사용하고 XML을 데이터 인코딩 방식으로 활용했지만,
많은 개발자들이 이 조합이 번거롭고 느리다고 느끼기 시작했습니다.
그 결과 REST 기반 아키텍처로의 전환과 함께 HTTP와 JSON의 광범위한 채택이 이루어졌습니다.
하지만 기술의 발전은 끊임없이 이루어지며, 개발자들은 SOAP과 REST의 텍스트 기반 한계를 극복할
더 나은 애플리케이션 설계 방안을 모색했습니다.
그 중 하나가 gRPC입니다. 구글이 개발한 gRPC는 방대한 독립 서비스 간의 연결을 위해 설계되었습니다.
gRPC는 프로토콜 버퍼(protobufs)를 플랫폼 및 언어에 구애받지 않는 구조화된 데이터 직렬화 메커니즘으로 사용하며,
HTTP/2를 통신 프로토콜로 채택하고 있습니다.
gRPC가 다른 API 프레임워크에 비해 유리한 점으로는 저지연 처리량, 여러 언어 지원,
컴팩트한 데이터 표현, 실시간 스트리밍 등이 있으며,
이 모든 것이 마이크로서비스 간 통신과 저전력, 저대역폭 네트워크를 통한 통신에 특히 적합합니다.
gRPC의 인기는 최근 몇 년 동안 크게 증가했습니다.
이는 더 높은 신뢰성과 확장성, 클라이언트와 서버 모두에 대한 언어 독립성을 통해
새로운 서비스를 더 빠르고 효율적으로 구축하기 쉽게 만들어주기 때문입니다.
gRPC의 이점에 대한 두드러진 예는 오픈 뱅킹으로, 오픈 소스 기술을 사용하여
API를 구축하고 제공하여 타사 개발자가 은행이나 다른 금융 기관의 고객에게 추가 서비스를 제공할 수 있도록 합니다.
오픈 뱅킹의 전체 기반은 금융 정보를 보다 효과적이고 효율적으로 제공한다는 이상에 기반을 두고 있습니다.
gRPC는 프로토콜 버퍼의 컴팩트한 형식과 HTTP/2의 멀티플렉싱으로 인해 주어진 페이로드의 전송이
REST API보다 훨씬 빠르기 때문에 이 목표를 달성하는 데 도움이 됩니다.
데이터를 수신할 때는 약 7배, 데이터를 전송할 때는 10배 더 빠릅니다.
결과적으로 금융 기관은 서비스 간 통신에 gRPC를 채택하여 서비스를 보다 빠르게 제공하고 효율성, 안정성 및 규모를 높이고 있습니다.
gRPC의 속도가 큰 이점이 되는 구체적인 사용 사례 중 하나는 고객 온보딩 프로세스로,
오픈 뱅킹에서의 성공에 가장 중요합니다.
다른 API 프레임워크를 사용하면 새 계좌를 만드는 것이 금융 기관과 고객 모두에게 번거롭고 시간이 많이 걸릴 수 있습니다.
gRPC를 사용하면 빠른 데이터 전송으로 고객이 몇 분 안에 새 계좌를 만들 수 있습니다.
이를 통해 고객 만족도가 크게 향상되고 금융 기관의 비용이 크게 감소합니다.
gRPC 표준과 프로토콜 버퍼 형식은 오픈 소스 라이브러리로 구현되어 있습니다.
프로토콜 버퍼는 사이버 공격에 대해 다른 데이터 표현 방식보다 더 안전하다고 여겨지는데,
이는 라이브러리 파서가 잘못된 요청을 거부하고 라이브러리의 동작을 더 세밀하게 검사하기 때문입니다.
하지만 gRPC에 대한 공격의 가능성은 여전히 존재합니다. 예를 들어, 파서는 다음과 같은 허점을 가지고 있습니다:
공격자는 이러한 gRPC 프로토콜의 허점을 악용하여 애플리케이션을 위협할 수 있습니다.
또한, 프로토콜 버퍼는 메시지 정의에 명시되지 않은 필드를 생성할 수 있도록 허용합니다.
이는 설계의 확장성을 보장하여 향후 메시지의 확장 버전과의 호환성을 가능하게 하지만,
동시에 공격자가 애플리케이션에서 명시적으로 허용되지 않은 필드를 요청에 포함시킬 수 있는 밀반입 공격에 취약하게 만들 수 있습니다.
NGINX App Protect는 서비스 애플리케이션에 더 가까운 최신 gRPC 기반 애플리케이션을 보호하도록 설계되었습니다.
이를 통해 AppDev, DevOps 및 DevSecOps 팀은 애플리케이션 보안을 코드로 관리하고 기본 도구를 활용할 수 있습니다.
예를 들어, NGINX App Protect는 금융 기관과 해당 서비스가 서비스 간 통신을 위해
gRPC를 구현할 때 오픈 뱅킹 표준을 준수하도록 보장합니다.
NGINX App Protect의 엔진은 와이어 요청에서 gRPC 메시지를 심층적으로 검사하고,
프로토콜 버퍼 메시지를 구문 분석하고, 모든 중첩 및 복잡한 데이터 구조를 포함하여 메시지 헤더와 페이로드에서 악성 데이터를 감지합니다.
검사는 모든 요청에 대해 수행되고 각 API 호출 매개변수에 대한 공격 탐지 메커니즘을 적용합니다.
gRPC API를 사용하면 gRPC 인터페이스를 사용하여 유형 라이브러리 파일(IDL 파일)과 프로토콜 버퍼의
proto 정의 파일에 보안 정책을 설정합니다. 업데이트된 파일이 로드되면
NGINX App Protect는 구성을 변경할 필요 없이 즉시 새 보안 정책을 적용하기 시작합니다.
gRPC proto 파일은 CI/CD 파이프라인의 일부로 자주 업데이트되므로
보안 정책을 업데이트해도 프로세스가 중단되거나 오버헤드가 추가되지 않으며
애플리케이션은 항상 최신의 가장 최신 정책으로 보호됩니다.
gRPC 기반 마이크로서비스 간의 동서 트래픽 보호뿐만 아니라,
NGINX App Protect는 공개적으로 노출된 자산 간의 남북 트래픽 또한 효과적으로 안전하게 보호합니다.
gRPC는 서비스 간 통신의 속도, 효율성 및 확장성을 극대화하지만, API 데이터(URL, 헤더 및 페이로드)와
gRPC API를 노출하는 애플리케이션 서비스에 대한 보호가 필수적입니다.
이러한 맥락에서 NGINX App Protect는 현대 애플리케이션 아키텍처에서 핵심적인 역할을 합니다.
NGINX App Protect와 gRPC에 관한 더 자세한 정보는 저희 라이트보드 비디오를 참조해 주시기 바랍니다.
NGINX App Protect를 무료로 사용해보세요!
NGINX App Protect의 gRPC 지원에 대한 자세한 내용은 문서를 참조하시기 바랍니다.
gRPC API와 함께 NGINX Plus 및 NGINX App Protect를 사용해 보려면 30일 무료 체험을 시작하거나
사용 사례에 대해 논의하려면 저희에게 문의해 주세요.
최근 몇 년 동안 API는 현대적 어플리케이션 경제를 구축하는데 있어 주요한 접근 방식이 되었습니다.
이러한 소프트웨어 인터페이스는 시스템, 애플리케이션 및 장치가 광범위한 데이터와 기능을 통신하고
공유할 수 있도록 하는 주요 방법이 되었습니다.
본질적으로 API는 정보를 위한 현대의 실크로드가 되었으며
고객에게 다양한 공급 업체의 최고 품질의 도구를 결합한 솔루션을 잠금 해제할 수 있는 힘을 제공합니다.
최근 몇 년 동안 API는 현대 애플리케이션 경제의 핵심 요소로 자리 잡았습니다.
이 소프트웨어 인터페이스는 다양한 시스템, 애플리케이션, 장치 간의 데이터와 기능 공유를 가능하게 하며,
본질적으로 현대의 실크로드 역할을 하고 있습니다.
API를 통해 고객은 여러 공급업체의 최첨단 도구를 통합한 솔루션을 활용할 수 있는 강력한 힘을 얻습니다.
MuleSoft의 연례 Connectivity Benchmark Report에 따르면, 조사에 참여한 조직의 80%가 공개 또는 비공식 API를 사용하고 있습니다.
이들 API는 생산성 향상(54%), 혁신 촉진(47%), 비용 절감(34%) 등 다양한 이점을 제공하며,
평균적으로 기업 총 수익의 31%를 차지하는 등 상당한 수익을 창출합니다.
하지만 API의 보안 문제는 여전히 해결해야 할 중요한 과제입니다.
F5 Labs의 연구에 따르면, 2020년 상반기 API 보안 사고의 발생 건수가 지난 2년 동안의 총 사고 수를 초과할 것으로 보입니다.
DevOps 팀은 인증 부족, 인증 및 권한 부여의 문제, 구성 오류 등 다양한 보안 취약점에 직면하고 있습니다.
이제 중요한 질문은 "모든 API 활동을 어떻게 보호할 것인가?"입니다.
이 블로그에서는 NGINX App Protect의 '코드로서의 보안' 접근 방식을 중심으로, API 보안에서 이 접근법이 얼마나 중요한지,
그리고 다른 보안 솔루션들과 함께 CI/CD 파이프라인에 어떻게 통합될 수 있는지를 설명하겠습니다.
ProgrammableWeb에 따르면, 현재 20,000개 이상의 비공식, 파트너, 공개 API가 사용되고 있으며,
이를 통해 우리가 일상적으로 사용하는 애플리케이션을 지원하고 있습니다.
API의 매력과 함께, API가 실행되거나 연결되는 컨테이너 기반 마이크로서비스의 장점은 직원,
전략적 및 상업적 파트너를 포함한 광범위한 사용자에게 소프트웨어 기능과 데이터를 개방할 수 있는 가능성입니다.
이러한 접근 방식은 DevOps 팀에게도 매력적이며,
특정 요구에 적합한 최상의 공급업체를 선택할 수 있는 유연성을 제공합니다.
예를 들어, 많은 기업이 개인 및 파트너 API를 활용하여 셀프 서비스 IT를 활성화하고 있습니다.
IT 자산을 검색 가능하고 재사용 가능한 형태로 만들어
조직의 구성원이 DevOps 팀의 개입 없이도 다양한 작업을 수행할 수 있게 합니다.
이러한 셀프 서비스 IT의 올바른 실행은 민첩성을 향상시키고 출시 속도를 가속화하며,
다양한 공급업체의 솔루션을 결합하여 고객 중심의 효율성과 혁신, 그리고 더 높은 마진 수익을 창출하는 데 기여합니다.
이와 같은 역동성은 개발 및 운영 측면에서도 동일하게 적용됩니다.
컨테이너화된 소프트웨어와 API를 통해 DevOps 팀은 Okta, Auth0, Microsoft와 같은 ID 및 액세스 관리(IAM) 파트너는 물론,
MuleSoft, Akana, Kong과 같은 API 수명 주기 관리 파트너와의 폭넓은 협업을 가능하게 합니다.
오늘날의 빠르게 움직이는 역동적인 CI/CD 환경에서 개발자와 DevOps 팀은 솔루션을 구현하고
소프트웨어를 빠르고 안전하게 출시하는 데 도움이 되는 애플리케이션 보안 도구를 사용하여
웹 앱과 API를 보호하는 전체적인 접근 방식이 필요합니다.
팀은 선택한 액세스 관리 및 라이프사이클 관리 파트너와 긴밀하게 통합된 상태를 유지하면서 코드를 보호해야 합니다.
오늘날의 빠르게 변화하는 CI/CD 환경에서 개발자와 DevOps 팀은
웹 애플리케이션과 API를 보호하기 위해 포괄적인 접근 방식을 필요로 합니다.
이는 솔루션을 구현하고 소프트웨어를 신속하고 안전하게 출시하는 데
도움을 주는 애플리케이션 보안 도구를 활용하는 것을 포함합니다.
또한, 팀은 선택한 액세스 관리 및 라이프사이클 관리 파트너와의 긴밀한 통합을 유지하면서 코드를 보호해야 합니다.
최근 몇 년간 DevOps가 DevSecOps로 전환되면서, 보안을 단순히 개발 후에 적용하는 것이 아니라,
소프트웨어 개발의 모든 단계에 보안을 통합하려는 노력이 증가하고 있습니다.
이는 보안이 단순히 마지막에 추가되는 것이 아니라,
소프트웨어의 모든 측면에 내재되어야 한다는 인식을 반영합니다.
이 접근 방식에는 다음과 같은 주요 관행이 포함됩니다:
1. CI/CD 파이프라인에 보안 자동화 내장
가능한 경우 보안을 CI/CD 파이프라인에 직접 통합하여 자동화합니다.
이는 개발 과정에서 실시간으로 보안 검사를 수행하고,
보안 취약점을 조기에 발견하여 해결할 수 있도록 합니다.
2. 보안을 게이트가 아닌 가드레일로 구축
보안을 단순히 접근을 허용하거나 거부하는 게이트가 아닌,
안내와 도구를 제공하는 가드레일로 구축합니다.
이를 통해 개발자와 팀이 보안 기준을 준수할 수 있도록 지원하고,
실수를 방지하며, 보안의 일관성을 유지할 수 있습니다.
3. 분산형 컨테이너화 환경에서 일관된 보안 유지
다양한 파트너와 협력하여 보안 솔루션이 분산형 컨테이너화 환경을 포함한
모든 환경에서 일관되고 중앙 집중화된 방식으로 제공되도록 하며,
셀프 서비스 기능을 통해 사용이 용이하도록 합니다.
이는 보안 솔루션이 다양한 환경에서 일관되게 적용되고 관리될 수 있도록 합니다.
"코드로서의 보안"은 새로운 소프트웨어의 모든 측면에 보안을 내장한다는 의미입니다.
즉, 마지막에 보안을 추가하는 것이 아닙니다."
F5는 앱 보안을 적응 가능하고 확장 가능하며 신뢰할 수 있게 만드는 코드형 보안 접근 방식의 주요 지지자이며,
NGINX App Protect는 이를 가능하게 하는 데 중요한 역할을 합니다.
NGINX App Protect는 API 보안을 시장을 선도하는
고급 웹 애플리케이션 방화벽(Advanced WAF) 및 봇 보호의 기본 기능과 결합하여 DevOps를 지원합니다.
NGINX App Protect를 사용하면 기본 인프라와 무관한 가벼운 소프트웨어 패키지로 애플리케이션 보안을 배포할 수 있습니다.
따라서 소프트웨어 개발자는 선언적 정책("코드로서의 보안")을 활용하여 API 게이트웨이
또는 기타 Ingress 컨트롤러로 들어오고 나가는 모든 것을 보호할 수 있습니다.
이 모델에 따라 API 자체가 기본적으로 안전하지 않더라도 NGINX App Protect를 사용한 보안은
Ingress, Kubernetes 포드 내부 또는 서비스 간에 여러 지점에 적용할 수 있습니다.
고객이 우선시하는 다른 업계 리더와 협력하고 전 세계 DevOps 팀에서 이미 사용 중인 공급업체와 제품을 수용하면서
F5와 NGINX는 전체 애플리케이션 생태계를 위한 최첨단 솔루션을 제공하기 위해 최선을 다하고 있습니다.
API가 정보 공유를 위한 새로운 실크로드가 되고 그 어느 때보다 사용자와 연결할 수 있게 되면서
NGINX App Protect가 앱과 데이터를 잠재적 위협의 전체 범위에서 방어합니다.
NGINX App Protect는 파트너 생태계와 긴밀하게 통합하는 기능을 포함하여 앱을 제공하는 방식에 맞게 설계되었습니다.
DevOps 환경에서 원활하게 작동하는 이 업계를 선도하는 솔루션은 DevOps 자동화 및 CI/CD 프로세스 전반에 걸쳐
중단 없는 보안 제어를 통합하여 앱 보안이 사후에 추가되거나 임시방편으로 포장되지 않고 처음부터 내장되도록 보장합니다.
NGINX App Protect를 직접 사용해 볼 준비가 되셨나요?
무료 30일 체험판을 시작하거나, 저희에게 연락하여 사용 사례에 대해 논의하세요.
올해 초에 NGINX Instance Manager를 출시하여
기업이 NGINX Open Source 및 NGINX Plus 인스턴스를 검색, 추적, 보안 및 구성할 수 있도록 지원했습니다.
다음 기능을 도입한 NGINX Instance Manager 버전 1.0을 발표하게 되어 기쁩니다.
NGINX 인스턴스가 많을수록 관리하기가 더 어려워질 수 있습니다.
이제 NGINX 인스턴스와 RBAC 역할에 태그를 적용하여 그룹의 모든 멤버에 대해 한 번에 조치를 취할 수 있습니다.
관리 팀(DevOps, NetOps), 목적(테스트, 샌드박스, 프로덕션), 운영 체제(CentOS, Ubuntu), NGINX 모델(NGINX Open Source, NGINX Plus) 및
환경(AWS, 온프레미스, 프라이빗 클라우드)별로 인스턴스를 분류하는 등 모든 특성에 따라 NGINX 인스턴스 또는
역할을 그룹화할 수 있습니다.
태그를 사용하면 다음과 같은 작업을 더 빠르고 쉽게 수행할 수 있습니다.
대규모 구성 관리 – 한 번에 그룹의 모든 태그가 지정된 NGINX 인스턴스에 구성을 적용하여 일관성을 보장할 수 있습니다.
다음 스크린샷에서 인스턴스는 운영 체제와 NGINX 모델에 따라 태그가 지정됩니다.
컨텍스트에서 모니터링 - Grafana 대시보드에는 쉼표로 구분된 값이 있는 태그 필드가 포함되어 있습니다.
PromQL 쿼리를 구성하여 태그로 그룹화된 메트릭을 표시할 수 있습니다.
액세스 제어 – OpenID Connect 및 JWT를 사용하여 NGINX Plus에서 권한을 구현하면 태그가 지정된 역할에 따라
사용자 액세스를 제한할 수 있습니다. 예를 들어, QA 팀 구성원이 test 태그가 지정된 NGINX 인스턴스만 관리하도록 허용할 수 있습니다 .
참고: 이 기능은 기술 미리보기로 제공됩니다. 프로덕션 환경에서 사용하는 것은 권장하지 않으며 최선의 노력으로만 지원을 제공할 수 있습니다.
스크린샷에서 Finance 역할이 있는 사용자는 Finance 태그가 지정된 NGINX 인스턴스에 대한
읽기-쓰기 액세스 권한이 부여 되고 다른 인스턴스에는 부여되지 않습니다.
마찬가지로 Finance_RO 역할이 있는 사용자는 Finance 태그가 지정된 인스턴스 에 대한 읽기 전용 액세스 권한만 부여됩니다 .
이 스크린샷에서 user1에게 Finance 역할이 할당되었습니다 (표시 이름인 Finance Read Write 로 식별 ).
NGINX는 현재 인터넷에서 1위 웹 서버 입니다 . 많은 사이트가 이에 의존하고 있기 때문에
NGINX 인스턴스에서 만료된 SSL/TLS 인증서로 인해 중단이 발생할 가능성이 있습니다.
NGINX Instance Manager 인증서 관리 인터페이스를 사용하면 만료된 인증서를 감지하고 교체하여
안전하고 중단 없는 서비스를 보장할 수 있습니다.
인증서 스캔 보고서는 만료까지 남은 일수를 지정합니다.
API를 사용하여 갱신된 인증서가 필요한 웹 서버를 쿼리하고 추적할 수 있습니다.
별도의 에이전트가 필요하지 않습니다.
인증서가 만료되었음을 확인하면 인증서를 교체할 수 있습니다.
사실, Instance Manager를 사용하여 키 파일과 JavaScript 파일,
인증서를 포함하여 NGINX 구성에서 참조된 모든 파일을 업데이트하고 교체할 수 있습니다.
스크린샷은 포트 443에서 수신 대기하고 있으며 IP 주소가 10.1.1.0/24 범위에 있는 NGINX 인스턴스의 인증서 스캔 결과를 보여줍니다.
이 스크린샷에서는 구성 편집기를 사용하여 관리되는 NGINX 인스턴스에 인증서를 업로드합니다.
30일 무료 체험판을 다운로드하거나 저희 에게 연락해 사용 사례에 대해 논의해 보세요 .
디지털 혁신이 비즈니스 잠재력을 가속화하는 반면, 안타깝게도 위협이 되는 환경도 확장되고 있습니다.
보안 팀이 증가하는 범위와 책임에 대해 적응하고 몰두하는 동안,
공격자는 이를 악용하여 재정적 이익을 위해 애플리케이션을 남용하는 방식이 그 어느 때보다 정교해지고 있습니다.
네트워크 수준에서의 기존 서비스 거부(DoS) 공격과 비교했을 때, 애플리케이션 수준( 7계층 ) DoS 공격은 크게 증가하고 있는데,
그 이유는 최신 애플리케이션 아키텍처에 맞게 설계되지 않은 기존 방어를 우회 할 수 있기 때문입니다.
공격자의 관점에서 볼 때, 레이어 7 DoS 공격에는 두 가지 주요 특징이 있습니다.
첫째, 매우 적은 자원으로도 상당한 혼란을 일으킬 수 있다는 점이고,
둘째, 탐지하기 어렵다는 점입니다.
정교한 도구를 사용하여 생성되고 정밀하게 타겟팅 된 요청으로 인해 이러한 공격은
애플리케이션 서버와 API를 방해하여 정당한 요청을 처리할 수 없게 만듭니다.
서버가 처리할 수 있는 것보다 더 많은 요청이 폭주할 경우,
서버는 정당한 요청을 드롭하거나, 응답하지 않거나,
심지어 충돌할 수도 있습니다.
기존 DoS 완화 솔루션은 최신 앱에 효과적이지 않습니다.
전통적인 DoS 완화 솔루션은 현대 애플리케이션에는 효과적이지 않습니다.
이들은 정적인 규칙 기반 보안을 제공하며,
현대 애플리케이션 환경에서의 변화와 업데이트 속도를 따라잡기 위해
지속적인 유지 관리가 필요합니다.
NGINX App Protect Denial of Service (DoS)는 NGINX Plus를 위한 새로운 경량 동적 모듈로,
최신 애플리케이션을 가장 정교한 애플리케이션 DoS 공격으로부터 보호하도록 설계되었습니다.
NGINX App Protect DoS는 애플리케이션을 중단하고 해치려는 공격을 완화하여 지속적인 성능과 수익 확보를 보장하고
경쟁이 치열한 디지털 세계에서 고객 충성도와 브랜드를 보존합니다.
NGINX App Protect DoS는 Kubernetes 클러스터를 포함한 모든 플랫폼, 아키텍처 또는 환경에서
애플리케이션 및 마이크로서비스에 가깝게 배포할 수 있습니다.
애플리케이션과 함께 확장되며 항상 높은 보안 효과를 유지합니다.
NGINX App Protect DoS는 실행 중입니다.NGINX App Protect DoS는 다양한 위치에 배포하여 애플리케이션 서비스를 보호할 수 있습니다.
NGINX App Protect DoS는 여러 정교한 공격 유형에 대한 보호 기능을 제공합니다.
1. GET플러딩 POST공격 – (HTTP와 HTTPS 모두) 공격자는 대량의 요청으로 서버나 API를 과부하시켜 실제 사용자에게 응답하지 못하게 만들려고 합니다.
2. "느린" 공격 - (HTTP와 HTTPS 모두) "느리고 낮은" 공격은 서버 리소스를 묶어서 실제 사용자의 요청을 처리하는 데 사용할 수 있는 리소스가 없습니다.두 가지 요인으로 인해 방어하기 어렵습니다.
느린 공격에는 세 가지 주요 유형이 있습니다.
인기 있는 접근 방식 중 하나는 대상 SSL/TLS 서버로 가비지 데이터를 보내는 것입니다.
유효하지 않은 메시지를 처리하는 데는 합법적인 메시지와 마찬가지로 컴퓨팅 비용이 많이 들지만 유용한 결과는 없습니다.
대부분의 방화벽은 이 경우 도움이 되지 않습니다.
유효한 SSL/TLS 핸드셰이크 패킷과 유효하지 않은 SSL/TLS 핸드셰이크 패킷을 구별할 수 없고
방화벽에서 복호화를 구현하는 데 비용이 많이 들기 때문입니다.
NGINX App Protect DoS는 SSL/TLS 서명 메커니즘을 사용하여 암호화되지 않고
SSL/TLS 핸드셰이크 프로세스 초기에 전달되는
CLIENT HELLO 메시지를 기반으로 이상 기반 탐지 및 완화를 제공하여 높은 복호화 비용을 제거합니다.
또한 SSL/TLS 서명을 모니터링 서버 상태 메커니즘과 함께 사용하면 SSL/TLS 종료 없이 DoS 보호 및 완화가 가능합니다.
이제 "DevSecOps"라는 개념은 현대 소프트웨어 개발에 종사하는 거의 모든 사람에게 친숙해졌으며,
애플리케이션 보안을 근본적으로 강화하고 DevOps와 보안 팀 간의 마찰을 완화하겠다는 약속을 담고 있습니다 .
DevSecOps 모델에서 보안은 왼쪽으로 이동하여 DevOps 개발 및 배포 프로세스에 직접 통합됩니다.
특히 보안은 CI/CD(Continuous Integration/Continuous Deployment) 파이프라인의대부분 기업은 보안 태세가 어디에 있어야 하는지 알고 있지만, 의도와 현실은 매우 다른 두 가지입니다.
Contrast Security의 2020년 DevSecOps 현황 보고서에 따르면, 조직의 99% 이상이
프로덕션에서 평균적인 애플리케이션에 최소 4개의 취약점이 있다는 것을 인정해야 하는 반면,
거의 80%가 개발 중인 애플리케이션에서 20개 이상의 취약점을 보고합니다.
따라서 GitLab의 2021년 글로벌 DevSecOps 설문 조사에서 설문 조사에 참여한 보안 팀의 70% 가 보안을 left-shift 하고
물론 대부분 기업이 단지 몇 개의 앱 때문에 이러한 장애물을 극복하는 것은 아닙니다. 여러 팀에 분산된 수백 개의 제품과 서비스를 다루며 자체 기술 스택, 툴체인, 프로세스를 실행하고 있으며, 이러한 모든 것에는 취약점으로 인해 공격에 취약성이 생기지 않도록 보장하기 위한 감사와 검사가 필요합니다.
엄연한 사실은 위에서 논의한 과제를 해결할 방법을 찾지 못한다면 관행과 프로세스를 발전시킬 수 없다는 것입니다.
더 빠르게 반복하는 것이 모든 사람에게 필요한 승리처럼 느껴질 수 있지만
DevOps를 최대한 확장하는 유일한 방법은 전체 소프트웨어 개발 라이프 사이클에서 보안을 가능한 한 마찰 없이 적응 가능하게 만드는 것입니다.
점점 더 많은 조직이 Gartner의 리드를 따라 Platform Ops 라고 부르는 접근 방식을 채택하고 있습니다.
핵심 개념은 회사 내부 팀의 요구 사항에 맞게 구축된 플랫폼을 통해 DevOps 기능을 제공하는 것입니다.
내부 플랫폼을 사용하면 중복 작업에 시간을 낭비할 가능성이 줄어들 뿐만 아니라
여러 제품 팀이 속도가 느려지지 않고 지속적이고 효과적으로 협업할 수 있습니다.
Platform Ops 모델에 따라 보안 팀은 개발 팀에 셀프 서비스, 소비형 정책을 제공합니다.
또한 보안 도구는 애플리케이션 제공 프로세스에 완전히 통합됩니다.
이런 방식으로 개발자는 지식이 풍부한 보안 전문가가 정한 모범 사례, 거버넌스 및 액세스 요구 사항을 준수하면서도 더 빠르게 배포할 수 있습니다.
애플리케이션 보안 팀의 큰 승리는 Platform Ops가 개발자가 보안을 더 이상 속도를 늦추는 방해물로 경험하지 않고,
오히려 이미 사용하는 프로세스와 도구의 통합된 부분으로 경험하는 환경을 만든다는 것입니다.
이는 앱 제공팀이 기업 전체에 더 나은 보안을 보장하는 패턴을 채택하도록 동기를 부여합니다.
NGINX에서는 웹 애플리케이션 방화벽(WAF)과 같은 도구를 제공하는 것의 중요성을 인식합니다.
이 도구는 개발 프로세스의 어느 곳에서나 보안을 제공하고 CI/CD 파이프라인과 완벽하게 통합할 수 있도록 쉽게 왼쪽으로 이동할 수 있습니다.
CPU를 독점하거나 성능을 저하시키지 않는 가벼운 솔루션도 중요합니다.
또한 보안이 관문이 아닌 가드레일일 때 개발 및 DevOps 팀이 훨씬 더 행복하다는 것을 보았습니다.
보안이 공유 셀프 서비스 플랫폼에서 강력하고 일관된 제어 및 정책을 제공할 때
개발 및 보안 팀이 최소한의 상호 작용 및 방해로 지침에 맞춰 조정하기가 더 쉬워집니다.
NGINX 애플리케이션 플랫폼이 어떻게 이러한 기능을 제공하는지 살펴보겠습니다.
NGINX App Protect WAF는 앱을 빌드하고 관리하는 모든 곳에 배포할 수 있는 가볍고 현대적인 WAF입니다. F5의 시장을 선도하는 WAF 기술을 기반으로 구축된 App Protect WAF는 클라우드, 하이브리드, 마이크로서비스 기반 컨테이너화 또는 온프레미스 등 아키텍처나 배포 환경에 관계없이 OWASP Top 10 및 기타 고급 위협으로부터 보호합니다. NGINX Plus 의 동적 모듈로 배포되는 App Protect WAF를 사용하면 보안 구성 및 정책을 자동화하여 CI/CD 파이프라인 내에서 직접 프로비저닝할 수 있습니다.
NGINX App Protect DoS는 자동화된 적응형 보호 기능을 제공하여 서비스 거부(DoS) 공격을 식별하고 방지합니다 . F5 보안 전문가의 지원을 받는 App Protect DoS는 적응형 머신 러닝과 기본 제공 이상 탐지 기능을 사용하여 애플리케이션과 마이크로서비스를 애플리케이션 계층 공격으로부터 보호합니다. 타깃 공격을 차단해야 하든 실수로 잘못된 구성으로 인해 앱 성능이 저하되는 것을 방지해야 하든 App Protect DoS는 최신 애플리케이션 아키텍처, 개발 도구 및 프레임워크에 완벽하게 통합되는 제로터치 보호 기능을 제공합니다.
Controller Application Delivery Module 용 NGINX Controller App Security<.htmla> 애드온을 사용하면 운영 및 보안 준수를 저해하지 않고도 개발자 생산성을 강화할 수 있습니다. Controller App Security는 신뢰할 수 있는 앱 보호 및 중앙 집중식 앱 계층 위협 가시성을 제공하며, 이는 다중 클라우드 환경에서 실행되는 HTTP 기반 앱 및 API에서 표준화할 수 있습니다. 또한 보안팀이 사전 승인된 가이드라인을 제공하여 개발자와 DevOps팀이 셀프 서비스 방식으로 사용하여 앱에 앱 보호를 쉽게 추가할 수 있도록 합니다.
NGINX Controller API 관리 모듈 의 고급 보안은 최신 애플리케이션에 대한 분산 API 보안을 지원합니다.
NGINX App Protect 및 NGINX Controller 와 함께 NGINX Plus 의 무료 30일 평가판을 시작하고 , 클라우드( AWS , Google Cloud Platform , Microsoft Azure )에서 제공되는 서비스를 확인하고, 강사가 진행하는 NGINX App Protect 소개 수업에 등록하세요 .
F5 NGINX에 대한 더 많은 블로그 게시물 읽기 ›
현대의 서비스 거부(DoS) 공격: 기본 보호만으로는 충분하지 않은 이유
DoS 공격의 소스가 분산되어 있어도(DDoS 공격이 됨) 네트워크 계층의 기본 볼륨 공격은 일반적으로 단일 장치나 서비스를 대상으로 하며,현대의 아키텍처에는 현대적인 보호가 필요하다
암호화는 어디에나 있으며, 기존의 DoS 보호는 대규모 복호화를 위해 설계되지 않았습니다.기본 WAF 방어와 기존 DDoS 완화에만 의존한다면 레이어 7 공격에 대한 적절한 가시성과 맥락을 확보할 수 없으며,
그 결과는 지연, 다운타임, 수익 포기, 브랜드 손상 등 막대한 피해를 초래 할 수 있습니다.
행동 분석을 통해 클라이언트 이상 징후와 서비스 상태를 지속적으로 분석하여 제로데이 DoS 공격을 탐지할 수 있습니다.
사이트 동작을 자세히 살펴보면 다음과 같은 질문에 답할 수 있습니다.
기준 트래픽 패턴과 비교할 때 비정상적인 것이 있습니까?
브라우저가 포함해야 할 정보를 누락한 요청이 있습니까?
요청에 복잡한 데이터베이스 쿼리가 포함되어 높은 CPU 사용률을 유발하고 있습니까?
NGINX App Protect DoS는 일반적인 성능과 동작에 대한 정보를 구축하여
기존 방어 수단을 회피하고 애플리케이션에 스트레스를 가하는 레이어 7 공격에 집중할 수 있습니다.
DoS 공격의 결과는 변하지 않았습니다. 느린 성능, 불만족스러운 사용자, 포기된 수익. 그러나 DoS 공격이 발생하는 방식은 매우 다를 수 있으며, 해커는 암호화와 보안 도구를 사용하여 위협을 합법적인 트래픽으로 위장할 수 있습니다.
사용자들은 아키텍처의 차이를 구별할 수는 없지만, 좋은 사이트 성능과 나쁜 사이트 성능의 차이는 구별할 수 있습니다. 공격 트래픽의 폭격은 지연을 초래해 사용자 경험을 느리게 만듭니다. 충분히 느리고, 가장 인내심 있는 사용자(그다지 많지는 않지만!)조차도 거래를 포기하고 다른 사이트로 전환합니다. 단일의 타겟팅된 요청은 지연과 서버 스트레스를 유발할 수 있으므로, 전문화된 애플리케이션 DoS 보호는 매우 중요합니다.
웹 애플리케이션 보안 솔루션은 OWASP, Automated Threats to Web Applications (웹 애플리케이션에 대한 자동화된 위협)에서 설명한 새로운 공격에 대응하기 위해 계속 발전하고 있습니다. 그러나 애플리케이션 런타임에 본질적으로 통합된 보호가 필요합니다. 동적이고 적응 가능한 보호가 필요합니다. 다른 DoS 솔루션들이 SYN 플러드와 같은 네트워크 DDoS 공격을 위해 설계되었을 수 있지만, NGINX App Protect DoS 솔루션은 애플리케이션 자원을 스트레스를 주는 레이어 7 공격에 특화되어 있습니다. WAF와 레이어 7 DoS 솔루션을 결합함으로써, 애플리케이션은 취약점 악용과 비즈니스 로직 남용 모두로부터 보호받을 수 있으며, 타협뿐만 아니라 지연, 성능 저하, 다운타임을 방지할 수 있습니다.
상거래는 이제 대부분 온라인에서 이루어집니다. 사람들도 대부분 온라인에서 활동합니다. 당신의 온라인 환경을 안전하고 보호된 장소로 만드는 것이 필요합니다. NGINX App Protect WAF와 NGINX App Protect DoS 모듈을 결합하면, 당신의 환경, 애플리케이션, 비즈니스에 적합한 강력한 보호를 제공할 수 있습니다.
위 내용과 같이 NGINX App Protect 를 활용하여 Demo 가 필요하시면 하단의 전문가에게 상담받기 버튼을 클릭해주세요
편집자 - 이 게시물은 10부작 시리즈의 일부입니다.
또한 전체 블로그 세트를 무료 전자책인 ' 테스트에서 프로덕션까지 Kubernetes 활용' 으로 다운로드할 수 있습니다 .
전체 블로그 모음을 '테스트에서 프로덕션으로: Kubernetes 활용하기'라는 무료 전자책으로도 다운로드할 수 있습니다.
Ingress 컨트롤러 선택 가이드의 첫 번째 부분에서는 요구 사항을 식별하는 방법에 대해 설명했습니다. 하지만 아직 제품을 테스트할 시점은 아닙니다!인프라와 관련하여 고려해야 할 또 다른 요소가 있습니다.인증입니다.
위 내용과 같이 NGINX Ingress Controller 및 NGINX App Protect WAF, DoS 를 활용하여 Demo 가 필요하시면 하단의 전문가에게 상담받기 버튼을 클릭해주세요
PUT 요청으로 NGINX App Protect WAF 정책을 보안 정책 엔드포인트에 전달합니다.
https://{{CONTROLLER_FQDN}}/api/v1/security/policies/{{policy}}
다음과 유사한 JSON 개체가 있습니다.
{
"metadata": {
"name": "lowriskapppolicy",
"displayName": "Low-Risk App Protect Policy",
"description": "Corporate WAF policy for internal low-risk apps",
},
"desiredState": {
"content": {
"policy": {
"name": "lowriskapppolicy",
"template": {
"name": "POLICY_TEMPLATE_NGINX_BASE"
},
"applicationLanguage": "utf-8",
"enforcementMode": "blocking",
"signatures": [
{
"signatureId": 123458888,
"enabled": false
},
{
"signatureId": 304500123,
"enabled": false
}
],
}
}
}
}}
PUT 요청을 통해 보안 전략 엔드포인트에 WAF 정책을 참조하는 보안 전략을 만듭니다.
https://{{CONTROLLER_FQDN}}/api/v1/security/strategies/{{strategy}}
다음과 유사한 JSON 개체가 있습니다.
{
"metadata": {
"name": "lowriskstrategy",
"displayName": "Low-Risk App Strategy",
"description": "Corporate strategy for internal low-risk apps",
},
"desiredState": {
"content": {
"securityPolicyRef": "/security/policies/lowriskapppolicy"
}
}
}
앱 구성 요소(예: 앱의 앱 URI)에 WAF 정책을 적용하여 앱 구성 요소 엔드포인트에 대한 PUT 또는 POST 요청으로 보안 전략을 참조합니다.
https://{{Controller_FQDN}}/api/v1/services/environments/{{env}}/apps/{{app}}/components/{{component}}
다음과 유사한 JSON 개체가 있습니다.
{ "metadata": { "name": "main" }, "desiredState": { "ingress": { "uris": { "/": { } }, . . . "security": { "strategyRef": { "ref": "/security/strategies/lowriskstrategy" }, "waf": { "isEnabled": true } }, . . . }
보안 전략 만들기 페이지에서 보안 전략을 만드세요.
NGINX App Protect WAF 정책이 이미 Controller에서 사용 가능한 경우 정책 필드의 드롭 다운 메뉴에서 선택합니다.
아직 나열되지 않은 경우 + 새로 만들기를 클릭합니다.
나타나는 보안 정책 만들기 팝업 창에서 JSON 형식의 NGINX App Protect WAF 정책이 포함된 파일을 업로드합니다.
WAF 정책을 적용할 앱의 앱 구성 요소 편집 페이지에서 연관된 보안 전략을 선택합니다.
Controller App Security의 BYO App Protect Policy 기능(Controller ADM 3.20에서 사용 가능)을 사용하면 이제 사용자 지정 NGINX App Protect WAF 정책을 사용할 수 있으므로 NGINX App Protect WAF 또는 F5 Advanced WAF를 사용하여 구축된 견고하고 일관되며 검증된 정책으로 새 앱을 더 쉽게 보호할 수 있습니다.
무엇보다도 BYO App Protect Policy와 Controller App Security를 사용하면 검증된 단일 정책을 여러 앱에 적용할 수 있어 정책 변경 프로세스가 크게 간소화되고 간소화됩니다.
위 내용과 같이 NGINX Plus / NGINX App Protect 를 활용하여 보안취약점 완화가 필요하시면 하단의 전문가에게 상담받기 버튼을 클릭해주세요