📧
parsedmarcでgmail apiオプションを使用してgmailからdmarcレポートを直接取得する
parsedmarcとは
OSSのdmarcレポートのパースツールです。リブセンスではparsedmarcでパースしたデータをOpenSearchに格納し、Grafanaを用いて可視化を行なっています。詳細については以下記事をどうぞ。
この記事では、以下の流れでdmarcレポートを以下の流れで取り込んでいました。
本記事では、gmail_apiオプションを使うことでgmailから直接parsedmarcを用いてETL処理できたので、その方法を共有いたします。
gmail上でのラベル設定
dmarcレポートが集約されるgmailのラベルを設定します。以下のスクリーンショットにおいてはdmarcラベルにdmarcレポートが届く想定です。
gmail_apiオプションを用いてparsedmarcを動かすと、dmarc-archiveラベルと4つの子ラベルが作られ、dmarcラベルに届いたメールのうちETL処理が終わったものがdmarc-archiveラベルの対応した子ラベルに格納されていきます。
設定方法
tokenの入手
gmail apiのクイックスタートのpythonを用意し、以下のように変更してください。
- SCOPES = ["https://www.googleapis.com/auth/gmail.readonly"]
+ SCOPES = ["https://www.googleapis.com/auth/gmail.modify"]
クイックスタートの通りに実行すると、pythonと同階層にtoken.json
が生成されているはずです。
iniファイル
実際に使っているものです、参考にどうぞ。重要なのは[mailbox]
と[gmail_api]
です。
[general]
save_aggregate = True
save_forensic = True
debug = True
log_file = /dev/stdout # docker環境のため
[opensearch]
hosts = https://user:secret@hogehoge.com
[mailbox]
watch = True # メールが届き次第処理するか否か
delete = False # 処理が終わったメールを削除するか否か
reports_folder = dmarc # レポートが届く想定のラベル
archive_folder = dmarc-archive # 処理が終わった後に移動するラベル
[gmail_api]
credentials_file = /etc/parsedmarc/credentials.json # クイックスタートで入手したcredentials.jsonを設定する
token_file = /etc/parsedmarc/token.json # 上記で入手したtokenを設定する
include_spam_trash = True # dmarcレポートは低確率で迷惑メールになるので迷惑メールも見るようにする
paginate_messages = True # レポートが多いとapi制限で直近のレポートしか読まないため、多くない場合はFalseで良い
scopes = https://www.googleapis.com/auth/gmail.modify # readonlyで動かすとエラーになるので非推奨です
DockerFileの例
以下のようなコンテナを用意し、Fargateで運用しています。
FROM python:3.11.8-alpine3.19
WORKDIR /app
RUN apk add --update --no-cache libxml2-dev libxslt-dev && apk add --update --no-cache --virtual .build_deps build-base libffi-dev
COPY ./requirements.txt /app/requirements.txt
RUN pip install -r requirements.txt
COPY parsedmarc.ini /etc/parsedmarc.ini
COPY credentials.json /etc/parsedmarc/credentials.json
COPY token.json /etc/parsedmarc/token.json
CMD ["parsedmarc", "-c", "/etc/parsedmarc.ini"]
parsedmarcにコントリビュートしました
完全に余談ですが、この件でドキュメントの更新と、壊れたCIの修復を行いました。
宣伝
2024/07/16(火)にリブセンスでメール技術の勉強会をします。
私はDMARCのレポートシステムを作り、実際に運用した結果について話します。
他にはインフラGのEMによるメールサーバの移行の発表もあるので、是非きてください。
Discussion