https://d226lax1qjow5r.cloudfront.net/blog/blogposts/get-nexmo-audit-events-with-python-dr/audit-api.png

Nexmo Audit Events APIとPythonでアプリケーションを監視する

最終更新日 May 3, 2021

所要時間:1 分

このブログポストでは、Nexmoの監査イベントを表示できるWebアプリケーションをPythonで作成する方法を紹介します。Nexmoでは、Audit APIを使用してアカウントの監視を行います。

Nexmo Audit APIを使用する理由は以下の通りです:

  • 口座への不正アクセスの可能性を監視する。

  • SOX、SSAE16/SOC、ISO27001などのコンプライアンス。

  • サービス・レベル・アグリーメントを満たすためのモニタリング

Nexmo監査イベントAPI

Nexmoは、Nexmoアカウント内で発生したイベントを分析するためのAudit APIを提供しています。このAPIを使うと、以下のことが簡単にできます:

  • サポートされているすべてのイベントタイプのリストを取得する。

  • フィルタリングされたイベントリストを取得(1つまたは複数のイベントタイプでフィルタリングし、テキスト検索を使用することができます)。

  • 特定の監査イベントの詳細を取得します。

このブログ記事では、その方法を紹介する:

  1. サポートされているイベントタイプを取得します。

  2. 1つのイベントタイプでフィルタリングされたリストを取得する。

  3. 全イベントのリストを入手する。

以下のドキュメントを参照してください。 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つの前提条件がある:

  1. リクエスト- は、REST API 呼び出しを簡単に行う方法を提供します。

  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)

テスト目的であれば、ウェブ・アプリケーションをローカルで実行することができます。

ウェブアプリをテストする

  1. ブラウザを http://localhost:3000.

  2. ドロップダウン・リストから表示する特定のイベント・タイプを選択するか、ドロップダウン・リストから ALLを選択すると、すべてのイベントが表示されます。

  3. をクリックしてください。 Submitをクリックしてください。

ソースコード

サンプルWebアプリケーションの最新のソースコードは以下にあります。 Nexmoコミュニティにあります。

概要

このブログポストでは、NexmoアカウントからAuditイベントのリストを取得できるシンプルなPythonウェブアプリケーションの作成方法を紹介しました。このウェブアプリケーションを使うことで、不審な動作や潜在的な問題がないか、アカウントを監視することができます。

さらに読む

Nexmo Audit Event APIについては、以下のリソースをご参照ください:

シェア:

https://a.storyblok.com/f/270183/150x150/931b34422e/abedford.png
Tony Bedfordヴォネージの卒業生