Apache APISIX 与 open-appsec WAF 集成
October 21, 2024
はじめに
open-appsec WAFは、オープンソースのAPIゲートウェイであるApache APISIXとの新たな統合を発表できることを嬉しく思います。
このopen-appsecとAPI7チームの新たなコラボレーションにより、ユーザーはApache APISIXによって公開されているWeb APIやその他のWebサービスを、open-appsecの先進的な機械学習ベースの技術に基づいて、未知および既知の攻撃タイプから効果的に保護できるようになります。さらに、いくつかの強化されたセキュリティ機能も追加されます。
Apache APISIXについて
Apache APISIXは、モダンで柔軟性が高く、高性能なオープンソースのAPIゲートウェイソリューションです。マイクロサービスやクラウドネイティブアーキテクチャにおけるさまざまなユースケースを処理するために設計されています。その主な目的は、クライアントとバックエンドサービス間のAPIトラフィックを管理、保護、最適化するゲートウェイとして機能することで、API管理を容易にすることです。
APISIXのAPIゲートウェイとしてのさらなるユースケースには、ロードバランシング、レートリミット、認証、認可などがあります。トラフィック制御、動的なアップストリーム、プラグインの拡張性など、包括的な機能を提供し、開発者が特定のニーズに応じて機能をカスタマイズおよび拡張できるようにします。
-
ウェブサイト: apisix.apache.org
-
GitHub: github.com/apache/apisix
-
ドキュメント: apisix.apache.org/docs
open-appsec WAFについて
open-appsec WAFは、自動的で先制的な脅威防止を提供し、NGINXなどのリバースプロキシやAPISIXなどのAPIゲートウェイと統合します。機械学習ベースであるため、シグネチャ(または更新)を一切必要としません。これにより、真のゼロデイ攻撃に対しても自動的で最先端の脅威防止を提供し、管理者の負担と誤検知の量を大幅に削減します。
さらに、open-appsecは、AntiBot、レートリミット、スキーマ強制、Snortシグネチャサポート、カスタムルール/例外など、多くの追加セキュリティレイヤーを提供します。open-appsecは、SaaSサービスとして提供されるWeb UIを使用して中央管理することも、宣言型の設定ファイルを使用してローカルで管理することもできます。
-
ウェブサイト: www.openappsec.io
-
GitHub: github.com/openappsec
-
ドキュメント: docs.openappsec.io
-
プレイグラウンド: www.openappsec.io/playground
Apache APISIXとopen-appsecの統合
この新たな統合により、APISIXユーザーは、Web APIやWebアプリケーションを保護するための統合された最先端の機械学習ベースのWAFソリューションであるopen-appsec WAFにアクセスできるようになります。
これにより、例えばopen-appsecの無料でオープンソースの「Community Edition」を使用して、APISIX APIゲートウェイによって公開されているすべてのものに対して、既知および未知の攻撃から効果的なAIベースの保護を提供し、同時に誤検知の量を大幅に削減し、管理者を例外の作成や従来のシグネチャベースのポリシーの更新などの面倒なタスクから解放します。
この統合は、Linux、Docker、Kubernetesなど、すべての一般的なプラットフォームで利用可能です。
Linux
Linuxの「組み込み」デプロイメントの場合、open-appsecインストーラーは既存のAPISIXインストールに「open-appsecアタッチメント」モジュールを追加し、それと共に「open-appsecエージェント」をインストールします。このエージェントは、アタッチメントからトラフィックを受信し、検査し、ブロックまたは許可する結論をAPISIXまたはそれに統合されたopen-appsecアタッチメントに返します。
以下は、Linuxデプロイメントの簡単なアーキテクチャ図です。
Docker
Dockerベースのデプロイメントの場合、open-appsec WAFと統合されたAPISIXの特別なコンテナイメージが利用可能です。このイメージには既にopen-appsecアタッチメントが追加されており、APISIXゲートウェイコンテナとセキュリティ検査を行い、結論をAPISIXゲートウェイに返してトラフィックを許可またはブロックするopen-appsecエージェントの両方をデプロイするための拡張されたdocker-composeファイルも提供されます。
以下は、Dockerベースのデプロイメントの簡単なアーキテクチャ図です。
Kubernetes
Kubernetesベースのデプロイメントの場合、公式のAPISIX Helmチャートを基にしたHelmチャートが利用可能です。このチャートは、APISIXゲートウェイコンテナにopen-appsecアタッチメントを含めるように拡張されており、open-appsecエージェントもデプロイします。さらに、open-appsecをK8sのカスタムリソースを使用して宣言型の「DevOpsスタイル」で設定するオプションも提供されます。これは、open-appsecの中央管理Web UIを使用する代わりに使用できます。
以下は、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ゲートウェイで外部のWebサービスまたはWeb 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
このシミュレートされた攻撃は、open-appsecのコンテキストベースの機械学習WAFエンジンによって成功裏にブロックされます。
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を簡単に使用できるWeb UIで中央管理し、セキュリティイベントを監視することができます。詳細については、以下のopen-appsec WAFデプロイメントを中央管理する方法セクションを参照してください。
おめでとうございます! 既存のAPISIXインストールにopen-appsec WAFを追加し、APISIXゲートウェイによって公開されているWebサービスがWeb攻撃から保護されていることを確認しました。
コンテナ化プラットフォーム(Docker)でのAPISIXとopen-appsec WAFのデプロイ
Docker上でopen-appsecと統合されたAPISIXをインストールするには、以下の手順に従ってください。
上記の例とは異なり、ここではAPISIXを「スタンドアロンモード」でデプロイします。これは、設定を保持するyamlファイルを使用して宣言的に設定されるため、etcdデータベースのデプロイを必要としません。
APISIXは、すべてのデプロイメントタイプ(Linux、Dockerなど)で従来のモードとスタンドアロンモードの両方をサポートしています。
1. 前提条件
Dockerとdocker-composeツールがインストールされているLinuxプラットフォームを用意してください。
2. open-appsec用のフォルダを作成
デプロイメントに使用するディレクトリ内に、open-appsecの宣言型設定ファイルを保持するappsec-localconfig
フォルダを作成します:
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ゲートウェイコンテナによって公開されているhttpbin.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を簡単に使用できるWeb UIで中央管理し、セキュリティイベントを監視することができます。詳細については、以下のopen-appsec WAFデプロイメントを中央管理する方法セクションを参照してください。
Helmを使用してKubernetes上でAPISIXとopen-appsec WAFをデプロイ
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をこのIngressに対してアクティブにし、指定した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ゲートウェイコンテナによって公開されているhttpbin.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」に変更してください。
おめでとうございます! APISIXとopen-appsec WAFを統合してデプロイし、APISIXゲートウェイによって公開されているWebサービスが攻撃から保護されていることを確認しました。
open-appsec WAFデプロイメントを中央管理する方法
必要に応じて、open-appsec WAFデプロイメント(APISIXと統合されたもの)を中央管理するために、https://my.openappsec.ioで利用可能なopen-appsec Web UI(SaaSサービス)を使用できます。これにより、open-appsecエージェントを中央Web UIのデプロイメントプロファイルに接続することができます。
また、ローカルでデプロイメントを管理しつつ、中央Web UIプロファイルに「宣言型モード」で接続することもできます。これにより、ローカルの設定をWeb UIで(読み取り専用で)確認することができます。
open-appsecの設定に加えて、Web UIでは、デプロイされたopen-appsecエージェントのステータス、セキュリティログ、ダッシュボードなどを確認することができます。
デプロイメントを中央Web UIに接続する方法については、https://docs.openappsec.ioで利用可能なopen-appsecドキュメントを参照してください。
以下に、Web UIのスクリーンショットをいくつか示します。
まとめ
このブログでは、open-appsecがApache APISIXと統合する方法について、通常のLinuxベースのデプロイメント、コンテナ化されたデプロイメント(Docker)、およびKubernetes環境のすべてについて説明しました。
APISIXとopen-appsec WAFのデプロイメント手順に従って、SQLインジェクション攻撃をシミュレートし、open-appsecの機械学習ベースのWAF技術によって効果的に防止されることを確認しました。
さらに、open-appsecの中央Web UIに接続して管理、監視、ログ分析、レポート作成を行う利点についても説明しました。
これらの新たな統合が、APISIX APIゲートウェイとその公開されているWeb APIおよびWebアプリケーションのセキュリティを強化するために非常に役立つことを願っています。
フィードバックや質問、または技術的な課題がある場合は、ぜひお問い合わせください。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
ドキュメント: https://apisix.apache.org/docs/