AWS SESを有効化してみた

AWS SESを有効化してみた

前回の投稿(WordPressの管理者パスワードを忘れたのでリセットしてみた)の末尾で書いた通り、
早急にWordpressでメールの送受信ができるようにしたいということで。

とりあえずAWS SESを有効化してみようと思います。

有効化手順

1.マネコンからSESを開く

2.左ペインの「ID」から「IDの作成」をクリック

3.以下の通り値を設定する

IDの詳細

項目備考
IDタイプドメイン・Route53でドメイン設定していると勝手に設定してくれるのでおすすめ
・「Eメールアドレス」を選ぶとドメインを持っていなくてもSESを使えるようにはなるが、本番環境に移行できない他ドメインより制限が強くなる、らしい。一個でもドメインでIDを作成しておくと、その後メールアドレスをIDとして追加しても制限されないとのことなので、最低1個はドメインで作っておくのがおすすめ。
ドメイン任意Route53で管理してるドメインが良い
デフォルト設定セットの割り当てチェックなし設定セットはデフォルト設定(サプレッションリストとか)を上書きして、このIDに特別な(デフォルトとは異なる)設定をしたいときにチェックを付ける。Redherringの場合そこまでの要望は無いのでスルー。
テナントに割り当てるチェックなしIDをテナントごとに割り当てることでそれぞれのID間で影響が及ばない(いわゆるノイジーネイバー対策)ようにできる。
Redherringの場合そこまでの(以下略)
カスタムMAIL FROMドメインの使用チェックあり
→ 任意のドメインを設定
チェックを付けるとMAIL FROMアドレスが自身のドメインのアドレスにできる。
チェックを付けないとamazonses.comのアドレスになる。
MAIL FROMアドレスが自身で管理しているドメインになるとSPF/DKIM/DMARC辺りの設定が自身の管理下できるようになる。
イマイチよくわからないって人が、チェックを付けて(ほかの設定も正しくすれば)セキュリティ的に良くなるよ、ってことで。自身のドメインをRoute53で管理してる人はとりあえずチェックを付けておくのがおすすめ。
DNSレコードのRoute53レコードへの発行有効化にチェックを付けるチェックを付けると、Route53に必要なレコードを自動発行してくれる

ドメインの検証

項目備考
IDタイプEasy DKIM・「Deterministic Easy DKIM」は別リージョンで既にDKIMを設定している場合に流用できるみたい
・「DKIM認証トークンの指定」は手動でDKIMを設定する場合選ぶみたい
DKIM署名キーの長さRSA_2048_BIT2048の方がおススメ、って書いてあるのでこっちを選択
DNSレコードのRoute53への発行有効化にチェックを付けるチェックを付けると、Route53に必要なレコードを自動発行してくれる
DKIM署名有効化にチェックを付ける無効にするのは推奨されません、って書いてあるので大人しくチェックを付けておく
タグ適宜必要に応じて設定(下のスクショは見切れてて写ってないけど)
特段設定したい要望は無いので空のままにしておく

投入して問題なさそうなら「IDの作成」をクリック。

4.IDステータスが「検証保留中」から「検証済み」に遷移するのを待つ
この時画面上部にDNSレコードを更新するようにアナウンスが出るが、前項で「DNSレコードのRoute53レコードへの発行」にチェックを付けていれば自動でRoute53に連携されるので、そのまま待機でOK。
 ※ Amazon SES Custom MAIL FROM Domain Setup SUCCESSとかDKIM setup SUCCESSって
   タイトルのメールが届くのでそれを待っても良い、けどマネコン上で見た方が早いかと。
 ※ Redherringの場合検証済みになるまで3分かかりませんでしたw

逆にチェックを外したり、Rotue53以外でドメインを管理している場合は画面下部の「認証」タブにDKIMやカスタムMAIL FROMドメインのDNS登録方法が記載されているので、それらを参照の上設定すれば良き。

5.DMARCレコードの登録
何故かこれは自動で発行されないので手動で。。。

「認証」タブの下部にあるDMARCの欄から「DNSレコードの発行」プルダウンを開いてTXTレコードの名前と値を確認する。
右上にある「DNSレコードのRoute53への発行」をクリック。

「レコードを発行しました」って出てくればOK。必要に応じてRoute53を確認すること。

このSESについては個人ブログ+αくらいでしか使う予定が無いので。
DMARCの設定はp=none(検証失敗時にそのまま受信を許可する)で良いと思うものの、
一応曲がりなりにも支援士を取った人としてはもうちょっとセキュリティを強めにしても良いかなと思うところもあり。。。
p=quarantine(検証失敗時に迷惑メールとして隔離)に設定(DNSレコード)を手動で変更しておいた。
(いやp=reject(検証失敗時に受信拒否)でも良いんだけど、なんか設定ミスっててメール届きませんでした、ってなると悲しくなるのでw)

サンドボックスの解除はしなくて…いいよね?

実は今この段階ではSESはサンドボックスと呼ばれる制限を受けた環境下にある。
メールの送信は「予め検証したアドレスでないと送信できない」「24時間当たりのメール送信数が200件まで」などの制限がある。

本来企業が広告メールなど送るような、いわゆる商用環境でSESを使用する場合はメール送信に制限を受けない(=不特定多数のアドレス宛に送信できる)ようにする必要がある。
ここで「本番アクセスをリクエスト」という手続きをとることで、サンドボックスが解除され、メールを自由に送信できるようになる…ものの。

本番アクセスのリクエストをする際にはAWSサポートに対して、どのような理由で、どういったサービスに使うためにリクエストをする、みたいなことを事細かに書かなければいけない(仕事で経験済み)のだが、正直そこまで欲求が無い。
個人ブログで一日200通以上のメールとか送る訳ないし、自分の個人アドレスにしか送らないし。
ってことで本番アクセスのリクエストは見送り、サンドボックス環境下で使用継続する。
(サンドボックス解除の手続き方法が知りたかった読者の皆様ごめんなさい…m(__)m)

メルアドを追加登録してSESからメールを送れるようにする

ただこのままだとRedherring個人のメルアドにも送信できないので、IDに追加して送信できるようにしておく。

もう一度「ID」の画面を開いて「IDの作成」をクリック。

IDタイプは「Eメールアドレス」をチェックして、送信できるようにしたい任意のアドレスを設定。
それ以外はそのままで良き。

設定事項はこれくらいなので、そのまま「IDの作成」をクリック。

しばらく待っていると、設定したアドレス宛に「 Email Address Verification Request」って冠したメールが届くので、本文中に記載のあるリンクへアクセスして、以下のような画面が表示されればOK。

マネコンに戻ってIDステータスが「検証済み」になっていれば登録完了。

フィードバック通知設定

この状態でも問題なく動作するが。追加で設定しておきたいものがあるので実施。
というのも、フィードバック通知という、BounceやComplaintが発生した時の通知設定がされていないということでその設定を行う。

(余談1)BounceとかComplaintって何?

Bounce(バウンス)というのは、送信したメールが受信側に届かなかったり、受信拒否されて送信元に戻ってくることを指す。よくあるのは受信者のメールボックスが一杯でこれ以上受信できないとか、そもそもメールアドレスが存在しないとか。
Complaint(苦情)というのは、メール受信者が迷惑メールと判断・報告したことを指す。Gmailとかでも「迷惑メールを報告」とか「フィッシングを報告」みたいな機能があると思うが、受信者が迷惑メールと判断するとSES側にその旨が通知されるようになっている。

これらが発生した場合メールが意図した人に届いていない可能性が高いので、発生した旨を通知するようにしておくと良い。
(サンドボックスの場合そもそも予め登録したアドレスにしか送信できないのであんまり関係ない気もするけどもw)

(余談2)サプレッションリストって何?

SESにはデフォルトでサプレッションリストという機能があり、BounceやComplaintが発生した際に当該送信先アドレスへのメール送信を自動的にブロックするようにデフォルトで設定されている。
この機能によってBounce率とかComplaint率の上昇を防ぐことができる。

…え?Bounce率が上がると何が困るかって?
AWS公式ではBounce率は2%、Complaint率は0.1%未満に抑えるようにアナウンスされていて、
ある一定の割合を超えるとSESの送信機能がブロックされて、メール送信できなくなります。
(仕事でこの事象に直面して阿鼻叫喚の騒ぎになった記憶が。。。特段事情もなくサプレッションリストをオフにしちゃダメという教訓を得ましたw)

サプレッションリストを設定しておけば直ちに発生率は上昇しないものの、発生した通知を受けて諸々確認する、ということはした方が良いので。
Bounce/Complaintの発生通知設定をしておくことを強くお勧めします。

ということで設定開始。
フィードバック通知の設定にはSNSトピックが必要なので、その設定から。

1.マネコンからSNSを開いて、左ペインの「トピック」から「トピックの作成」をクリック。

2.以下の通り設定を投入
投入出来たら画面下部の「トピックの作成」をクリック。

項目備考
タイプスタンダードメールを送りたいとかなら「スタンダード」一択。FIFOはSQSでしか使用できないので注意。
名前任意の値を設定
表示名・他諸々オプション(必要に応じて)任意の値を設定

3.サブスクリプションの登録
SNSトピックに紐付くサブスクリプションを設定する。

対象のSNSトピックの「サブスクリプション」タブから「サブスクリプションの作成」をクリック。

プロトコルに「Eメール」を選択し、エンドポイントに「通知先となるメールアドレス」を入力してから、「サブスクリプションの作成」をクリック。

no-reply@sns.amazonaws.comからAWS Notificationと冠したメールが届く。
(Redherringの場合は迷惑メールに届いてましたw)

5.サブスクリプションの承認
メール本文内にあるリンクをそのまま踏む、でも良いけれど…今回はちょっと特殊なやり方をしてみる。
このやり方だと、メール受信時に本文中に記載のある「登録解除リンク」を誤って踏んでも登録が解除されないようになる。
(いやそこまでせんでええよ、って方は普通にリンクを踏めばOK)

メール本文中の「Confirm Subscription」と書かれたリンクを踏まずにコピーしておく。

もう一度対象トピックの「サブスクリプション」タブを開くと、先程登録したアドレスが「保留中の確認」というステータスで登録されていることがわかるので、レコードを選択してから「サブスクリプションの確認」をクリックする。

出てきたポップアップに先程コピーしたリンクを貼り付けて「サブスクリプションの確認」をクリック。

正常終了のメッセージが出て、ステータスが「確認済み」になればOK。

6.SESのフィードバック通知にSNSトピックを割り当てる
ここまで来てやっとSES側の設定ができる。

SESの画面から対象IDの詳細画面を開いて、「通知」タブを開く。
その中にあるフィードバック通知欄の「編集」をクリックする。

バウンス(Bounce)/苦情(Complaint)/配信のフィードバックにそれぞれSNSトピックを指定する。
「変更の保存」をクリックして設定完了。

この時各々設定したSNSトピックに紐付くアドレス宛に、バウンス(Bounce)/苦情(Complaint)/配信のフィードバック通知が割り当てられた旨の通知が届くので参考までに。

(余談3)Eメールのフィードバック転送って何?

実はSNSとしてフィードバック通知を明示的に設定しなくても、「Eメールのフィードバック転送」を有効化しておくと、バウンスとかの発生通知は行われる、のだが。

この時の通知先は、「メールの送信元」or「メール送信時にReturn-Pathとして明示的に設定したアドレス」宛になる。

今回のケースではWordpressでの使用を想定しているが、ざっと調べたところWordpressで明示的にReturn-Pathを指定することができず、メールの送信元(この場合SES宛)にバウンス他の発生を通知するか否か、しか設定出来無さそうな雰囲気を感じた。

ってことでSNSトピックを設定して、それとは別にフィードバック通知がされるように設定した。
別にSES宛にメール来ても気づいたり転送したりする仕組みがあるよ、って方はSNSは無くても良さそう。
(Redherringも別途転送の仕組みを導入して、SNSトピックの利用を撤廃する、かも。その時はまた別途記事にして投稿します。)

ちなみに。
そもそもSESを使う通知先がRedherring宛の個人アドレスなんだからComplaintとか気にしなくて良くね?って思った方…君のような勘のいいガキは嫌いだよ

いや別に特別な理由がある訳じゃないんですが、ちょっと仕事でトラブったのが若干トラウマになってまして。送信先ほぼ固定だし不特定のアドレスじゃないから気にしなくていいよね…って設定をケチった結果盛大にトラブったのが尾を引いてまして…まあ様式美ってことで。

動作確認

せっかく設定したものの設定が正しいかどうか確認できないのも不安…ですよね?
実はマネコン上からテストメールを送る機能があるので動作を確認しておく。

画面右上の「テストEメールの送信」をクリック。

以下の通り値を入力。
設定出来たら「テストEメールの送信」をクリック。
(送信先のアドレスが前項の操作でIDに登録されていないと送信エラーになるので注意)

項目備考
Eメール形式フォーマット済みRawにするとHTMLメールとかも送れるみたい
From-address任意の値を設定ここで設定したアドレスからメール送信される
シナリオカスタム
→「カスタム受信者」に任意の送信先アドレスを設定
色々あるけど任意の受信アドレスを設定できるので「カスタム」を選択
件名、本文適宜設定
設定セット、追加設定特に設定なし「追加設定」プルダウンを開くとCCとかBCCの設定とかが出てくるので必要に応じて設定

指定したアドレス宛にメールが届くことを確認する。
ついでにSPF/DKIM/DMARCが正常に動作しているかを確認する。
Gmailであればメールの「その他」(…が縦に並んでるボタン)から「原文を表示」をクリックするとブラウザで以下のように開くのでそれぞれの欄が”PASS”になっていることが確認できればOK。


本当ならWordpressの設定まで書きたかったんですが、思った以上にボリュームが出てきたので。
そのくだりは次回書くことにします。

ということで今回はここまで。