ニフクラ ブログ

ニフクラやクラウドの技術について、エンジニアが語るブログです。

NGINX App Protect on Hatobaで実現する セキュアなサービス公開

こんにちは。F5ネットワークスジャパンの小峰と申します。
本日はこの場をお借りして、今春正式リリースしましたKubernetes Service Hatoba(以降Hatoba)上で実現するセキュアなサービス公開についてご紹介させて頂きます。

まずは皆さま、Hatobaというサービスをご存知でしょうか?
Hatobaは2019年3月にβ版がリリースされ、2021年3月に正式版としてリリースされたKubernetesクラスターを簡単に構築・管理できるマネージドサービスです。2021年7月には type: LoadBalancer の機能もリリースされ、より簡単にコンテナサービスの構築、公開ができるようになっています。

f:id:nifcloud-developers:20210913175859p:plain

昨今コンテナやKubernetes(以降k8s)を活用したサービスが増えてきていますが、Hatobaが皆さまのお役に立てるようF5も微力ながらご支援させて頂いております。これから多くの皆さまにHatobaをご利用頂きたいわけですが、今回はHatobaのk8s上で展開されるサービスに対するセキュリティについてお話しします。

k8sのセキュリティとなると様々ありますが、公式サイトでは下記のように説明されています。

f:id:nifcloud-developers:20210913201804p:plain

上記4Cの中でも今回は「Code」に着目してみましょう。公式サイトには下記のような記載があります。

f:id:nifcloud-developers:20210913202310p:plain

ニフクラやHatobaで提供されている様々なセキュリティ機能を活用するのは当然ですが、皆さまのアプリケーションコードを保護するためには皆さま自身での対策も必要になってきます。以降、どのように皆さまのサービスをセキュアに公開するか、NGINX App Protectを活用した方法について説明します。

WAFって必要?

WAFの利用を検討したことがありますでしょうか?WAFとはWeb Application Firewallの略で、SQLインジェクションやクロスサイトスクリプティングなどの脆弱性からWebサイトを守る事ができます。

Webサイトの構築に関わっていれば多くの情報漏えい事件を聞いたことがあるかと思います。アカウント情報だけでなく個人を特定できるような名前や住所、さらにはクレジットカード情報を盗まれてしまい実被害が発生してしまった、という例も少なくありません。
一度情報漏えい事件が発生してしまうと、企業に与えるダメージは甚大なものになります。サービスの停止や売上損失の拡大だけでなく、ブランドイメージを大きく損なう事になってしまいます。

「今まで攻撃を受けたこと無いし、まだWAFはいらないかな・・・」というコメントを何度も聞いたことがありますが、それは単に運が良いだけです。

皆さまの大事なWebサイトを運任せで運用してよいのでしょうか😨😨😨

f:id:nifcloud-developers:20210913202708p:plain

・・・と、よくあるホラーストーリーはここまでにします。WAFがあった方が良いのは当然ですが、コストもかかります。コストをかけて守るべき情報を管理しているか、攻撃を受けた際に被る被害(ブランドイメージの棄損などの二次災害を含む)とWAFのコストを比較検討しているか、充分に検討して頂きWAFの利用をご検討ください。

また、いざWAFを使うとなると「攻撃の監視」「セキュリティポリシーのチューニング」など、運用がそこそこ大変になるイメージがあるかと思います。今回は皆さまのWAF検討のお役に立てるよう、その辺りも説明します。

慣れ親しんだNGINX

「NGINX」はご存知でしょうか?以前はApacheやIISが主流であったWebサーバですが、今は下記のとおりNGINXがトップシェアとなっています。皆さまの多くはさわってみたことがあるのではないでしょうか。

NGINXはWebサーバとしてだけではなく、ロードバランサーとして、WAFとしても使うことができ、もちろんk8s上でも動作します。今回メインとなる k8s Ingress Controller としても非常に多くのユーザにご利用頂いています。

またNGINXは、オープンソースのコミュニティ版(無償)とNGINX Plusという有償版を提供しており、HA機能やActive Health Check機能、無停止デプロイ、OpenIDConnect連携など有償版にしかない機能が多くあります。今回説明する WAF機能(NGINX App Protect)も有償版の機能となっています。
「自社のエンジニアが必要な機能をNGINX上で開発していたが、開発チームの維持や運用コスト、脆弱性などへのセキュリティレベルの維持を考えると有償版のNGINX Plusの方がコストメリットがあった。」
というケースも多く、ぜひ一度有償版のNGINXをご検討してみてください。

NGINX App Protect(有償版のWAF)

さて、今回のメインの NGINX App Protect ですが NGINX 上で動作する WAFであり、F5 BIG-IPのWAFエンジンが移植されたモジュールです。そのため機能としては非常に高機能であり「かゆいとろに手が届く」WAFとなっています。

このNGINX App ProtectがHatobaのk8s上でどのように動作するのか見ていきましょう。

f:id:nifcloud-developers:20210913203021p:plain

k8s上で展開されるサービス構成の多くは上記のようにIngress Controllerがあり、各Serviceがあり、その中にPodが複数起動していて・・、という構成かと思います。この構成でWAFを導入する場合、App Protectが組み込まれたNGINX Ingress Controllerを利用するだけでよく、構成を変更する必要がありません。

Hatobaでの構築方法について手順書としてまとめましたので、ぜひご活用ください。

構築手順書はこちら

f:id:nifcloud-developers:20210913203140p:plain

NGINXをさわったことがある方であればお気づきになるかと思いますが、WAFを使うために独自フォーマットによる設定などはなく、NGINXのお作法にのっとった形での設定となります。WAFを使い始めるための学習コストを抑えてすぐに始めることができるため、使い始めの障壁を下げることができます。これはNGINXであるからこそのメリットだと思います。

セキュリティポリシーとチューニング

セキュリティに関しては、残念ながらWAFを入れたからそれで大丈夫、ということではありません。導入後も継続して監視やチューニングが必要です。これがWAF導入のハードルを高くしている理由の1つですが、そのハードルを低くしてくれるのがNGINX App Protectです。

まずは監視です。どのような攻撃が来ているのかを把握しないと対策を立てられません。すでに何かしらの方法・ツールでサービスの稼働状況を監視されていると思いますが、手順書ではELK(Elasticsearch、Logstash、Kibanaという3つのオープンソースプロジェクトの頭文字)を使った方法についてご紹介しています。

ELKによる監視ログの可視化

ELKによりアプリケーションのログを簡単に収集して可視化することが可能となるため、非常に多くのユーザが利用しているツールの1つですが、そのELKをそのまま攻撃の監視ツールとして利用できます。

Kibana での監視

f:id:nifcloud-developers:20210913203331p:plain
f:id:nifcloud-developers:20210913203447p:plain
f:id:nifcloud-developers:20210913203505p:plain

NGINXとELK連携では下記にテンプレートも公開しているのですぐに構築が可能です。いつものELKが使える、という方も多くいらっしゃると思いますので、監視環境の構築についてもハードルは下がるかと思います。

https://github.com/f5devcentral/f5-waf-elk-dashboards

中身についても、いつどこからどのようなリクエストが来たのか、どういう理由で、どのセキュリティポリシーでブロック(もしくはアラート)されたのか、リクエストの中身の詳細など、簡単に確認することができます。
日々監視を行い、攻撃内容をチェックし、もし誤検知が発生した場合はセキュリティポリシーのチューニングを行い、監視とチューニングを繰り返すことになります。

YAMLやJSONの設定ファイルが使える

セキュリティポリシー(シグネチャ)のチューニング方法についても手順書に掲載していますが、独自の設定ファイルのチューニング、ということではなくYAMLやJSONで記載されたセキュリティポリシーの設定であるため、エンジニアにとっても学習コストを抑えることができるのではないでしょうか。

どのようなサイトに対しても柔軟にチューニングできるようシグネチャの数は数千となるため、すべてを把握するのは困難です。まずはNGINX App Protectを有効にしただけでOWASP Top10(OWASPという団体が発行しているセキュリティレポートの1つ)対策に必要なシグネチャセットが適用されますので、手順書やマニュアルを参考にまずは始めてみてください。その他簡易に設定ができるよう、目的ごとに複数シグネチャをまとめたシグネチャセットを準備しています。

https://docs.nginx.com/nginx-app-protect/configuration/

ここまで読んで頂いて「それでもWAFの導入は面倒だ・・」と思われる方もいるかと思いますが、ここで1つ、視点を変えてWAFを考えてみたいと思います。

セキュアコーディングとしてのWAF

アプリ開発者の皆さま、セキュアコーディングは意識して行っているでしょうか?「当然です」という声が聞こえてきそうですが、一言にセキュアコーディングと言っても大変な作業なのかなと思います。私自身も20年以上開発に関わっていますので大変さは理解しているつもりです。

「セキュアコーディング」という言葉を初めて聞く方、アプリ開発者は様々なセキュリティを意識してWebアプリを開発しなければならないのです。ご参考までにIPAが発行している「 安全なウェブサイトの作り方 」を読んでみてください。
URLのデザイン、Cookieの扱い方、文字列のエスケープ処理、etc、フレームワークやモジュールの活用、コーディングなどによりしっかりと対策を行いながらの開発はとても大変な作業なのです。慣れてしまえば自然と手が動きますが、これを継承していく、またセキュリティレベルを社内で統一していくことはさらに大変な事なのです。(大変ですが、必須の作業です。)

そんなセキュアコーディングですが、「自らのセキュアコーディングのバグのせいで情報が漏洩してしまったら・・・」と考えて夜も眠れないエンジニアの方は多くいらっしゃることでしょう。。。

f:id:nifcloud-developers:20210913203825p:plain

そんな皆さまにNGINX App Protectです!

f:id:nifcloud-developers:20210913204033p:plain

WAFを導入する、ということではなく、セキュアコーディングを行うためのツール、と考えてみるといかがでしょう。慣れ親しんだNGINXであるため学習コストも低く、いつも使っているKibanaで攻撃の状況を監視できる。またNGINXであるためCI/CDサイクルに組み込むことも容易で、今の開発スタイルを大きく変える必要はない。

たしかにチューニングすべきシグネチャは多いですが、これを機にセキュリティの勉強になると考えるといかがでしょう。どういうシグネチャがあるかを知ることはどういう攻撃があるかを知ることにもなります。その対策を考えるだけでも皆さまのセキュアコーディングのスキルも上がるでしょう。

いいことばかり、とは言えませんが「引退するまで日々勉強」は我々エンジニアの使命です。逃れられません。少しでも負担を軽くするためにNGINX App Protectが皆さまのお役に立てますと幸いです。

まとめ

いかがでしたでしょうか。これからKubernetesは間違いなくスタンダードになってきます。開発スタイルも大きく変わってきます。これを機にセキュアコーディングの方法を見直してみるのも良いかもしれません。

NGINX App Protectは有償となっております。ご興味のある方はHatobaの中の人、NGINXの中の人まで、お気軽にお問い合わせください。

ニフクラ、Hatoba お問い合わせ先: お問い合わせページへ
NGINX お問い合わせ先: F5_FJcloud_Team@f5.com

構築手順書