
Nexmo Audit Events APIとPythonでアプリケーションを監視する
所要時間:1 分
このブログポストでは、Nexmoの監査イベントを表示できるWebアプリケーションをPythonで作成する方法を紹介します。Nexmoでは、Audit APIを使用してアカウントの監視を行います。
Nexmo Audit APIを使用する理由は以下の通りです:
口座への不正アクセスの可能性を監視する。
SOX、SSAE16/SOC、ISO27001などのコンプライアンス。
サービス・レベル・アグリーメントを満たすためのモニタリング
Nexmo監査イベントAPI
Nexmoは、Nexmoアカウント内で発生したイベントを分析するためのAudit APIを提供しています。このAPIを使うと、以下のことが簡単にできます:
サポートされているすべてのイベントタイプのリストを取得する。
フィルタリングされたイベントリストを取得(1つまたは複数のイベントタイプでフィルタリングし、テキスト検索を使用することができます)。
特定の監査イベントの詳細を取得します。
このブログ記事では、その方法を紹介する:
サポートされているイベントタイプを取得します。
1つのイベントタイプでフィルタリングされたリストを取得する。
全イベントのリストを入手する。
以下のドキュメントを参照してください。 Nexmo Audit API ドキュメントをご覧ください。を参照してください:
日付範囲の監査イベントを取得します。
テキスト検索に基づいて監査イベントを取得します。
様々なフィルターを組み合わせることで、非常に特殊なイベントのリストを得ることができます。
このブログでは、Pythonを使ったNexmo Audit APIの使い方を紹介します。
Nexmo Audit Events APIは現在ベータ版です。現在 クライアントライブラリ.
REST APIエンドポイント
主なREST APIエンドポイントは以下の通り:
https://api.nexmo.com/beta/audit/events監査イベントのリストは GET.また、エンドポイントで OPTIONSを使用して、サポートされているイベント・タイプのリストを取得することもできます。
Audit イベント・リクエストは、クエリ・パラメータを使用してフィルタリングできます。例えば
curl "https://api.nexmo.com/beta/audit/events?event_type=$EVENT_TYPE&search_text=$SEARCH_TEXT&date_from=$DATE_FROM&date_to=$DATE_TO" \
-u "$NEXMO_API_KEY:$NEXMO_API_SECRET"EVENT_TYPEは、例えば、イベントタイプのカンマ区切りのリストである:
curl "https://api.nexmo.com/beta/audit/events?event_type=APP_CREATE,APP_DELETE&search_text=some_string&date_from=2018-09-01&date_to=2018-09-30" \
-u "$NEXMO_API_KEY:$NEXMO_API_SECRET" シンプルなウェブアプリケーション
このブログ記事のWebアプリケーションは、監査イベントのリストを取得するために必要なNexmo Audit APIコールに集中できるように、意図的に非常にシンプルにしてあります。
サポートされているイベント・タイプのドロップダウンリストを含むシンプルなフォームがあります。リストから特定のイベント・タイプを選択するか、すべてのイベント・タイプから ALLを選択することもできます。フォーム・ボタンをクリックして選択します。記録されたイベントのリストを含むテーブルが返され、表示されます。
ここでのPythonウェブアプリケーションには2つの前提条件がある:
これら2つのライブラリのインストール方法は、それぞれのウェブサイトに記載されていますが、以下の方法で簡単にインストールできます。 pip.
ここで紹介するアプリケーションはPython 3でのみテストされた。
Python ウェブアプリケーションのソースコード:
import requests
from requests.auth import HTTPBasicAuth
from flask import Flask, request, jsonify
NEXMO_API_KEY = 'YOUR_NEXMO_API_KEY'
NEXMO_API_SECRET = 'YOUR_NEXMO_API_SECRET'
app = Flask(__name__)
template1 = '''
<html>
<head>
<title>Audit Event Types</title>
</head>
<body>
<form action='/events' method='get'>
<select name='event_type'>
<option value='ALL'>ALL -- All the event types</option>
{SELECT_OPTIONS}
</select>
<input type='submit'>
</form>
</body>
</html>
'''
template2 = '''
<html>
<head>
<title>Audit Events Listing</title>
</head>
<body>
<table border='1'>
<tr><th>Audit Event Type</th><th>Date/time of event</th><th>Event source</th><th>Context</th></tr>
{TABLE_ROWS}
</table>
</body>
</html>
'''
@app.route("/")
def root():
# Retrieve all supported event types
# This is then used to populate a drop-down list of event types.
r = requests.options('https://api.nexmo.com/beta/audit/events', auth=HTTPBasicAuth(NEXMO_API_KEY, NEXMO_API_SECRET))
j = r.json()
event_types = j['eventTypes']
# Build options list based on event types
select_options = ""
for evt_t in event_types:
select_options = select_options + "<option value='" + evt_t['type'] + "'>" + evt_t['type'] + " -- " + evt_t['description'] + "</option>"
html = template1.format(SELECT_OPTIONS=select_options)
return (html)
@app.route("/events")
def events():
params = request.args
EVT_TYPE = params['event_type']
if EVT_TYPE == 'ALL':
r = requests.get('https://api.nexmo.com/beta/audit/events', auth=HTTPBasicAuth(NEXMO_API_KEY, NEXMO_API_SECRET))
else:
r = requests.get('https://api.nexmo.com/beta/audit/events?event_type='+EVT_TYPE, auth=HTTPBasicAuth(NEXMO_API_KEY, NEXMO_API_SECRET))
j = r.json()
if '_embedded' in j:
events = j['_embedded']['events']
else:
return ("No Events Found")
table_rows = ""
for evt in events:
if 'context' in evt:
event_context = str(evt['context'])
else:
event_context = 'None'
table_rows = table_rows + "<tr><td>" + (evt['event_type'] + "</td><td>" + evt['created_at'] + "</td><td>" + evt['source'] + "</td><td>" + event_context + "</td></tr>")
html = template2.format(TABLE_ROWS=table_rows)
return(html)
if __name__ == '__main__':
app.run(port=3000)テスト目的であれば、ウェブ・アプリケーションをローカルで実行することができます。
ウェブアプリをテストする
ブラウザを
http://localhost:3000.ドロップダウン・リストから表示する特定のイベント・タイプを選択するか、ドロップダウン・リストから
ALLを選択すると、すべてのイベントが表示されます。をクリックしてください。
Submitをクリックしてください。
ソースコード
サンプルWebアプリケーションの最新のソースコードは以下にあります。 Nexmoコミュニティにあります。
概要
このブログポストでは、NexmoアカウントからAuditイベントのリストを取得できるシンプルなPythonウェブアプリケーションの作成方法を紹介しました。このウェブアプリケーションを使うことで、不審な動作や潜在的な問題がないか、アカウントを監視することができます。
さらに読む
Nexmo Audit Event APIについては、以下のリソースをご参照ください:


