Gmailの送受信ログをSumo Logicで表示させる方法

 2022.12.06  柳瀨正之

Gmail からメッセージの送信履歴を取得してSumo Logicで解析したいとの要望がありました。

現時点ではSumo LogicにはGmail用のコレクターがなかったので、Workspace Admin SDKを使用したスクリプトを開発する事にしました。

検索したところ個人アカウントで取得する方法はたくさん見つかりましたが、組織全体で取得する方法がなかったので記事にすることにしました。

組織に所属する全アカウントの送受信履歴を取得したい管理者の方は試してみてください。

スクリプト言語にはPythonを使用しています。

 

プロジェクトの作成

まずはGoogle Cloudに管理者でログインしプロジェクトを作成します。

作成は画面の左上にあるプロジェクトを作成から行います。(※1)

プロジェクトの作成画面では、プロジェクト名を入力します。(※2)

“組織場所はデフォルトで表示されているまま作成します。

 

※1 管理者画面             ※2 プロジェクト作成画面

01_管理者画面     02_プロジェクト作成画面

 

APIの有効化

1で作成したプロジェクトの設定画面に移動します。

移動の方法が分からなかったので左上のメニューから移動しました。(※3)

“最近のプロジェクトの選択の画面で1で作成したプロジェクトを選択します。(※4)

 

※3 メニューから移動         ※4 最近のプロジェクトの選択の画面

03_メニューから移動    04_最近のプロジェクトの選択の画面

 

プロジェクトページの上部にある”APIとサービスの有効化をクリックしAPIライブラリのページに移動します。

検索ボックスに “Gmail API”を入力しAPIを検索し、Gmail APIの設定画面を表示します。(※5)

表示された画面で有効にするをクリックし、このプロジェクトでGmail APIを有効にします。

 

※5 Gmail APIの設定画面

05_Gmail APIの設定画面

 

認証情報の登録

次にサービスアカウントを設定します。

“認証情報の画面から作成します。(※6)

 

※6 認証情報の画面

06_認証情報の画面

 

サービスアカウントの作成画面でサービスアカウント名を入力して完了をクリックします。(※7)

作成後は詳細画面から一意のID”を確認します。(※8)

このIDは後で使用するのでコピーしておきます。

 

※7 サービスアカウントの作成画面      ※8 詳細画面

07_サービスアカウントの作成画面     08_詳細画面

 

次に詳細画面から鍵の作成を行います。(※9)

ここでは新しい鍵を作成しています。

タイプは推奨のままで作成します。(※10)

作成と同時にJSONファイルがダウンロードされます。

ここでダウンロードしたJSONファイルは後で使用しますので大切に保管してください。

 

※9 鍵の登録画面             ※10 タイプの指定

09_鍵の登録画面      10_タイプの指定

 

ロールの登録

ロールの登録はGoogle Workspace管理コンソールから行います。

Google Workspace管理コンソールにログイン後に左のメニューの

”セキュリティアクセスとデータ管理”APIの制御ドメイン全体の委任

を選択し、ドメイン全体の委任の設定画面で新しく追加を選択します。(※11)

 

※11 ドメイン全体の委任

11_ドメイン全体の委任

 

“新しいクライアントIDを追加の画面で以下を入力します。(※12)

クライアントID:先程コピーした一意のID”

OAuthスコープ:https://www.googleapis.com/auth/gmail.readonly

 

※12 新しいクライアントIDを追加の画面

12_新しいクライアントIDを追加の画面

 

クライアントライブラリのインストール

コンソールからPythonのクライアントライブラリをインストールします。

インストールはpipコマンドで行います。

コマンドはドキュメントのままです。

※このブログを作成した当初はPython3.6も対応になっていましたが、現在はバージョンが上がり3.8以降が対応になっています。

 

実行するコマンド:

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

 

スクリプトの作成

順番としては、まずメッセージIDを取得して、IDからメッセージの内容を取得します。

メッセージID の一覧はlsitmsgs()で取得できます。

また、メッセージの内容はメッセージIDを指定してusers().messages().get()で取得できます。

以下はサンプルのスクリプトになります。

 

1 from googleapiclient import discovery
2 from google.oauth2 import service_account
3 import json
4
5 SCOPES = ['https://www.googleapis.com/auth/gmail.readonly']
6 SERVICE_ACCOUNT_FILE = '先にダウンロードしたJSONファイル'
7 userId = '対象アカウントのメールアドレス'
8
9 def lsitmsgs(service, user):
10     response = service.users().messages().list(userId=user).execute()
11     message_ids = response['messages']
12
13     for message_id in message_ids:
14         message_info = service.users().messages().get(
15                     userId=user, id=message_id['id']).execute()
16
17 if __name__ == "__main__":
18     credentials = service_account.Credentials.from_service_account_file(
19                      SERVICE_ACCOUNT_FILE, scopes=SCOPES)
20     delegated_credentials = credentials.with_subject(userId)
21     service = discovery.build('gmail', 'v1', credentials=delegated_credentials)
22     messages = lsitmsgs(service, userId)

 

ポイントとしては

5行目でロール登録時に入力したスコープを指定

6行目で鍵を作成した際にダウンロードしたJSONファイルを指定

7行目でメッセージを受信したいアカウントのアドレスを指定

10行目でメッセージIDの一覧を取得(デフォルトで500件まで)

1315行目でメッセージID毎にメッセージの内容を取得

18,19行目で鍵ファイルを利用して認証資格を作成

20行目で作成した認証資格を用いて対象のアカウントに権限移譲

となっています。

 

7行目のアカウントを変更することで組織に所属する他のアカウントのメッセージの取得も可能になります。

 

後はサンプルを少し加工して

・組織に所属する全アカウントを対象にする。

・前回取得したメッセージ以降のメッセージを取得する。

Sumo Logicへ送信する。

を実装することで、組織に所属する全ユーザのGmailの送受信のログをSumo Logicで取り込むことが可能になります。

--

Gmailのログ取り込みのサンプルスクリプトのスコープを指定している部分(5行目)、discovery.buildの引数(21行目)を変更することでGmail以外のGoogle WorkspaceのログもSumo Logicで取り込むことが可能になります。

 

これからもSumo Logicで対応していないログを取り込む方法に関する記事を書いていきますので、今後ともよろしくお願いします。

最後までお付き合いいただきありがとうございました。


RECENT POST「Sumo Logic」の最新記事


Sumo Logic

【第3弾】Sumo Logic可視化サービス Terilogy Blend for Infobloxリリース

Sumo Logic

SumologicのMITRE ATT&CK® Threat Coverage Explorerとは

Sumo Logic

【第2弾】 Sumo Logic 可視化サービス Terilogy Blend for Cato Networksリリース

Sumo Logic

Sumo LogicのAutomation機能でSlackにメンションするメッセージを送ってみた

Gmailの送受信ログをSumo Logicで表示させる方法

RECENT POST 最新記事

RANKING人気記事ランキング

ブログ無料購読のご案内