はじめに
SES(Simple Email Service)
は、メールの送信だけでなく、メールの受信機能も提供している。
AWS SESを使用してメール受信の設定を行う手順をやってみたいので備忘録として記録しておく。
メール受信機能を利用することで、独自ドメインでメールを受信し、そのメールを処理するシステムなども構築することが可能となっている。
前提条件
- AWSアカウントの作成済み
- 受信用のドメインを所有していること
- DNS設定の変更権限があること
- AWS CLIまたはマネジメントコンソールへのアクセス権限
環境
- AWS SES
- Amazon S3(メール保存用)
- Cloudflare (ドメイン管理)
設定手順
ドメインの検証
※すでに独自ドメインがSES
で検証済みの場合は不要となる。
AWS SESでメールを受信するためには、まずドメインの所有権を検証する必要がある。
- AWS SESコンソールにアクセス
- 「ID」を選択する
- 「IDの作成」を選択する
- ドメイン名を入力し、「Easy DKIM」にチェックをし、「IDの作成」を選択する
- DNSレコードを設定
以下の記事では上記の手順のキャプチャ等があるので参考にしてみていただければと思う。
AWS EC2+Postfix+SESでEC2インスタンスからメール送信をする#SESの設定1 (初期設定~ドメインの追加)
MXレコードの設定
受信したいドメインのDNS設定でMXレコードを追加する。
優先度: 10
値: inbound-smtp.[region].amazonaws.com
※今回は東京リージョンなので ap-northeast-1 とする。
↓
値: inbound-smtp.ap-northeast-1.amazonaws.com
- Email Receiving endpoints
https://docs.aws.amazon.com/general/latest/gr/ses.html#ses_inbound_endpoints
Cloudflare
では以下で設定を行った。
ドメイン: mail.k-bushi.com
レコードタイプ: MX
優先度: 10
値: inbound-smtp.ap-northeast-1.amazonaws.com

S3バケットの設定(メール保存用)
受信ルールセットの作成
メールを受信した際の処理を定義するルールセットを作成する。
受信ルールの設定
具体的なメール処理ルールを設定する。
作成したIAMロールに対して、以下のインラインポリシーを付与した。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::[作成したバケット名]/*"
}
]
}

動作確認
設定完了後、テストメールを送信して正常に受信・処理されることを確認する。
Gmail
で独自ドメインへのメールを送ってみる。

バケットにオブジェクトが増えているので見てみる。

オブジェクトをダウンロードして、.eml
に拡張子を変更後outlook
などのメーラーで開いてみる。

セキュリティ考慮事項
今回は受信ルール設定などは適当だったが条件を絞ったりしないと、すべて拾ってしまうのでこのあたりは要検討事項っぽさそうだ。
以下も構築する上で気を付けておきたい。
- S3バケットのアクセス権限を適切に設定
- 受信ルールでスパムフィルタリングを実装
- 機密情報を含むメールの暗号化
- ログ監視とアラート設定
料金
AWS SESのメール受信料金体系について
- 受信メール1,000通ごとの料金
- S3ストレージ料金
- データ転送料金
参考
Amazon SES を使用した E メールの受信
https://docs.aws.amazon.com/ja_jp/ses/latest/dg/receiving-email.htmlAWS SES 料金体系
https://aws.amazon.com/ses/pricing/Amazon SESでメールを受信するまでやってみた
https://blog.denet.co.jp/receiving-email-by-amazon-ses/[アップデート] Amazon SES のメール受信機能がついに東京リージョンでも使えるようになりました
https://dev.classmethod.jp/articles/ses-email-receive-tokyo/
おわりに
AWS SES
を利用したメール受信設定により、独自ドメインでのメール受信システムを構築することができた。
他にもLambda
との組み合わせにより、受信したメールを処理することも可能そうなので試してみたいなあ。