SaaSクラウドセキュリティネットワーク

F5 XCでのバックアップとリストア方法を試してみた

今回は、SaaS製品である F5 XC の設定内容のバックアップとリストアについて解説します。SaaS製品であっても、ベンダーに任せるだけでなく、利用者自身で設定のバックアップとリストアを行う方法をまとめました。

 クラウドサービスの普及に伴い、SaaS製品の利用がますます一般的になっています。しかし、SaaS製品の設定内容をどのようにバックアップし、必要に応じてリストアするかについては、意外と知られていないことが多いです。今回は、F5 Distributed Cloud Services(以下、F5 XC)の設定内容のバックアップとリストア方法について解説します。これにより、ベンダーに依存せず、自分自身で設定を管理する方法を学びましょう。


F5 XC とは

F5 XC は、クラウド環境でのアプリケーション配信とセキュリティを強化するソリューションです。分散型クラウドアーキテクチャを活用し、アプリケーションのパフォーマンスと可用性を向上させ、セキュリティリスクを軽減します。

  • 主な機能と利点
    • アプリケーション配信の最適化 : トラフィック管理と負荷分散で応答速度と信頼性を向上。
    • 高度なセキュリティ機能 : WAF、DDoS対策、Bot対策、API保護などでアプリケーションを保護。
    • グローバルな可用性 : 分散型クラウドインフラで高可用性とスケーラビリティを実現。

バックアップの重要性

SaaS製品の利便性は誰もが認めるところですが、その設定内容のバックアップの重要性は見過ごされがちです。なぜSaaS製品の設定バックアップが重要なのか、バックアップを怠ることのリスクをいくつか挙げてみたいと思います。

  • 設定内容のバックアップを行わないリスク
    • データの喪失 :設定ミスやシステム障害により、重要な設定の喪失
    • サービスの中断 :設定の復旧に時間がかかり、サービスの提供が一時的に停止するリスク
    • セキュリティの脆弱性 :設定が失われることで、セキュリティポリシーが適用されず、脆弱性が発生

設定バックアップは、単なる予防措置ではなく、ビジネスの継続性とセキュリティを確保するための重要な戦略的活動です。F5 XC のような重要なインフラ製品においては特に、定期的かつ確実なバックアップ体制の構築が不可欠と言えるでしょう。


バックアップとリストア

▢ F5 XC の設定情報のバックアップとリストアの方法

ここからは具体的なバックアップ方法を紹介します。

具体的には Github上に公開されているPythonスクリプトを実行することになります。

F5 XCはAPIを使用してほとんどの操作が可能です。そのため、このPythonスクリプトを使用してAPIリクエストを送り、設定情報をファイルに保存します。 バックアップとリストアは同じPythonスクリプトで、実行時のオプションによってアクションを分けて使用します。

▢ スクリプトファイルのインストール

現在の環境はLinuxサーバーで、すでに Python3 と git がインストールされています。これらがインストールされていない場合は、事前にインストールしてください(このスクリプトはWindows環境では動作しません)。

  1. GitHubのリモートリポジトリから必要なファイルをローカル環境にコピー

    git clone https://github.com/f5devcentral/f5xc-backup-restore-utils.git
  2. カレントディレクトリの移動

    cd f5xc-backup-restore-utils
  3. スクリプトファイルに実行権限を付与

    chmod +x f5xc-backup-restore.py

▢ 実行前準備

Pythonスクリプトを実行するには、まず F5 XCの「APIトークン(API Token)」と「テナント名」の2つを準備する必要があります。

このスクリプトでは、APIを使用してF5 XCの設定情報を取得します。そのため、APIトークンはF5 XCの管理コンソール(WebUI)のAdministrationパネルから発行しておいてください。テナント名は、F5 XCを利用する際にメーカーから提供されたユニークIDです。
XXXXの箇所をそれぞれの値に置き替えます。

  • 以下はコードの該当箇所の抜粋です。中段の400行目以降にあります。
    # Global Variable
    tenant_name = 'XXXXXXXXXXXXXXXXX' # Update with your tenant name - e.g. f5-apac-sp
    api_token = 'xxxxxxxxxxxxxxxxx' # Update with your API token. Refer to documentation to generate API Token.

▢ スクリプトの実行(バックアップ)

スクリプトを実行する際のオプションを指定します。主なオプションは以下になります。

  • 実行時オプション
    -a :アクション(backup or restore)の指定 ★必須オプション★
    -n :Namespaceの指定 ★必須オプション★
    -p :保存先ディレクトリ名の指定 ★必須オプション★
    -h :ヘルプ表示

  • 実行例
    この例では、アクションを「backup」、Namespaceは「naga1-namespace」、保存先ディレクトリ名を「/root/opt/test_run_result」として実行します。

    python f5xc-backup-restore.py -a backup -n naga1-namespace -p /root/opt/test_run_result
    • 実行結果例

      (画像をクリックし拡大表示してみてください)

▢ バックアップされたファイル

JSON形式で設定情報が保存されます。管理コンソール(WebUI)から取得できるJSON形式とは異なり、リストアに必要な情報のみが、JSONとして保存されています。

  • バックアップが実行されると、指定した保存先ディレクトリ内に「f5xc-backup-20240418_060145」というサブディレクトリが自動で作成されます。このサブディレクトリ名には、スクリプト実行時の日付と時刻の情報が含まれています。その配下に Namespace名のディレクトリが作成され、更にその配下に各オブジェクト種類ごとのJSONファイルが保存されます。
root@container_f5p3bk:~/opt/test_run_result# ls -laR f5xc-backup-20240418_060145/
f5xc-backup-20240418_060145/:
total 12
drwxr-xr-x 3 root root 4096  4月 18 15:01 .
drwxr-xr-x 3 root root 4096  4月 18 15:01 ..
drwxr-xr-x 2 root root 4096  4月 18 15:02 naga1-namespace

f5xc-backup-20240418_060145/naga1-namespace:
total 288
drwxr-xr-x 2 root root   4096  4月 18 15:02 .
drwxr-xr-x 3 root root   4096  4月 18 15:01 ..
-rw-r--r-- 1 root root   2142  4月 18 15:02 naga1-namespace_app_fw-app-firewall-test-jp.json
-rw-r--r-- 1 root root   1197  4月 18 15:02 naga1-namespace_app_fw-xc-naga1-app-firewall-01.json
-rw-r--r-- 1 root root   1046  4月 18 15:02 naga1-namespace_healthcheck-test-lb-01-tcp-hc.json
-rw-r--r-- 1 root root   1040  4月 18 15:02 naga1-namespace_healthcheck-xc-naga1-hc.json
-rw-r--r-- 1 root root  32591  4月 18 15:01 naga1-namespace_http_lb-xc-naga1-lb-01.json
-rw-r--r-- 1 root root  15502  4月 18 15:01 naga1-namespace_http_lb-xc-naga1-lb-02.json
-rw-r--r-- 1 root root    904  4月 18 15:02 naga1-namespace_ip_prefixset-test-jp-allow-ip.json
-rw-r--r-- 1 root root   1826  4月 18 15:01 naga1-namespace_origin_pool-app-naga1-dev-tedlab-pool.json
-rw-r--r-- 1 root root   1712  4月 18 15:01 naga1-namespace_origin_pool-dvwa-naga1-pool.json
-rw-r--r-- 1 root root   1864  4月 18 15:01 naga1-namespace_origin_pool-nginxim-naga1-dev-tedlab-net-pool.json
-rw-r--r-- 1 root root   1893  4月 18 15:01 naga1-namespace_origin_pool-test-naga1-dev-tedlab-net-pool.json
-rw-r--r-- 1 root root   1802  4月 18 15:01 naga1-namespace_origin_pool-www-naga1-dev-tedlab-net-pool.json
-rw-r--r-- 1 root root   1832  4月 18 15:02 naga1-namespace_origin_pool-xc-naga1-dev-tedlab-net-pool.json
-rw-r--r-- 1 root root   1813  4月 18 15:02 naga1-namespace_origin_pool-xc2-pool.json
-rw-r--r-- 1 root root   4163  4月 18 15:02 naga1-namespace_service_policy-except-illegal-filetype-cgi.json
-rw-r--r-- 1 root root   6993  4月 18 15:02 naga1-namespace_service_policy-only-ted-lan-allow.json
-rw-r--r-- 1 root root 152522  4月 18 15:02 naga1-namespace_service_policy-test-jp-sp.json
-rw-r--r-- 1 root root   7477  4月 18 15:02 naga1-namespace_service_policy-xc-naga1-waf-01.json
-rw-r--r-- 1 root root   4375  4月 18 15:02 naga1-namespace_service_policy-xc2-sp-01.json

 実際の運用では、このディレクトリ(「f5xc-backup-yyyymmdd_hhmmss」)を Tarなどでアーカイブし、さらにリモートサーバーで世代管理を行うことで、最低限必要なバックアップを確保することができます。

▢ バックアップ対象のオブジェクト種類

このスクリプトでバックアップおよびリストア対象となるオブジェクトは以下になります。つまり、指定したテナントに設定した全てが対象ということではありません。ここは、そういうものと理解した上での運用になります。

  • HTTP Load Balancer
  • TCP Load Balancer
  • Origin Servers and Pools
  • Health Check
  • App Firewalls with it WAF exclusion policy
  • API Definition
  • Service Policy
  • Rate Limiter Policy
  • Malicious User Policy
  • User Identification Policy
  • IP Prefix Set
  • Forward Proxy Policy
  • Alert Policy
  • Alert Receiver
  • Global Log Receiver
  • Certificate Management
  • Certificate Management Chain
  • Service Discovery

▢ スクリプトの実行(リストア)

スクリプトを実行する際のオプションを指定します。バックアップ時と同じオプションとなります。

  • 実行時オプション
    -a :アクション(backup or restore)の指定 ★必須オプション★
    -n :Namespaceの指定 ★必須オプション★
    -p :保存先ディレクトリ名の指定 ★必須オプション★
    -h :ヘルプ表示

  • 実行例
    この例では、アクションを「restore」、Namespaceは「naga1-namespace」、バックアップファイルが保存されているディレクトリ名を「/root/opt/test_run_result/f5xc-backup-20240418_085117」として実行します。

    python f5xc-backup-restore.py -a restore -n naga1-namespace -p /root/opt/test_run_result/f5xc-backup-20240418_085117
    • 実行結果例
      リストア対象のオブジェクトが既に存在している場合には、「 FAILED – status code 409 」と出力されます。

      (画像をクリックし拡大表示してみてください)

      リストアが成功したオブジェクトに対して「 DONE 」 と出力され、それ以外は FAILED となっていますが、リストアの後続の処理は継続されます。

      (画像をクリックし拡大表示してみてください)

      すべてにおいて「 DONE 」と表示されれば、すべてのオブジェクトが問題なくリストアされたことになります。

      (画像をクリックし拡大表示してみてください)

▢ リストア時の注意点

  • HTTP Load Balancersの「DNSのCNAME値」と「DNS RecordsのACMEチャレンジの値」は、リストア前とは異なる値に変更されています。そのため、リストア後は管理コンソールでそれぞれの新しい値を確認し、DNSの設定も変更する必要があります。

  • 事前にバックアップのディレクトリ名とファイル名を移行元のNamespaceから移行先のNamespaceに変更しておくことで、同一のテナント内で異なるNamespaceにリストアすることが可能です。この場合、Domainsの値はテナント内で一意である必要があるため、バックアップファイル内のDomainsの情報を変更しておく必要があります。


まとめ

これで、SaaS製品であるF5 XCの設定情報のバックアップとリストアができるようになりました。この手法はメーカーの正式なサポートを受けたものではありませんが、現時点で利用できる有効な対策です。ただし、Github上で公開されているPythonスクリプトはすべての設定情報を完全にバックアップできるわけではないため、その点を十分に理解した上で運用することが重要です。

最後に、定期的なバックアップはSaaS製品の運用におけるリスク管理の基本です。適切なバックアップとリストアの体制を整え、常に最悪の事態に備えておくことで、安心してSaaS環境を利用することができるでしょう。

この記事に関連する製品・サービス

この記事に関連する記事