会話をしながら ツイッター Microsoft Graph APIについて:従来のExchange eDiscovery機能はMicrosoft Graph APIでは利用できないと思っていましたが、それは大きな間違いでした。.
これまで見たことのないエンドポイントをいくつか見つけた後、graphish という Python パッケージを作成することにしました。. グラフィッシュ オープンソースの Python パッケージである Swimlane はオープンソース化されており、これにより IT、セキュリティ運用 (SecOps)、開発者などが Microsoft Graph API を使用してメールボックスから電子メール メッセージを検索および削除できるようになります。.
Office 365 をご利用で、Microsoft Azure Active Directory をご利用の場合は、この新しいパッケージを使用するために必要な要件をすべて満たしています。ただし、この新しいパッケージを完全にご利用いただくには、いくつかの追加手順を実行する必要があります。.
まず、このパッケージを実行する際に使用するサービス/アプリケーションの種類を決定する必要があります。Microsoft Graph API は、組織が Microsoft Azure AD にアプリケーションを登録することでアクセスできるようになります。このプロセスは複雑になる場合がありますが、アプリケーションの種類と Microsoft Graph API の使い方を理解するためのシリーズ記事を既に作成しましたので、ぜひご覧ください。
- Microsoft の OAuth2 エンドポイントとアプリケーションの種類
- MicrosoftのOAuth2実装:アプリの登録
- Microsoft の OAuth2 実装: Microsoft Graph API の使用
アプリケーションの種類に応じて、認証付与ワークフローは異なります。. グラフィッシュ レガシー (委任された権限) とデーモン/サービス (アプリケーションの権限) の両方のアプリケーション登録タイプをサポートします。.
基本的な事項は次のとおりです。Microsoft Graph API にアクセスする際にユーザー名とパスワードを使用する場合は、登録したアプリケーションがエンドポイントに対して適切な権限を持っていることを確認する必要があります( グラフィッシュ つまり Mail.ReadWrite であり、タイプは「委任」です。.
使用したい場合 グラフィッシュ デーモン/サービス アプリケーションの場合は、タイプが「アプリケーション」で Mail.ReadWrite 権限があることを確認する必要があります。“
以下のスクリーンショットには両方の権限が表示されていますが、これは問題ありません。ただし、どちらか一方を選択することをお勧めします。.

Azure Active Directory でアプリケーションを作成したら、pypi またはリポジトリから graphish をインストールしましょう。
ローカルで git clone [email protected]:swimlane/graphish.git cd graphish pip install setup.py OS X & Linux: pip install graphish Windows: pip install graphish
さて、 グラフィッシュ がインストールされている場合は、登録したアプリケーションの種類に応じて適切な値を指定する必要があります。この例では、アプリケーション(クライアント資格情報認証付与フロー)認証の使用方法を説明します。.
注: graphish の使用方法の詳細については、こちらをご覧ください。.
使用するには グラフィッシュ アプリケーションの権限では、GraphConnector オブジェクトを作成するために、clientId、clientSecret、および tenantId を指定する必要があります。.
from graphish import GraphConnector # バックエンド / client_credential 認証フローの場合は、次のコネクタを指定します = GraphConnector( clientId='', # your applications clientId clientSecret='', # your applications clientSecret tenantId='', # your applications Azure Tenant ID )
アプリケーション認証(クライアント資格情報付与認証フロー)を使用すると、自分のメールボックスを検索できます(デフォルト)。または、`userPrincipalName`を渡すと、 グラフィッシュ そのメールボックス(電子メールアドレス)を検索します:
検索中 あなたの サービス/デーモン認証フローを使用するアカウント:
graphish import Search から search = Search(connector) new_search = search.create( searchFolderName='Phishing Search', sourceFolder='inbox', filterQuery="contains(subject, 'EXPIRES')" )
別のものを検索 ユーザーのメールボックス サービス/デーモン認証フローを使用する:
from graphish import Search search = Search( connector, userPrincipalName='[email protected]' # 検索するユーザーのメールボックス )
新しい検索オブジェクトを作成したら、個別の検索の作成を開始できます。
new_search = search.create( searchFolderName='フィッシング検索2', sourceFolder='受信トレイ', filterQuery="contains(subject, 'フィッシング')" )
検索フォルダーの名前 (非表示)、ソース フォルダー、検索用語を含む新しい検索を作成したら、messages メソッドを使用して結果を取得できます。
messages = search.messages() で、messages 内の message を検索します: print(message)
メッセージ オブジェクトで使用可能なプロパティのリストは次のとおりです。
- 送信日時
- ウェブリンク
- 会話ID
- インターネットメッセージID
- id
- 受信確認リクエスト済み
- 主題
- 最終更新日時
- 本文プレビュー
- から
- ドラフト
- コネクタ
- 重要性
- キー変更
- 受信日時
- 親フォルダーID
- 体
- 配送受領要求済み
- 返信先
- 受信者へ
- cc受信者
- フラグ
- ユーザー
- カテゴリー
- _ヘッダー
送信者 - 作成日時
- 読み取り
- 添付ファイルあり
- bcc受信者
- 推論分類
- @odata.etag
検索中に見つかったメッセージを削除する場合は、delete_search_messagesメソッドを使用します。別のメッセージを削除する場合は、deleteメソッドを使用します。.
検索フォルダー内のメッセージを削除するには、検索フォルダーの ID と削除するメッセージの ID の両方を指定する必要があります。.
# メッセージを削除します。delete = Delete( connector, userPrincipalName='[email protected]', # 検索するユーザーのメールボックス ) メッセージ内のメッセージ: delete.delete_search_message(search.folderId, message.id)
検索の更新や削除などの他の機能もいくつかありますが、それらに関する詳細は リポジトリ.
ハッピーハンティング!

