新型コロナウイルスに関係する内容の可能性がある記事です。
新型コロナウイルス感染症については、必ず1次情報として厚生労働省首相官邸のウェブサイトなど公的機関で発表されている発生状況やQ&A、相談窓口の情報もご確認ください。またコロナワクチンに関する情報は首相官邸のウェブサイトをご確認ください。※非常時のため、すべての関連記事に本注意書きを一時的に出しています。
見出し画像

社内通知用SMTPにAmazon SESを使ってみた

背景

複合機や監視ツールなど、社内のちょっとしたメール通知用のSMTPにGmailを使用している会社も多いのではないでしょうか。
また、自社ドメインのメールアドレスからメールを送信するために、外部サービスのSMTPサーバーにGmailを設定しているケースもあるかと思います。
ところが、G Suiteは2020年6月に「安全性の低いアプリからのアクセス(LSA)」を無効化します。
※2020/3/31追記※
2020/6/15に予定されていたLSAの無効化が、COVID-19の影響を考慮して延期になったとのこと(時期は未定)

「安全性の低いアプリからのアクセス」とは、具体的には「外部ツールから、ユーザー名とパスワードによる認証を使用したGoogleアカウントへのアクセス」を指します。
つまり、外部ツールからGmailへのSMTPやPOP/IMAPなどのユーザー認証がすべて遮断されるようになります
Googleとしては「よりセキュアなOAuthに対応しているツールを使用してください」という案内ですが、Thunderbirdなど一般的なメーラーはOAuth対応している物も増えてきているものの、複合機やIoT機器、監視ツールなどからの通知メール用SMTPではOAuthに対応していない製品も多いです。
そのため、2020年6月までにGmail以外のSMTPに移行する必要がありました。
余談ですが、外部ツールからGmailアカウントに対するログインがある日突然「不審なログイン」としてブロックされるというトラブルが発生したこともあるので、2020年6月を待たずに早めにGmail以外のSMTPに移行しておくことをオススメします。

サービス選定

外部SMTPサービスを選定するにあたり、要件は以下の通りでした。
・フルマネージドであること(オンプレ持ちたくない)
・SPF、DKIMをPASSして自社ドメインからメール送信できること
・SMTPエンドポイントとして、ユーザー認証でアクセスできること
・一定数までは無償で利用できること
・SSL/TLSで暗号化できること

結果、候補としては以下の2サービスになりました。
・SendGrid
・Amazon SES(Simple Email Service)

SendGridは12,000通/月まで無料で使用できるのですが、
「1会社=1契約なので、プロダクトなど他の用途で既に契約していると追加契約できない」
「利用用途が厳しく、契約した会社内でしか使用できない(グループ子会社に対する配信もNG)」
という縛りがあったので見送りました。

Amazon SESは、外部サービスからのSMTP送信については1,000通/月までは無料で、それ以降は1通あたり0.10USDです(リージョンによって金額が変わる場合もあるので、詳細は料金ページを確認してください)。

実際に使ってみたところ、Amazon SESはかなり手軽に使用できるSMTPサービスだったので、社内向けのメール通知などちょっとした用途に非常にマッチしているように思います。

Amazon SESのはじめ方

AWSコンソールにログインし、「SES(Simple Email Service)」を開きします。

最初にリージョンの選択を求められます。
Amazon SESはまだ国内リージョンで提供されていないので、他のリージョンから選択する必要があります。
※2020/7/2追記※
東京リージョンにも対応したようです!

SMTPエンドポイントとして利用するだけで、データの保管や遅延にはそこまでシビアではなかったので海外リージョンでも問題ありませんでしたが、現地法などの確認が必要であればリーガルに相談しておきましょう。
今回は「オレゴン(us-wese-2)」を選択しました。

画像1

次に、Amazon SESで使用するメールアドレスを登録します。
Amazon SESでは、受信確認ができるメールアドレスのみ使用可能です
「Verify a New Email Address」をクリックして、メール配信に使用するメールアドレス(自身が受信できるアドレスを使用すること)を入力し、「Verify This Email Address」をクリックします。

画像2

画像3

以下のようなメールアドレス認証用のメールが届くので、メール本文内のURLをクリックして認証します。

画像4

認証が完了したメールアドレスは、Statusが「verified」に変わります。
テストメールを送ってみるので、認証されたメールにチェックを入れて「Verify a New Email Address」をクリックしてみましょう。

画像5

メール作成フォームが開きます。
この段階ではまだSandbox状態なので、Amazon SESに登録されたメールアドレス以外にはメールは送れません
FromもToも先程認証したメールアドレスを設定して「Send Test Email」をクリックし、メールを送ってみましょう。

画像6

外部のメールアドレス宛にも送信できるようにするには、「送信制限緩和」の申請を行って受理される必要があります
Amazon SESの「Sending Statistics」画面にTipsとして表示されているので、「Request a Sending Limit Increase」から申請が可能です。

画像7

必要事項を記入して申請をしようとすると、以下のようなエラーが発生する場合があります。

画像8

これはクラスメソッド社など販売代理店を挟んでいる場合は直接AWSにリクエストを送れないためなので、販売代理店経由でリクエストしましょう。
クラスメソッド社であれば、メンバーズポータルに申請フォーマットが用意されています。

画像9

テンプレートに沿って必要事項を記入し、申請します。
「数営業日かかるかな」と思っていたら、翌営業日に受理された旨のメールが届いていました。
これで外部メールアドレスにもAmazon SESからメールを送信できるようになりました。
ちなみに送信数を「1,000通/日」と申請していたものの「50,000通/日」まで緩和されていたので、これがミニマムの制限数なのかもしれません。

続いて、SMTPユーザー認証用のIAMを作成します。
Amazon SESダッシュボードの「SMTP Settings」ページの「Create My SMTP Credentials」をクリックします。
また、SMTPサーバ名やポート番号など、SMTPエンドポイントとして必要となる設定情報もこのページに表示されています。

画像10

作成するIAMの名称を入力する必要がありますが、デフォルトのままでも問題ないので作成しましょう。
作成後、IAMのパスワードが表示されますが、再度表示することはできず再発行となるので、忘れずにメモしておきましょう

画像11

以上でAmazon SESの初期設定は完了です。

実際にメールを送信してみる

準備が整ったので、実際に外部ツールのSMTP設定をAmazon SESに変更して、メールを送信してみました。
海外リージョン経由での送信ですが、特に遅延もなくすぐにメールが配送されました。
受信したメールを開くと、FromはAmazon SESに登録したメールアドレスになっていますが、「amazonses.com経由」と表示されています。

画像12

メールのヘッダを確認すると、SPFとDKIMが「PASS」されており、認証も問題なさそうです。

画像13

メールの仕組みに詳しい方は、ここで違和感を覚えるかもしれません。
SPF用のTXTレコードをまだ自社ドメインのDNSに追加していないのに、SPFがPASSしているのです。
調べてみたところ、Amazon SESでは"MAIL-FROM"にはAmazon SESのドメインを設定し、"FROM"に利用者が登録した自社ドメインのメールアドレスがセットされるようです。

SPFは"MAIL FROM"にセットされたメールアドレスのドメインに対して送信サーバーが一致するか確認する仕組みなので、Amazon SESはSPFレコードを自社ドメインに登録しなくてもSPFはPASSします
ただし"FROM"にセットされた自社ドメインと"MAIL FROM"のドメインが一致しないので、メーラーによっては受信メールに「amazonses.com経由」と表示されます。
「SPFがデフォルトでPASSする仕組みであれば、他社からなりすましメールを送れるのでは?」という不安もあるかもしれませんが、先述の通りAmazon SESでは受信確認ができたメールアドレスからのみメール送信可能な仕組みなので、そこで担保されているようです(受信確認ができていないメールアドレスから実際にメールを送信しようとすると、エラーになります)。

DKIMもAmazon SES内でセットされるのでSPFとDKIMは何もしなくてもPASSとなり、一般的なメール環境ではこれだけで迷惑メールとして扱われることはほぼ無くなります。
マーケティングなど社外にメールを送信する場合はきちんと自社のDNSにSPFレコードを登録しておくべきですが、社内通知用途であればこれだけでも問題ないでしょう。

より厳密なDMARCに準拠するには自社ドメインのSPFレコードの設定も必要になりますので、必要な場合はAmazon SESのドキュメントをご確認ください。

メール送信状況を確認する

Amazon SESダッシュボードの「Sending Statistics」画面から、メールの送信数、バウンス数、苦情数などを確認することができます。

画像14

「Reputation Dashboard」では、Amazon SESアカウントの健全性を確認できます。
バウンス数や苦情数が増えてくると、アカウントの健全性が疑われてメール配信がストップされる場合があるので注意しましょう。

画像15

おわりに

Amazon SESをはじめて使ってみましたが、導入もすんなりできましたし、SPFレコードの登録が不要なのが非常に便利でした。
SPFレコードは「DNSルックアップ回数が10回まで」という制限があり、10回を超えるとSPFレコード自体が無効になり大きな問題にもなりかねないので、貴重な回数を消費せずに済むのは助かります。
SPFレコードのDNSルックアップ回数は、以下のようなツールで調べることが可能です。
https://dmarcian.com/spf-survey/

社内のちょっとした通知メール用SMTPサービスを探している方に、Amazon SESは丁度いいかもしれません。


この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!
励みになります!
23
ベンチャー企業を中心に、都内でコーポレートエンジニア/情シスとして働いています。