Web Application Firewallを使用するための環境の準備

Oracle Cloud InfrastructureのWeb Application Firewall (WAF)サービスを使用してアプリケーションを保護できるように環境を準備します。

始める前に

WAFポリシーを作成する前に、employee-helidon-lbロード・バランサのパブリックIPアドレスがすでにデプロイされていることを確認する必要があります。「マイクロサービス・ベースのRESTful JavaアプリケーションのOracle Cloudへのデプロイ」を参照してください。

サンプルの従業員アプリケーションのロード・バランサのEXTERNAL-IPアドレスを取得してノートします。これは、後でWAFポリシーを作成する際に必要になります。

kubectl get service employee-helidon-lb

前述のコマンドは、次のような出力を返す必要があります。

NAME                  TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)        AGE
employee-helidon-lb   LoadBalancer   10.X.X.X       132.X.X.X        80:31437/TCP   5m

Kubernetesで表示されるEXTERNAL-IPはパブリックIPアドレスと同じで、Oracle Cloud Infrastructureコンソールで「Core > Networking > Load Balancers」に移動すると表示されます。

WAFポリシーの作成

WAFを使用してアプリケーションを保護するには、最初にWAFポリシーを作成する必要があります。

  1. Oracle Cloud Infrastructureコンソールにサインインします。
  2. ナビゲーション・メニューを開きます。「ガバナンスと管理」で、「セキュリティ」に移動して「WAFポリシー」をクリックします。
    プロンプトが表示された場合は、WAFポリシーを作成するコンパートメントを選択してください。
  3. 「WAFポリシーの作成」をクリックします。
  4. 「WAFポリシーの作成」ダイアログ・ボックスで、次のようにフィールドに入力します。
    フィールド Value
    ポリシー名 従業員デモ・ポリシー
    プライマリ・ドメイン employee. example.com
    追加ドメイン 空白のまま
    搬送元名 従業員OKE Load Balancer
    URI Load Balancer EXTERNAL-IP
  5. 「WAFポリシーの作成」をクリックして、ダイアログ・ボックスを閉じます。
  6. 作成後、ポリシーのリストから従業員デモ・ポリシーの詳細をロードします。

WAFを使用したアプリケーション・トラフィックのルーティング

WAFを経由してトラフィックをルーティングするには、指定されたプライマリ・ドメインおよび追加ドメインのすべてが、WAFポリシー情報にリストされたCNAME Targetに解決される必要があります。これは、ポリシーが最初に作成されたときに通知として表示されます。

アプリケーションが実際にDNSゾーンで構成される場合は、通常、WAF_Targetを値として使用して、employee.example.comCNAMEまたはALIASレコードを作成します。

ただし、このソリューションでは、サンプルのEmployeeアプリケーションに対してexample.comホスト名を使用するため、ホストを解決するように(このマシンからアプリケーションにアクセスする)マシンを構成する必要があります。
  1. 他のコマンドで使用するWAF_TARGET環境変数を設定します。このとき、WAFポリシー詳細にリストされているCNAME Targetを変数の値として指定します。
    # Mac or Linux
    export WAF_TARGET=employee-example-com.b.waas.oci.oraclecloud.net
    # Windows
    set WAF_TARGET=employee-example-com.b.waas.oci.oraclecloud.net
  2. トラフィックがWAFを介して流れることを確認します。HTTPレスポンス・ヘッダーを調べ、次のことを期待しています。
    • Server: ZENEDGE
    • X-Cdn: Served-By-Zenedge
    curl -I-X GET http://${WAF_TARGET}/public/ -H'host: employee.example.com'
    前述のコードでは、次のような出力が返されます。
    HTTP/1.1 200 OK
    Content-Type: text/html
    Connection: keep-alive
    Server: ZENEDGE
    ETag: "1565120174000"
    X-Cache-Status: NOTCACHED
    Content-Length: 14258
    Date: Wed, 07 Aug 2019 20:22:35 GMT
    Last-Modified: Tue, 07 Aug 2019 19:36:14 GMT
    X-Zen-Fury: 1053bc526e3d722eadb457f2
  3. ブラウザにロードされたときにサンプルの従業員アプリケーションのURLを解決するようにマシンを構成します。これは、DNSをバイパスし、マシンからemployee.example.comに対するWAF IPアドレスにリクエストをルーティングするhostsファイルにエントリを作成することで行われます。
    1. $WAF_TARGETにネットワークIPアドレスを指定してください(複数存在する場合があります)。
      nslookup $WAF_TARGET
      前述のコードでは、次のような出力が返されます。
      Server:         192.168.X.X
      Address:        192.168.X.X#YY
      Non-authoritative answer:
      employee-example-com.b.waas.oci.oraclecloud.net canonical name = oci.tm.u.waas.oci.oraclecloud.net.
      oci.tm.u.waas.oci.oraclecloud.net  canonical name = us-seattle.u.waas.oci.oraclecloud.net.
      Name:   us-seattle.u.waas.oci.oraclecloud.net
      Address: 152.X.X.X
      Name:   us-seattle.u.waas.oci.oraclecloud.net
      Address: 152.X.X.Y
      Name:   us-seattle.u.waas.oci.oraclecloud.net
      Address: 152.X.X.Z
    2. 「非認証」アンサー・セクションから1つのアドレスを選択し、/etc/hostsファイルのexampleプライマリ・ドメインにhostsエントリを次のように作成します。
      # hosts file entry
      # <WAF IP Address>    <domain>  
         152.X.X.Z          employee.example.com

      いくつかのエントリがすでに存在します。予期しない動作を避けるために、これらは変更しないままにしておきます。

  4. ブラウザでhttp://<employee.example.com>/public/を開きます。

これで、アプリケーションはWAFを介して実行されます。