ペンティオの Sumo Logic 担当の佐藤です。
今回は Sumo Logic に OneLogin のユーザーデータを取り込む方法を紹介します。
そもそも、Sumo Logic にデータがないとデータを分析することはできません!
Sumo Logic における「データの取り込み」について参考になれば幸いです。
準備するもの
- Read Users の権限が与えられた OneLogin API Credentials
- Sumo Logic の HTTP EndPoints
概要
今回は OneLogin から Sumo Logic にデータを送る仲介となるプログラムを作成します。 OneLogin の API を利用してユーザーデータを取得し、そのデータを Sumo Logic に POST送信する流れをコーディングしていきます。
OneLogin ユーザーデータ
以下の API を利用してユーザーデータを取得していきます。
実装
今回実装したプログラムです。
import requests import json import datetime ## アクセストークンを発行する class Token: def __init__(token, client_id, client_secret): token.client_id = client_id token.client_secret = client_secret token.session = requests.Session() token.session.headers = {'Content-Type': 'application/json'} oauth_endpoint = '/auth/oauth2/v2' token.base_url = 'https://api.us.onelogin.com' token.target = token.base_url + oauth_endpoint token.status = token.get_token() def get_token(token): authorization = 'client_id: %s, client_secret: %s' % (token.client_id, token.client_secret) token.session.headers.update({'Authorization':authorization}) r = token.session.post(token.target + '/token', json={'grant_type':'client_credentials'}) if r.status_code != 200: return False else: token.access_token = r.json()['access_token'] return True ## ユーザーデータを取得する class User(Token): def __init__(user, token): user.session = requests.Session() user.session.headers = {'Content-Type': 'application/json'} user.user_endpoint = '/api/1/users' user.base_url = token.base_url user.session.headers.update({'Authorization': 'Bearer:%s' % token.access_token}) def get_all_users(user, query='?sort=+id'): next_page = 1 response = [] original_user_endpoint = user.user_endpoint while next_page != 0: r = user.session.get(user.base_url + user.user_endpoint + query) if r.status_code != 200: next_page == 0 return False else: if r.json()['pagination']['next_link'] == None: next_page == 0 response.extend(r.json()['data']) return response else: user.user_endpoint = original_user_endpoint + query + '&after_cursor=' + r.json()['pagination']['after_cursor'] response.extend(r.json()['data']) ### 1. API を利用してデータを取得する ### client_id = '' # ここに OneLogin の Client ID を書く client_secret = '' # ここに OneLogin の Client Secret を書く token = Token(client_id=client_id, client_secret=client_secret) user = User(token) result = user.get_all_users() ### 2. 必要に応じてデータを整形する ### payload = '' now = datetime.datetime.now(datetime.timezone(datetime.timedelta(hours=9))).strftime("%Y-%m-%dT%H:%M:%S%Z") for user_data in result: post_data = {} post_data['timestamp'] = now post_data['data'] = user_data post_data['data_type'] = 'User' payload += json.dumps(post_data) + '\n' ### 3. Sumo Logic に POST する ### url = '' # ここに Sumo Logic の HTTP EndPoints を書く requests.post(url, data=payload)
基本的な流れは
- API を利用してデータを取得する
- 必要に応じてデータを整形する
- Sumo Logic に POST する
結果
Sumo Logic にデータが取り込まれました。
まとめ
今回は OneLogin のユーザーデータに絞りましたが、API が利用できるサービスであれば Sumo Logic にデータを取り込ませることは可能です。プログラムを活用して、Sumo Logic にどんどんデータを取り込みましょう。