Google送信ガイドライン対策で、AWSを利用して、DmarcのRUAレポート監視の自動化
はじめに
SREホールディングス株式会社にて、ソフトウェアエンジニアをやっております、叶です。
2023年10月にGoogleが発表した「メール送信者のガイドライン」により、Dmarcを対応するプロダクトが増えてきて、どうやって監視するのか課題になり、AWSを利用して、SlackでRUAレポートを監視する仕組みを作ってみました。
対象読者
- AWSとDmarcの知見がある方
- Google送信ガイドライン対策で、AWSを利用して、監視したい方
Google送信ガイドラインにおける監視する内容
- DmarcのRUAレポート
- Postmaster Tools
DmarcのRUAレポート
なぜ自動化するか
- RUAレポートはXMLファイル形式で送信される集計レポートで、整理しないとパッとわからない
- メールサーバーごとにZIPで送信されますので、一々解凍するには時間がかかって、漏れもあるかもしれない
- Slackで受信タイミングにレポートが見えるので、すぐ結果がわかる
監視の仕組み
- メールサーバーのRUAレポートをAWSのSESで受信
- 受信したRUAレポートのメールをS3に保存
- S3に保存のトリガーを利用して、Lambdaを起動し、RUAレポートを解析する
- 解析したレポートをS3に保存する
- dmarc認証失敗レポートがある場合、Slackに送信
Slackに通知するレポートサンプル画像
- Dmarc report by provider: レポートを送ってくれたメールプロバイダー
- data(from - to): 収集期間
- count: 認証件数
- report download: 作成したjsonとcsvのレポートのS3リンク
- レポート画像: dmarc,dkim,spfの認証結果のグラフを署名付きのURLを発行して、表示する
※ 今回はLambdaを利用して、毎回レポートを出力する方法を説明します。
下記の方法で、サーバーを立ち上げ、WEBページで統計情報を確認することもできます。
導入手順
-
事前作業
a. RUAレポートを受信する専用ドメイン及びメールアドレスを作成する
b. AWSのSESのIDに[a.]のメールアドレスを登録して、ドメイン認証あるいはメールアドレス検証を済ませる
c. AWSのSESを受信できるように専用ドメインのMXレコードを登録する
- 本記事に作ったリソースコードをGithubからcloneする
インフラはコードで管理したいので、terraformを使って実装しました。
-
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で発行したトークン |
-
terraform init
を実行 -
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
-
terraform apply
を実行、もちろん変更リソースが変わらないことも確認してください。 - applyが成功したら、テストしましょう。
Postmaster Tools
管理者が個人用 Gmail アカウントに送信されるメールに関するさまざまなデータ(迷惑メール率、評価、メッセージ認証、配信エラーに関するデータなど)を確認することができます。
確認できるデータ
こちらの記事に記載しておりますので、ご覧にいただければと思います。
データの注意事項
AWSにおいて監視方法
AWSとPostmaster Tools APIを利用して、データ監視する記事がありますので、ご覧にいただければと思います。
RUFレポートについて
RUFレポートはDMARC認証に失敗した個々のメールについて通知する「失敗レポート」の送信先を指定します。
リアルタイムで結果がわかりますが、セキュリティに問題点があって、googleも対応していないので、一旦監視なしでいいかなぁと思います。
必要であれば、ちゃんとセキュリティ対策も考えないといけないです。
まとめ
Google側でいきなり送信ガイドラインを出して、手も足も出ない状況になっていませんか。こちらの記事を読んでお役に立てればと思います。なりすましメール対策は会社として対応必須と思いますので、AWSなどクラウドサービスを利用して、Dmarcの監視を自動化して、楽になりましょう。
Discussion