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

F5 XC API Security のご紹介~API Protectionとは?~

F5 Distributed Cloud Services(以下、F5 XC)のAPI Protectionについてご紹介します。

みなさん、こんにちは。

東京エレクトロンデバイスでエンジニアをしているあつふみです。

本ブログは、前回のF5 XC API Security のご紹介の記事の続きになります。

前回の記事では、API SecurityとF5 XCのAPI Discoveryについて紹介しました。

今回はF5 XCのAPI Protectionについて紹介します。


F5 XCのAPI Protectionについて

前回のAPI Discoveryのブログでは、APIエンドポイントを可視化する機能についてお話をしました。

API Protectionでは、API Discoveryの機能によって自動で生成されるOpenAPIファイルを元に様々なセキュリティポリシーを書くことができます。

ちなみに、ここで言うOpenAPIファイルとは、APIが提供するエンドポイント、パラメータ、応答フォーマットなどを定義したjsonまたは、yamlファイルのことを指します。このファイルを見ることで、どのようなAPIがあり、どのようなリクエストを送信するべきかを把握することができます。OpenAPIの詳細ついては、こちらをご参照ください。

API Protectionについては文字だけだとイメージできないかと思いますので、以下の順に添って具体的に説明していきたいと思います。

    1. Open APIファイルの生成とダウンロード
    2. OpenAPIファイルを見てみる
    3. OpenAPIファイルをつかってポリシーを書いてみる
    4. テストしてみる

1.Open APIファイルの生成とダウンロード

今回はあらかじめ以下のサンプルリクエストを投げて、API通信を可視化しています。
これは、BIG-IPのVirtual Serverを作成するAPIリクエストになります。

# curl -sk -u admin:xxxx -X POST https://xxxxxxxxxxxxxxx/mgmt/tm/ltm/virtual -H “Content-Type: application/json” -d @create-vip.json

create-vip.json(body)の中身
============================
{
  “name”: “example_virtual_server”,
  “destination”: “10.0.0.10:80”,
  “mask”: “255.255.255.255”,
  “ipProtocol”: “tcp”,
  “profiles”: [
    {
      “name”: “http”
    }
  ]
}
===========================

API通信が可視化できていると、自動的に可視化した通信のOpenAPIファイルも生成されます。

グラフの右上に「Download API Spec」というボタンが出現しますので、ここをクリックすることで生成されたOpenAPIファイルをダウンロードすることができます。

 


2. OpenAPIファイルを見てみる

ダウンロードしたOpenAPIファイルを見てみたいと思います。情報量が多いので、ポイントを掻い摘んで見ていきます。

まず”post”: の下の階層にrequestBodyがあるかと思います。そこには以下のように記載されています。

=============================================
“post”: {
  “description”: “Swagger auto-generated from learnt schema”,
  <省略>>
  “requestBody”: {
    “content”: {
      “application/json”: {
        “schema”: {
          “properties”: {
            “destination”: {
            “description”: “IPv4 Address”,
            “pattern”: “(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)”,
            “type”: “string”,
=============================================

これは、APIリクエストのbody部分(create-vip.json)の「destination”: “10.0.0.10:80″,」をF5 XCがOpenAPIのファイルとして生成した箇所になります。同じように「”mask”: “255.255.255.255”,」の部分も以下のように定義ファイルに記載されていることが分かると思います。

=============================================
mask“: {

  “description”: “IPv4 Address”,
  “pattern”: “(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)”,
  “type”: “string”,
=============================================

また、生成されたOpenAPIファイルには、以下のような記載があります。
=============================================
required“: [

  “profiles”,
  “name”,
  “destination”,
  “ipProtocol”,
  “mask”
]
=============================================

この記載から、create-vip.jsonにあったprofiles~maskまでの要素はリクエストBodyには必須と定義されていることが分かります。

以上のことから、F5XCはAPIリクエストの中身から、OpenAPIファイルを生成していることが分かると思います。


3. OpenAPIファイルを使ってポリシーを書いてみる

ここまでで、可視化した通信をOpenAPIファイルとして生成されるところまで確認できたと思います。
今度はこのOpen APIファイルを使ってセキュリティポリシーを書いてみたいと思います。

細かい手順は割愛しますが、非常に簡単です。

まずは、以下の通りHTTP LoadBalancerの設定画面で、API DefinitionをEnableにし、一つ下の階層のAPI Definitionのところで、ダウンロードしたOpenAPIファイルをUploadします。そして、ValidationをAll Endpointに設定し、ViewConfigrationをクリックします。

あとは、View Configrationで、「Request Validation Enforcement Type」で、reportかBlockを選択するだけです。まずはBlockを選択してみます。

これで大まかなポリシーができました。

一旦この設定について解説します。この設定は以下のようなポリシーになっています。

  • OpenAPIファイルに定義されたAPIのリクエストのみを許可する
  • 上述以外はすべてBlockする

このポリシーにすることで、企業が把握または許可しているAPI通信のみを通すという非常に強力なセキュリティポリシーを適用できます。今回は、F5XCで学習したOpenAPIファイルを利用していますが、OpenAPIのフォーマット沿っているファイルであれば自分で作成したOpenAPIファイルも利用することができます。


4. テストしてみる

それでは試しに、OpenAPIの定義ファイルに準拠していないリクエストを投げてみたいと思います。

アップロードしたOpenAPIファイルには、以下のようにいくつかの要素がrequiredとなっていたので、リクエストBodyのmaskを編集(削除)して、リクエストを投げてみたいと思います。

=============================================
required“: [

  “profiles”,
  “name”,
  “destination”,
  “ipProtocol”,
  “mask”
]
=============================================

edit-create-vip.jsonの中身
======================================
{
  “name”: “example_virtual_server”,
  “destination”: “10.0.0.10:80”,
  “mask”: “255.255.255.255”, –>ここの行を削除
  “ipProtocol”: “tcp”,
  “profiles”: [
    {
      “name”: “http”
    }
  ]
}
======================================

通常であれば、”mask”部分を削除していても本リクエストは通るのですが、今回は以下のように403が返ってきています。

 
# curl -sk -u admin:xxxxxx -X POST https://xxxxxx/mgmt/tm/ltm/virtual -H “Content-Type: application/json” -d @edit-create-vip.json
 
<html><head><title>Error Page</title></head>
<body>The requested URL was rejected. Please consult with your administrator.<br/><br/>
Your support ID is 6648de58-40cf-46a9-a15d-a9fa868ae4ff<h2>Error 403 – Forbidden</h2>F5 site: ty8-tky<br/><br/><a href=’javascript:history.back();’>[Go Back]</a></body></html>

これは、OpenAPIのファイルで、Body部分にはmask がrequiredと定義されているのに対して、Bodyにmaskが含まれていなかったためです。
F5XCのSecurity Dashboardを見ると、Block理由を見ることができますので、こちらも見てみます。
やはり同様の理由でBlockされていることが分かります。

 


以上でAPI Securityは終わりになります。いかがでしたでしょうか。

F5 XCのAPI Securityには、他にも細かい機能がたくさんありますので、気になった方はぜひお問い合わせください。

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

この記事に関連する記事