Apache APISIX와 open-appsec WAF 통합
October 21, 2024
소개
open-appsec WAF는 오픈소스 API 게이트웨이인 Apache APISIX와의 새로운 통합을 발표하게 되어 기쁩니다.
이번 open-appsec과 API7 팀 간의 새로운 협력을 통해 사용자들은 Apache APISIX를 통해 노출된 웹 API 및 기타 웹 서비스를 open-appsec의 고급 머신 러닝 기반 기술을 통해 알려진 및 알려지지 않은 공격 유형으로부터 효과적으로 보호할 수 있게 되었으며, 여러 가지 강화된 보안 기능도 추가되었습니다.
Apache APISIX 소개
Apache APISIX는 현대적이고 유연하며 고성능의 오픈소스 API 게이트웨이 솔루션으로, 마이크로서비스 및 클라우드 네이티브 아키텍처에서 다양한 사용 사례를 처리하도록 설계되었습니다. 주요 목적은 클라이언트와 백엔드 서비스 간의 API 트래픽을 관리, 보호 및 최적화하기 위한 게이트웨이 역할을 하는 것입니다.
APISIX의 추가 사용 사례로는 로드 밸런싱, 속도 제한, 인증 및 권한 부여가 있습니다. 트래픽 제어, 동적 업스트림, 플러그인 확장성과 같은 포괄적인 기능을 제공하여 개발자가 특정 요구 사항에 따라 기능을 사용자 정의하고 확장할 수 있도록 합니다.
-
웹사이트: apisix.apache.org
-
Github: github.com/apache/apisix
open-appsec WAF 소개
open-appsec WAF는 자동화된 선제적 위협 방지를 제공하며 NGINX와 같은 다양한 유형의 리버스 프록시 및 APISIX와 같은 API 게이트웨이와 통합됩니다. 이는 머신 러닝 기반으로, 시그니처(또는 업데이트)가 전혀 필요하지 않습니다. 이를 통해 진정한 제로데이 공격에 대해서도 최신의 자동화된 위협 방지를 제공할 수 있으며, 관리자의 노력과 오탐지 양을 크게 줄일 수 있습니다.
또한, open-appsec은 AntiBot, 속도 제한, 스키마 강제, snort 시그니처 지원, 사용자 정의 규칙/예외 등 많은 추가 보안 계층을 제공합니다. open-appsec은 SaaS 서비스로 제공되는 웹 UI를 통해 중앙에서 관리할 수 있으며, 선언적 구성 파일을 사용하여 로컬에서도 관리할 수 있습니다.
-
웹사이트: www.openappsec.io
-
Github: github.com/openappsec
-
플레이그라운드: www.openappsec.io/playground
Apache APISIX와 open-appsec 통합
이 새로운 통합을 통해 APISIX 사용자는 이제 웹 API 및 웹 애플리케이션을 보호하기 위해 통합된 최신 머신 러닝 기반 WAF 솔루션인 open-appsec WAF에 액세스할 수 있습니다.
이제 open-appsec의 무료 및 오픈소스 "Community Edition"을 사용하여 APISIX API 게이트웨이를 통해 노출된 모든 것에 대해 알려진 및 알려지지 않은 공격으로부터 효과적인 AI 기반 보호를 받을 수 있으며, 동시에 오탐지 양을 크게 줄여 관리자가 예외 생성, 전통적인 시그니처 기반 정책 업데이트 등의 지루한 작업에서 벗어날 수 있습니다.
이 통합은 모든 일반 플랫폼에서 사용 가능합니다: Linux, Docker, Kubernetes.
Linux
Linux "임베디드" 배포의 경우, open-appsec 설치 프로그램은 기존 APISIX 설치에 "open-appsec attachment" 모듈을 추가하고, "open-appsec agent"도 함께 설치합니다. 이 에이전트는 attachment로부터 트래픽을 받아 검사하고, APISIX 또는 open-appsec attachment에 트래픽을 차단하거나 허용하는 결론을 반환합니다.
다음은 Linux 배포를 위한 간단한 아키텍처 개요입니다.
Docker
Docker 기반 배포의 경우, open-appsec attachment가 이미 추가된 특별한 APISIX 컨테이너 이미지와, APISIX 게이트웨이 컨테이너와 보안 검사를 수행하고 APISIX 게이트웨이에 트래픽을 허용하거나 차단하는 결론을 반환하는 open-appsec Agent를 모두 배포하는 향상된 docker-compose 파일이 제공됩니다.
다음은 Docker 기반 배포를 위한 간단한 아키텍처 개요입니다.
Kubernetes
Kubernetes 기반 배포의 경우, 공식 APISIX Helm 차트를 기반으로 하고 APISIX 게이트웨이 컨테이너에 open-appsec attachment를 포함하며 open-appsec agent도 배포하는 Helm 차트가 제공됩니다. 또한, open-appsec을 K8s의 사용자 정의 리소스를 사용하여 "DevOps 스타일"로 선언적으로 구성할 수 있는 옵션도 제공됩니다.
다음은 Kubernetes 배포를 위한 간단한 아키텍처 개요입니다.
Linux에서 APISIX에 open-appsec WAF 추가
APISIX가 설치된 Linux 시스템에 open-appsec을 설치하려면 다음 단계를 따르세요.
1. 전제 조건
- Linux 플랫폼은 Ubuntu 22.04여야 합니다.
- APISIX가 설치되어 있는지 확인하세요.
지원되는 APISIX 버전 목록은 여기에서 확인할 수 있습니다: https://downloads.openappsec.io/packages/supported-apisix.txt.
APISIX가 아직 설치되지 않은 경우, 다음 명령어를 사용하여 "전통적인 모드"로 APISIX를 설치할 수 있습니다. 이 명령어를 실행하면 먼저 APISIX를 위한 etcd 데이터베이스를 설치한 후 필요한 저장소를 추가하고 APISIX를 설치 및 시작합니다.
etcd 데이터베이스 설치
ETCD_VERSION='3.5.4'
wget https://github.com/etcd-io/etcd/releases/download/v${ETCD_VERSION}/etcd-v${ETCD_VERSION}-linux-amd64.tar.gz
tar -xvf etcd-v${ETCD_VERSION}-linux-amd64.tar.gz && cd etcd-v${ETCD_VERSION}-linux-amd64
cp -a etcd etcdctl /usr/bin/
nohup etcd >/tmp/etcd.log 2>&1 &
etcd
패키지 저장소 추가 및 업데이트
apt install gnupg
echo "deb http://openresty.org/package/debian bullseye openresty" | tee /etc/apt/sources.list.d/openresty.list
wget -O - https://openresty.org/package/pubkey.gpg | apt-key add -
wget -O - http://repos.apiseven.com/pubkey.gpg | apt-key add -
echo "deb http://repos.apiseven.com/packages/debian bullseye main" | tee /etc/apt/sources.list.d/apisix.list
apt update
APISIX 설치, 초기화 및 시작
apt install apisix=3.9.1-0
apisix init
apisix start
2. open-appsec 설치 프로그램 다운로드
wget https://downloads.openappsec.io/open-appsec-install && chmod +x open-appsec-install
3. open-appsec 설치
기존 APISIX 설치와 통합하기 위해 open-appsec을 설치합니다.
--prevent
플래그는 open-appsec을 기본 정책으로 이미 방지 모드로 설정하여 설치합니다.
./open-appsec-install --auto --prevent
4. APISIX 관리 키 가져오기 및 저장
APISIX config.yaml
구성 파일에서 APISIX 관리 키를 가져와 APISIX_KEY
환경 변수에 저장합니다.
export APISIX_KEY=$(awk '/key:/{ if ($2 ~ /^edd1/) print $2 }' /usr/local/apisix/conf/config.yaml )
5. 서비스를 노출하기 위한 경로 구성
APISIX 게이트웨이에서 외부 웹 서비스 또는 웹 API를 노출하기 위한 예제 경로를 구성합니다. 이 예제에서는 httpbin.org
를 예제 백엔드로 사용합니다.
curl http://127.0.0.1:9180/apisix/admin/routes/100 -H "X-API-KEY:$APISIX_KEY" -X PUT -d '{
"methods": [
"GET"
],
"uri": "/anything",
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
}
}'
6. 검증
이 경로가 작동하는지 확인하기 위해 접근해 봅니다.
curl -s -v -G --data-urlencode email=user@domain.abc http://localhost:9080/anything
7. SQL 인젝션 공격 시뮬레이션
이제 APISIX 게이트웨이를 통해 노출된 httpbin.org
서비스에 대해 SQL 인젝션 공격을 시뮬레이션해 봅니다(아래 HTTP 요청에서 'OR '1'='1'
참조). 이제 이 공격은 open-appsec WAF에 의해 성공적으로 차단됩니다.
curl -s -v -G --data-urlencode email=user@domain.abc' OR '1'='1 http://localhost:9080/anything
8. 로그 파일 검토
방금 보낸 시뮬레이션 공격이 포함된 HTTP 요청에 대한 "prevent" 로그 파일을 확인합니다.
tail -f /var/log/nano_agent/cp-nano-http-transaction-handler.log*| grep -i user@domain.abc
또는 open-appsec-ctl
도구를 사용할 수도 있습니다:
open-appsec-ctl --view-logs | grep -i user@domain.abc
9. open-appsec에 연결하여 중앙 관리(선택 사항)
선택적으로 이제 https://my.openappsec.io에 연결하여 open-appsec을 쉽게 사용할 수 있는 웹 UI로 중앙에서 관리하고, 보안 이벤트를 모니터링할 수 있습니다. 자세한 내용은 아래 open-appsec WAF 배포를 중앙에서 관리하는 방법 섹션을 참조하세요.
축하합니다! 기존 APISIX 설치에 open-appsec WAF를 성공적으로 추가하고 APISIX 게이트웨이를 통해 노출된 웹 서비스가 이제 웹 공격으로부터 보호되고 있음을 확인했습니다.
컨테이너화된 플랫폼(Docker)에서 open-appsec WAF와 함께 APISIX 배포
Docker에서 open-appsec과 통합된 APISIX를 설치하려면 아래 단계를 따르세요.
위의 예제와 달리 여기서는 APISIX를 "독립 실행 모드"로 배포합니다. 이는 yaml 파일로 구성된 docker 볼륨 마운트를 사용하여 선언적으로 구성되므로 etcd 데이터베이스 배포가 필요하지 않습니다.
APISIX는 모든 배포 유형(Linux, Docker, …)에서 전통적 및 독립 실행 모드를 모두 지원합니다.
1. 전제 조건
Docker 및 docker-compose 도구가 설치된 Linux 플랫폼이 있는지 확인하세요.
2. open-appsec을 위한 폴더 생성
배포에 사용할 디렉토리 내에 appsec-localconfig
폴더를 생성합니다. 이 폴더는 appsec 선언적 구성 파일을 보관합니다:
mkdir ./appsec-localconfig
3. open-appsec 파일을 폴더에 다운로드
open-appsec의 초기 선언적 구성 파일을 해당 폴더에 다운로드합니다.
wget https://raw.githubusercontent.com/openappsec/openappsec/main/config/linux/latest/prevent/local_policy.yaml -O appsec-localconfig/local_policy.yaml
이 예제 선언적 구성 파일은 이미 공격을 방지하도록 설정되어 있습니다.
4. APISIX를 위한 폴더 생성
APISIX의 선언적 구성 파일을 보관할 apisix-localconfig
폴더를 생성합니다: mkdir ./apisix-localconfig
.
5. APISIX 파일을 폴더에 다운로드
배포 후 open-appsec 보호를 확인할 수 있도록 APISIX를 위한 간단한 선언적 구성 파일도 다운로드합니다.
wget https://raw.githubusercontent.com/openappsec/openappsec/main/deployment/apisix/apisix-example-config/apisix-standalone.yaml -O ./apisix-localconfig/apisix-standalone.yaml
6. docker-compose.yaml
파일 생성
아래 내용으로 docker-compose.yaml
파일을 생성합니다. 이 파일은 다음과 같이 다운로드할 수 있습니다:
wget https://raw.githubusercontent.com/openappsec/openappsec/main/deployment/apisix/docker-compose.yaml
version: "3"
services:
apisix:
container_name: apisix
image: "ghcr.io/openappsec/apisix-attachment:latest"
ipc: service:appsec-agent
restart: always
volumes:
- ./apisix-localconfig/apisix-standalone.yaml:/usr/local/apisix/conf/apisix.yaml:ro
environment:
- APISIX_STAND_ALONE=true
ports:
- "9180:9180/tcp"
- "9080:9080/tcp"
- "9091:9091/tcp"
- "9443:9443/tcp"
appsec-agent:
container_name: appsec-agent
image: 'ghcr.io/openappsec/agent:latest'
ipc: shareable
restart: unless-stopped
environment:
# 아래에 자신의 이메일을 입력하세요
- user_email=user@email.com
- registered_server="APISIX Server"
volumes:
- ./appsec-config:/etc/cp/conf
- ./appsec-data:/etc/cp/data
- ./appsec-logs:/var/log/nano_agent
- ./appsec-localconfig:/ext/appsec
command: /cp-nano-agent
7. 이메일 주소 업데이트(선택 사항)
docker-compose.yaml
파일을 편집하고 "user@email.com"을 자신의 이메일 주소로 바꾸세요. 이렇게 하면 향후 특정 배포와 관련된 문제가 발생할 경우 지원을 제공하고 open-appsec 관련 정보를 사전에 제공할 수 있습니다.
이 매개변수는 선택 사항이며 제거할 수 있습니다. 자동 이메일을 보낼 경우, 향후 유사한 커뮤니케이션을 받지 않도록 옵트아웃 옵션도 포함됩니다.
8. 모든 컨테이너 시작
docker-compose up을 실행하여 관련 컨테이너를 모두 배포합니다:
docker-compose up -d
9. 컨테이너 상태 확인
apisix-attachment
및 appsec-agent
컨테이너가 실행 중인지 확인합니다.
docker ps
10. 독립 실행 구성 검증
독립 실행 구성이 작동하는지 확인하기 위해 접근해 봅니다.
curl -s -v -G --data-urlencode email=user@domain.abc http://localhost:9080/anything
11. SQL 인젝션 공격 시뮬레이션
이제 open-appsec으로 보호되는 APISIX 게이트웨이 컨테이너를 통해 노출된 httpin.org
서비스에 대해 SQL 인젝션 공격을 시뮬레이션해 봅니다.
curl -s -v -G --data-urlencode email=user@domain.abc' OR '1'='1 http://localhost:9080/anything
12. open-appsec에 연결하여 중앙 관리(선택 사항)
선택적으로 이제 https://my.openappsec.io
에 연결하여 open-appsec을 쉽게 사용할 수 있는 웹 UI로 중앙에서 관리하고, 보안 이벤트를 모니터링할 수 있습니다. 자세한 내용은 아래 open-appsec WAF 배포를 중앙에서 관리하는 방법 섹션을 참조하세요.
Helm을 사용하여 Kubernetes에 open-appsec WAF와 함께 APISIX 배포
1. 전제 조건
Kubernetes 플랫폼과 Helm 도구가 사용 가능한지 확인하세요.
2. open-appsec 다운로드
APISIX Helm 차트를 위한 open-appsec을 여기에서 다운로드하세요.
wget https://downloads.openappsec.io/packages/helm-charts/apisix/open-appsec-k8s-apisix-latest.tgz
3. Helm 차트 설치
이 예제 helm install
명령어는 공식 APISIX Helm 차트를 기반으로 한 open-appsec for APISIX Helm 차트를 설치합니다.
이 차트는 APISIX 게이트웨이를 APISIX Ingress Controller로 배포하며, open-appsec WAF와 통합됩니다. 또한 open-appsec WAF를 위한 추가 구성 옵션도 제공합니다(Helm 차트 내부의 values.yaml
및 open-appsec 문서 참조).
배포 후, K8s ingress 리소스를 APISIX 게이트웨이에 할당하기 위해 다음 ingress 클래스를 사용하도록 구성할 수 있습니다: appsec-apisix
.
helm install open-appsec-k8s-apisix-latest.tgz \
--name-template=appsec-apisix \
--set rbac.create=true \
--set appsec.mode=standalone \
--set service.type=LoadBalancer \
--set appsec.persistence.enabled=false \
--set ingress-controller.enabled=true \
--set ingress-controller.config.ingressClass=appsec-apisix \
--set appsec.userEmail=”<your-email-address>” \
--set appsec.agentToken= \
--create-namespace \
-n appsec-apisix
위의 Helm 설치 명령어에서
를 자신의 이메일 주소로 바꾸세요. 이렇게 하면 open-appsec 관련 뉴스 및 업데이트를 보내드리고, 필요한 경우 배포를 더 잘 지원할 수 있습니다! 언제든지 구독을 취소할 수 있으며, 이메일을 제공하지 않으려면 해당 줄을 제거하세요.
4. 검증
포드가 올바르게 배포되었고 준비 상태인지 확인합니다:
kubectl get pods -n appsec-apisix
5. open-appsec 정책 리소스 생성
다음 명령어를 실행하여 K8s에 "open-appsec-best-practice-policy"를 생성합니다.
이 예제 정책은 이미 공격을 방지하도록 사전 구성되어 있습니다.
kubectl apply -f https://raw.githubusercontent.com/openappsec/openappsec/main/config/k8s/v1beta1/open-appsec-k8s-prevent-config-v1beta1.yaml
사용자 정의 정책을 생성할 수도 있습니다. 여기에서 모든 세부 사항을 확인할 수 있습니다.
6. 대상 리소스 이름 가져오기
보호하려는 관련 ingress 리소스의 이름을 찾습니다:
kubectl get ing -A
7. Ingress 리소스 편집
kubectl edit ing/<ingress name> -n <ingress namespace>
8. ingressClassname 변경
ingressClassname을 open-appsec을 사용하도록 변경합니다:
spec: ingressClassName: appsec-apisix
9. Ingress 리소스에 주석 추가
이 주석을 ingress 리소스에 추가하여 open-appsec을 활성화하고 원하는 open-appsec 정책 사용자 정의 리소스를 지정합니다.
openappsec.io/policy: open-appsec-best-practice-policy
10. 독립 실행 구성 검증
독립 실행 구성이 작동하는지 확인하기 위해 접근해 봅니다:
curl -s -v -G --data-urlencode email=user@domain.abc http://[YOUR-INGRESS-HOSTNAME]
11. SQL 인젝션 공격 시뮬레이션
이제 open-appsec으로 보호되는 APISIX 게이트웨이 컨테이너를 통해 노출된 httpin.org
서비스에 대해 SQL 인젝션 공격을 시뮬레이션해 봅니다.
curl -s -v -G --data-urlencode email=user@domain.abc' OR '1'='1 http://[YOUR-INGRESS-HOSTNAME]
위 명령어에서 [YOUR-INGRESS-HOSTNAME]을 이전 단계에서 open-appsec WAF로 보호한 ingress 리소스에 설정한 호스트 이름으로 바꾸세요. 또한 필요한 경우 "http"를 "https"로 변경하세요.
축하합니다! open-appsec WAF와 통합된 APISIX를 성공적으로 배포하고 APISIX 게이트웨이를 통해 노출된 웹 서비스가 이제 공격으로부터 보호되고 있음을 확인했습니다.
open-appsec WAF 배포를 중앙에서 관리하는 방법
원한다면 https://my.openappsec.io에서 제공되는 open-appsec 웹 UI(SaaS 서비스)를 사용하여 open-appsec WAF 배포(APISIX와 통합된)를 중앙에서 관리할 수 있습니다. open-appsec 에이전트를 중앙 웹 UI의 배포 프로필에 연결하여 관리할 수 있습니다.
또는 로컬에서 배포를 계속 관리하면서도 "선언적 모드"로 중앙 웹 UI 프로필에 연결하여 로컬 구성을 웹 UI에서 읽기 전용으로 볼 수 있습니다.
open-appsec의 구성과 함께 웹 UI를 통해 배포된 open-appsec 에이전트의 상태, 보안 로그, 대시보드 등을 볼 수 있습니다.
배포를 중앙 웹 UI에 연결하는 방법에 대한 지침은 https://docs.openappsec.io에서 확인할 수 있습니다.
아래는 웹 UI의 스크린샷입니다.
요약
이 블로그에서는 open-appsec이 일반 Linux 기반 배포, 컨테이너화된 배포(Docker), 그리고 Kubernetes 환경에서 Apache APISIX와 통합할 수 있는 방법을 설명했습니다.
open-appsec WAF와 함께 APISIX를 배포하는 단계를 따라 SQL 인젝션 공격을 시뮬레이션했으며, 이 공격은 open-appsec의 머신 러닝 기반 WAF 기술에 의해 효과적으로 방어되었습니다.
또한, open-appsec 중앙 웹 UI에 연결하여 관리, 모니터링, 로그 분석 및 보고의 이점에 대해서도 설명했습니다.
이 새로운 통합이 open-appsec 머신 러닝 기반 WAF를 통해 APISIX API 게이트웨이와 노출된 웹 API 및 웹 애플리케이션의 보안을 강화하는 데 매우 유용할 것으로 기대합니다.
피드백, 질문 또는 기술적 문제가 있을 경우 언제든지 연락 주시기 바랍니다. open-appsec 팀은 https://www.openappsec.io의 채팅을 통해 또는 이메일로 info@openappsec.io로 연락할 수 있습니다.
추가 리소스
open-appsec WAF
웹사이트: https://www.openappsec.io
GitHub: https://github.com/openappsec
문서: https://docs.openappsec.io
플레이그라운드: https://www.openappsec.io/playground
블로그: https://www.openappsec.io/blogs
Apache APISIX
웹사이트: https://apisix.apache.org
GitHub: https://github.com/apache/apisix