📧

Google送信ガイドライン対策で、AWSを利用して、DmarcのRUAレポート監視の自動化

2024/09/24に公開

はじめに

SREホールディングス株式会社にて、ソフトウェアエンジニアをやっております、叶です。
2023年10月にGoogleが発表した「メール送信者のガイドライン」により、Dmarcを対応するプロダクトが増えてきて、どうやって監視するのか課題になり、AWSを利用して、SlackでRUAレポートを監視する仕組みを作ってみました。

対象読者

  • AWSとDmarcの知見がある方
  • Google送信ガイドライン対策で、AWSを利用して、監視したい方

Google送信ガイドラインにおける監視する内容

  1. DmarcのRUAレポート
  2. Postmaster Tools

DmarcのRUAレポート

なぜ自動化するか

  1. RUAレポートはXMLファイル形式で送信される集計レポートで、整理しないとパッとわからない
  2. メールサーバーごとにZIPで送信されますので、一々解凍するには時間がかかって、漏れもあるかもしれない
  3. Slackで受信タイミングにレポートが見えるので、すぐ結果がわかる

監視の仕組み

infra

  1. メールサーバーのRUAレポートをAWSのSESで受信
  2. 受信したRUAレポートのメールをS3に保存
  3. S3に保存のトリガーを利用して、Lambdaを起動し、RUAレポートを解析する
  4. 解析したレポートをS3に保存する
  5. dmarc認証失敗レポートがある場合、Slackに送信
Slackに通知するレポートサンプル画像

report sample

  • Dmarc report by provider: レポートを送ってくれたメールプロバイダー
  • data(from - to): 収集期間
  • count: 認証件数
  • report download: 作成したjsonとcsvのレポートのS3リンク
  • レポート画像: dmarc,dkim,spfの認証結果のグラフを署名付きのURLを発行して、表示する

※ 今回はLambdaを利用して、毎回レポートを出力する方法を説明します。
下記の方法で、サーバーを立ち上げ、WEBページで統計情報を確認することもできます。
https://zenn.dev/ryoyoshii/articles/8c4b7eb32ac59d

導入手順

  1. 事前作業

    a. RUAレポートを受信する専用ドメイン及びメールアドレスを作成する
    b. AWSのSESのIDに[a.]のメールアドレスを登録して、ドメイン認証あるいはメールアドレス検証を済ませる
    c. AWSのSESを受信できるように専用ドメインのMXレコードを登録する

  1. 本記事に作ったリソースコードをGithubからcloneする
    インフラはコードで管理したいので、terraformを使って実装しました。

https://github.com/ZHIBINYE/dmarc_rua_monitoring_aws_ses/tree/main

  1. ses_rua_monitoring.tfにある変数を埋める
各パラメータの説明
Name 日本語名 説明
prefix 前接続子 AWSの各リソースをネーミングするための文字列
service_name プロジェクト名 AWSの各リソースをネーミングするための文字列
lambda_python_version pythonバージョン 利用するレイヤの関係で3.11固定
s3_bucket_name_ses S3バケット名 RUAレポートを受信するバケットの名前
s3_bucket_arn_ses S3バケット名 RUAレポートを受信するバケットのarn値
rua_ses_receipt_s3_key S3のキー RUAレポートメールと区別するため、RUAレポートを受け取るフォルダーを設定
ses_rule_set_name 受信ルールセット名 AWSの受信ルールセット名
dmarc_rua_mailto RUAレポートを受け取るメールアドレス RUAレポートを受け取るメールアドレス(dmarcのruaのmailtoも登録しておいてください)
cloudwatch_log_retention_days CloudWatchのログ保存期間 Lambdaログの保存期間
image_presigned_url_access_key_id IAMユーザーアクセスキー S3の署名付きURLを最大7日間で発行できるようにIAMユーザーを利用
image_presigned_url_secret_access_key IAMユーザーセキュリティキー S3の署名付きURLを最大7日間で発行できるようにIAMユーザーを利用
slack_channel slackチャネル 通知したいslackのチャネル名
slack_token slackトークン SlackAPIを叩くため、slackで発行したトークン
  1. terraform initを実行
  2. terraform planを実行し、次の13個のリソースだけ作成されると確認
# lambdaの実行ログ保存するcloudwatch
module.ses-rua-monitoring.aws_cloudwatch_log_group.lambda
# lambda実行する最低限のアクセスロール
module.ses-rua-monitoring.aws_iam_role.rua
# lambda関数
module.ses-rua-monitoring.aws_lambda_function.rua
# s3からlambdaを呼び出せる権限設定
module.ses-rua-monitoring.aws_lambda_permission.rua_allow_bucket
# lambdaデプロイリソース
module.ses-rua-monitoring.aws_s3_bucket.lambda_deploy
# 解析済みRUAレポートを保存するS3
module.ses-rua-monitoring.aws_s3_bucket.report
# 解析済みRUAレポートを保存するS3のライフサイクル
module.ses-rua-monitoring.aws_s3_bucket_lifecycle_configuration.report
# RUAレポートを保存するS3のライフサイクル
module.ses-rua-monitoring.aws_s3_bucket_lifecycle_configuration.rua
# S3のオブジェクトを作成したらlambdaへの通知設定(S3の保存トリガー)
module.ses-rua-monitoring.aws_s3_bucket_notification.rua
# RUAレポートを保存するS3フォルダ
module.ses-rua-monitoring.aws_s3_object.rua
# RUAレポート受信ルール設定
module.ses-rua-monitoring.aws_ses_receipt_rule.rua
# lambdaレイヤバージョンリソース
module.ses-rua-monitoring.module.lambda_layer.aws_lambda_layer_version.main
# lambdaレイヤ作成リソース
module.ses-rua-monitoring.module.lambda_layer.terraform_data.create_lambda_layer
  1. terraform applyを実行、もちろん変更リソースが変わらないことも確認してください。
  2. applyが成功したら、テストしましょう。

Postmaster Tools

管理者が個人用 Gmail アカウントに送信されるメールに関するさまざまなデータ(迷惑メール率、評価、メッセージ認証、配信エラーに関するデータなど)を確認することができます。

確認できるデータ

こちらの記事に記載しておりますので、ご覧にいただければと思います。
https://zenn.dev/kikutaro/articles/6731f838f35826

データの注意事項

https://support.google.com/a/answer/14668346?hl=ja&ref_topic=6259779&sjid=5340566470618238835-AP

AWSにおいて監視方法

AWSとPostmaster Tools APIを利用して、データ監視する記事がありますので、ご覧にいただければと思います。

https://note.com/kurashicom_tech/n/n138cbd2373ef

RUFレポートについて

RUFレポートはDMARC認証に失敗した個々のメールについて通知する「失敗レポート」の送信先を指定します。
リアルタイムで結果がわかりますが、セキュリティに問題点があって、googleも対応していないので、一旦監視なしでいいかなぁと思います。
必要であれば、ちゃんとセキュリティ対策も考えないといけないです。

https://powerdmarc.com/ja/dmarc-ruf-report-problems-solved/

まとめ

Google側でいきなり送信ガイドラインを出して、手も足も出ない状況になっていませんか。こちらの記事を読んでお役に立てればと思います。なりすましメール対策は会社として対応必須と思いますので、AWSなどクラウドサービスを利用して、Dmarcの監視を自動化して、楽になりましょう。

SRE Holdings 株式会社

Discussion