[F5] Auto scaling the BIG-IP VE Web Application Firewall を試してみる
こんにちは、菊池です。
F5 BIG-IPには、Application Security Manager(ASM)のライセンスを有効化することで利用できる、WAFの機能があります。
この、WAF機能について、Auto Scalingを有効化し、BIG-IPの設定まで自動で実施してくれるCloudFormationのテンプレートが公開されています。
このテンプレートを利用することで、BIG-IPの詳しい知識がなくとも、基本的な設定が適用されたWAF環境がデプロイ可能です。
システム構成
構築する環境は以下のようなイメージになります。
- Auto ScalingによるBIG-IP VE(ASM)のEC2が起動
- 外部からのリクエストをExternal ELBが複数台のBIG-IP VEへロードバランス
- BIG-IP VEは、内部向けのInternal ELBを経由して、保護対象のWebサーバへ通信
CloudFormationのテンプレートで構成されるのは、以下のリソースです。
- BIG-IP VEインスタンス用Security Group
- BIG-IP VEインスタンス用IAMロール/IAMポリシー
- Auto Scaling起動設定
- BIG-IP VEの設定も含む
- Auto Scaling Group
- CloudWatchアラーム
- SNSトピック
- S3バケット
上記以外の、InternatGatewayやSubnetを含むVPC環境や、2つのELB、保護対象のサーバなどはあらかじめ用意しておく必要があります。
環境作成
事前準備
まずはあらかじめ必要なリソースを構築しておきます。
- VPC環境
- Internet Gateway
- インターネットに直接通信可能なPublic Subnet(Multi-AZ)
- 保護対象のサーバを配置するPrivate Subnet(Multi-AZ)
- External ELB
- SecurityGroupで外部からのHTTP/HTTPSを許可
- Internal ELB
- SecurityGroupでVPC内からのHTTPを許可
- 保護対象のサーバ
- 今回はWordPressのAMIを利用
- キーペア
次に、F5 BIG-IPのAMIを起動可能にするため、AWS Marketplaceでソフトウェア利用の同意をしておきます。
マネジメントコンソールのEC2の作成に進み、AMIの選択画面で以下のようにF5のイメージを検索します。
検索結果から、F5 WAF Solutionを見つけます。利用する帯域によってライセンスが異なりますので、今回利用する25Mbpsのものを選択し、[詳細]を開きます。
さらに、製品詳細ページに進みます。
使用するリージョン、環境を選択し、Continue。
内容を確認し、Accept Software Termsを選択します。
これで、F5 BIG-IP VEのAMIが起動可能になります。
このページからもCloudFormationスタックを起動することが可能ですが、こちらのリンクからスタックを作成した際に利用されるテンプレートが古いバージョン(2.4.0)となっていました。今回は最新を利用したいため、GitHubから直接ダウンロードしてスタックを作成します。
テンプレートの展開
テンプレートのはこちらのGitHubに公開されています。今回利用したテンプレートにはバージョン2.5.0と記載されていました。
スタックの作成を開始すると、各種パラメータの指定を求められます。
必須なパラメータは以下の通りです。
項目 | 内容 |
deploymentName | デプロイ名称 |
vpc | デプロイするVPCのID |
availabilityZones | デプロイするAZ。ap-northeast-1、ap-northeast-1cwを選択。 |
subnet | インスタンスをデプロイするサブネット。Publicサブネットを指定。 |
restrictedSrcAddress | BIG-IPインスタンスにSSHを許可するソースIP |
bigipElasticLoadBalancer | Exterlnal-ELBのELB名 |
sshKey | BIG-IPインスタンスにSSHする際のキーペア |
instanceType | BIG-IPインスタンスのインスタンスタイプ |
throughput | BIG-IPのAMIのスループット。 |
adminUsername | BIG-IPのクラスタ管理者名。デフォルトでOK。 |
managementGuiPort | 管理コンソールのポート。デフォルトでOK。 |
timezone | BIG-IPに指定するタイムゾーン |
ntpServer | BIG-IPに指定するNTPサーバ |
scalingMinSize | AutoScalingの最小サイズ |
scalingMaxSize | AutoScalingの最小サイズ |
scaleDownBytesThreshold | AutoScalingのスケールイン閾値のスループット |
scaleUpBytesThreshold | AutoScalingのスケールアウト閾値のスループット |
notificationEmail | AutoScalingイベント発生時の通知先メールアドレス |
virtualServicePort | BIG-IPのサービスポート |
applicationPort | Internal-ELBのサービスポート |
appInternalDnsName | Internal-ELBのDNS名 |
policyLevel | WAFのポリシーレベル |
必要項目を入力したら、スタックをデプロイします。
しばらく待つと、スタックの作成が完了します。
Auto Scalingグループにより、インスタンスが起動していることが確認できます。
BIG-IPの設定を確認してみます。
まずは、Webコンソールのパスワードを設定します。事前に設定したキーペアを使って、起動したインスタンスのパブリックIPにSSHで接続します。ユーザ名はadmin
です。modify auth password admin
でパスワードを変更し、save sys config
で保存します。
admin@(ip-172-16-1-xxx)(cfg-sync Standalone)(Active)(/Common)(tmos)# modify auth password admin changing password for admin new password: confirm password: admin@(ip-172-16-1-xxx)(cfg-sync Standalone)(Active)(/Common)(tmos)# save sys config Saving running configuration... /config/bigip.conf /config/bigip_base.conf /config/bigip_script.conf /config/bigip_user.conf /config/partitions/LOCAL_ONLY/bigip.conf Saving Ethernet mapping...done admin@(ip-172-16-1-xxx)(cfg-sync Standalone)(Active)(/Common)(tmos)#
変更したら、ブラウザでhttps://(パブリックIP):8443に接続ます。証明書のエラーは無視しましょう。
admin/設定したパスワードでログインできます。
[iApps] -> [Application Services] -> [Applications] -> [Components] から、設定されているコンポーネントが確認できます。また、同期設定がされているため、Auto Scalingグループ内のBIG-IPは全ての設定内容が同期されます。
External-ELB経由でサービスにアクセスすると、WordPressの初期ページも表示できました。
最後に
以上です。
テンプレートを適用することで、簡単にAuto Scalingが適用されたBIG-IP VEのWAFが構築できました。ただ、作成してみてわかりましたが、実際の運用環境に適用するに当たっては、以下のような点に注意しましょう。
- Auto Scalingのヘルスチェック条件が、ELBではなくEC2になっています。ELBのヘルスチェックNGではインスタンスのターミネート・新規ローンチは発生しません。サービスレベルでのヘルスチェックが必要であれば変更しましょう。
- BIG-IP VEのインスタンス用に作成されるSecurity Groupでは、HTTP(80)、HTTPS(443)が任意のIP(0.0.0.0/0)に対して許可されます。外部からのアクセスをELB経由に制限するなど、適切な範囲に設定しましょう。
- WAFのポリシーはあくまでデフォルト設定となりますので、アプリケーション環境に応じてポリシーを調整するのがよいでしょう。