今回は以前のブログ『Tetrationでポリシーのコンプライアンスチェック』で取り上げたPolicy Analysis機能をOpenAPI経由で利用する方法をご紹介したいと思います。
OpenAPIを利用するにあたって必要となる準備については前回ブログ『Tetration OpenAPIで何ができる??~準備編~』をご参照ください。
以前のブログでもお話しした通りOpenAPIは機能毎にAPIエンドポイントがそれぞれ用意されています。Policy Analysis用のAPIエンドポイントは主に2つあります。
1. /live_analysis/dimensions
このエンドポイントからはAPIコールの結果として得られるフローデータのcolumnを知ることができます。methodはGETを使います。以前のブログで「ここに表示された項目はごく一部の情報で、これ以外にもホストのタグ情報など様々な項目を表示させることも可能です」と述べたのはこのdimensionsで得られるcolumnのことです。
ISEやk8sなど外部製品とのインテグレーションやユーザー独自定義によるタグ情報をどのくらい保有しているか等、環境によって数は変わりますが多い環境ですと100以上にもなります。このcolumnはAPIコールの際に特定の条件を満たすフローを抽出する為のフィルタとしても利用可能で、[‘category’]というcolumnがフィルタとして使われるケースが多いです。
[‘category’]には’Permitted’, ‘Escaped’, ‘Misdropped’, ‘Rejected’の4つのどれかが入りますので、例えば category:’Escaped’ をフィルタの条件とすることでEscapedと判定されたフローをAPIコールにより抽出することができます。この4カテゴリの詳しい説明は以前のブログをご参照ください。
2. /live_analysis/{application_id}
このエンドポイントからは上述したように抽出したい条件をフィルタで記述してPOSTすることでマッチするフローデータを得ることができます。methodはPOSTを使います。Policy Analysisはapplication毎に実施されますのでターゲットとなるapplicationの{application_id}をエンドポイントとして明示する必要があります。
ここで前回のブログでお話ししたように、’/applications’にAPIコールしてapplicationの一覧とその付随データを取得、付随データの中に’id’(application_idのこと)がありますのでチェックしたいapplicationの’id’をkeyとしてparseしてそのvalueを抽出、というステップが前段階として必要になります。
では実際にやってみましょう。
チェックしたいapplicationの’application_id’は予め’/applications’へのAPIコールにより取得しているものとします。今回はそのapplicationで’Escaped’と判定されたフローを探したいと思います。’/live_analysis/{application_id}’へのAPIコールには探したいフローの条件を記述したquery bodyが必要です。queryには最低限以下のパラメータが必要です。
・t0(開始時間)
・t1(終了時間)
・filter(マッチする条件)
以下はオプショナルですがpaginationの際には必須となるパラメータです。
・limit(1度に返ってくるフローの数)
・offset(前のレスポンスで得られる値で次のコールに必要)
例えば limit:10 としてqueryをした場合に該当フローが20フロー存在する場合は残りの10フローを次のqueryで取得する必要があります。offsetは’前回コールの続き’からフローデータを取得する際に必要なパラメータとなります。では以下のqueryを’/live_analysis/{application_id}’へPOSTしてみます。
-------------------------------------------------------------------------------------------- req_payload = { "t0": "2019-06-19T08:00:00+0000", "t1": "2019-06-19T09:00:00+0000", "limit": 10, "filter": { "type": "eq", "field": "category", "value": "escaped" } }
resp = rc.post('/live_analysis/5ce210e0497d4f4dd588fcc6', json_body=json.dumps(req_payload)) ana = resp.json() --------------------------------------------------------------------------------------------
2019年6月19日08時から2019年6月19日09時の間に発生した’Escaped’と判定されたフローを10個まで取得するAPIコールです。得られるフローデータは前述の通り非常に多くのcolumnを持っていますのでどのようなフローなのかを知るのに最低限必要なcolumnのみ(5-tupleとtimestamp)を抽出して表示すると以下のようになります。
timestamp src_address src_port dst_address dst_port proto -- ------------------------- ------------- ---------- ------------- ---------- ----- 1 2019-06-19 08:25:00+00:00 172.16.77.1 45895 172.18.11.3 4444 TCP 2 2019-06-19 08:26:00+00:00 172.16.77.1 45895 172.18.11.3 4444 TCP 3 2019-06-19 08:32:00+00:00 172.18.11.11 38410 172.18.11.1 80 TCP 4 2019-06-19 08:32:00+00:00 172.18.11.12 48694 172.18.11.4 3306 TCP 5 2019-06-19 08:32:00+00:00 172.18.11.12 48640 172.18.11.4 3306 TCP 6 2019-06-19 08:32:00+00:00 172.18.11.11 38472 172.18.11.1 80 TCP 7 2019-06-19 08:32:00+00:00 172.18.11.3 46152 172.17.1.5 443 TCP 8 2019-06-19 08:32:00+00:00 172.18.11.11 38320 172.18.11.1 80 TCP 9 2019-06-19 08:32:00+00:00 172.18.11.1 53012 172.17.1.5 443 TCP 10 2019-06-19 08:32:00+00:00 172.18.11.12 48856 172.18.11.4 3306 TCP
以前のブログでご紹介したPolicy Analysis機能がAPI経由でもちゃんと使えていますよね!
APIの良い点は特定のパラメータのみを任意に抽出できる点です。お客様が現在使っているSIEM基盤などからAPIコールし任意のパラメータを抽出してデータ分析したりアラートを出したり等、使い方の可能性は無限です。
Tetrationを単体の製品ではなく1つのデータソースプラットフォームとして見るとまた違った可能性が感じられると思います。APIを活用した新たなユースケースを是非皆さんも考えてみてください!
最後になりますが、特定のapplicationの特定の期間で4カテゴリ(Permitted, Escaped, Misdropped, Rejected)を選択しそれに該当するフローを10個ずつpaginationして表示するpython codeをサンプルとしてご紹介します。code作成の際の参考になれば幸いです。
https://github.com/micchan2005/Tet-compliance
1 コメント
Such nice information. Glad that you shared this information. I got directed to <a href="https://www.reviewsontop.com/">this blog</a> while searching the info.