AWS SESで送信ドメイン認証を設定する

## <i class="fa fa-file-text-o"></i> 送信ドメイン認証
* 前回の記事では送信ドメイン認証について簡単にまとめてみました。
* 今回はAWS SESを用いて実際に送信ドメイン認証を導入してみます

送信ドメイン認証についておさらいしたい方はこちらの記事もどうぞ↓
><a href="http://qiita.com/OMOIKANESAN/items/d7a794a42b9baa46fd1f">なりすまし攻撃の危険性</a>
><a href="http://qiita.com/OMOIKANESAN/items/d7a794a42b9baa46fd1f">送信ドメイン認証</a>

##<i class="fa fa-file-text-o"></i>  AWS SESとは
>SES = Simple Email Service　の略

* AWSが提供する、メールを送ることに特化したシステムです。本来メールを送るには、いろいろとインストールをしたり、セットアップしたり、ライセンスが必要だったりします。でも、Amazon SES は単純に API を使うだけで利用出来ます。というかコンソール上でだいたいのことができます。

##<i class="fa fa-file-text-o"></i>    今回関わるものたち
* AWS SES (上述のとおり)
* AWS Route53 (AWSのDNSウェブサービス　SESを使うならこれが便利)
* Freenom (無料ドメインがもらえるDNSウェブサービス)
* Gmail 

##<i class="fa fa-file-text-o"></i> 送信ドメイン認証の導入
では本題の送信ドメイン認証の導入をしていきます。
今回はDKIMの設定をすることとします。

まずは、SESのDomainsの設定からです。AWS SESのコンソール画面へ行きます。


>![image](https://qiita-image-store.s3.amazonaws.com/0/153290/608a8a83-5c00-1144-edcb-f2f95cf4985b.png)

これはSESコンソールのDomains画面です。モザイクをかけていますが、３つドメインがありますね。



ここで、この記事のゴールを以下のように設定しましょう。

* DKIMによって認証されたドメインがこの画面に追加されていること
* DKIMによって認証されたドメインからメールを送ること

これらのゴールに向けて進めていきます。



では、次にドメインを入手します。ドメインの入手方法は以下の２つを紹介しようと思います。

> ・AWS Route53 (AWSのDNSウェブサービス　SESを使うならこれが便利)
> ・Freenom (無料ドメインがもらえるDNSウェブサービス)

#### **AWS Route53を使う場合**
送信ドメイン認証の設定は非常に簡単ですが無料のドメインは無かったと思います。
すでに持っている方はいいですが、試しにこれからやってみる程度の温度感の場合ちょっと有料だと気が引けますね。
有料でもいいから試してみたいという方はこちらの記事を参考にドメインを取得してみてください。
> http://qiita.com/sk565/items/2da1fc0c5fc676f54994

#### **無料ドメインで試す場合**
海外のサービスですが、freenomというDNSサービスを発見しました。期間はありますが、無料でドメインが取得できるのでこちらでも試すことができます。
> http://www.freenom.com/ja/freeandpaiddomains.html


さて、ドメインを入手したらいよいよ送信ドメイン認証の導入作業に入ります。

先ほどのSESコンソールのDomains画面で「verify a New Domain」を押します。
すると、以下のような画面が出てくるので、登録するドメインを入力します。
このとき、「verify a New Domain」を押す前に「Generate DKIM Settings」にチェックを入れるのをお忘れなく。
>![image](https://qiita-image-store.s3.amazonaws.com/0/153290/a1d56e09-e8b3-0888-36dd-cfd3715f22df.png)

「Verify　this Domain」を押すと、以下のようにDKIMの設定に必要なレコードが複数出てくるので、**これらを控えておいてください**。
もし、Route53で取得したドメインを使った場合は「USE Route53」のボタンが出現しこちらを押すだけでDKIMの設定が完了するので、レコードを控える必要もないです。おつかれさまでした。

>![image](https://qiita-image-store.s3.amazonaws.com/0/153290/07e458f1-31b0-6eef-035e-dcc5a66170ca.png)

Route53でドメインを取得していない場合は、先ほど控えたレコードをDNSサービス側で設定してあげなければなりません。
今回は先ほど紹介したfreenomでの作業例を紹介します。

こちらがfreenomのDNSレコード設定画面です。
取得したドメインに対して先ほど控えておいたTYPEがTXTのレコード１件と、TYPEがCNAMEのレコード３件を登録します。
>![image](https://qiita-image-store.s3.amazonaws.com/0/153290/f45bd649-3dbf-4825-26e8-5304345c8584.png)

登録が完了したら、数日待ちましょう。そのうち認証されます。

### **認証できているかどうかの確認(SESコンソール)**

認証が完了した場合、DKIM欄の「pending verification」の文字列が
>![image](https://qiita-image-store.s3.amazonaws.com/0/153290/94bcea10-d91c-02cc-2b64-a7a06d56b4b6.png)

以下のように「verified」になります。この状態になればドメインに対してDKIMの設定が完了となります。

>![image](https://qiita-image-store.s3.amazonaws.com/0/153290/0035700c-40ef-e48b-120d-0074b59e4dda.png)




##<i class="fa fa-file-text-o"></i> 送信実験
せっかくドメインの認証をしたので、メールを送ってみましょう!
SESコンソールから、先ほど認証を済ませたドメインを選択して、「Send a test Email」します。
>![image](https://qiita-image-store.s3.amazonaws.com/0/153290/a7e64320-edcf-890f-da45-ad98823dc87e.png)

テストの時は何でもいいのでGmailのアカウントに送ってみましょう。確認したいことがあるので。
>![image](https://qiita-image-store.s3.amazonaws.com/0/153290/d31d7182-aa2d-f03f-eee7-3dbcac0bf7db.png)

メールを送ったらGmailにログインしてメールを確認。
送信元を見てみましょう。別に普通やん。なんて言わないでください。DKIMが設定されていないとこうはならないのです。
>![image](https://qiita-image-store.s3.amazonaws.com/0/153290/55483c57-fafa-ed23-3d5e-3a53768d1c85.png)
**では、DKIMが設定されていないドメインからSESを使ってメールを送信したものを見てみましょう。**
>![image](https://qiita-image-store.s3.amazonaws.com/0/153290/d2fdea6e-b1e2-129f-aee3-009709cf2606.png)

「amazonses.com 経由」とありますね。
Amazon SESを使って普通にメールを送ると受け取った側のGmailでこのような表示がされてしまいます。
Gmailでは送信元アドレスのドメインとメールサーバーのドメインが違う場合には、ドメインを詐称してメールを送っている場合があるので、送信元アドレスとメールサーバーのドメインを両方表示しているというわけです。これは見栄えが悪いですし、スパム扱いされる危険性もあります。
これはDKIMの設定をSESで済ませることによって解決しますので、この記事を読んだ方はDKIM設定を行い「経由」の文字列を消せるようになったというわけです。
最高にCOOLですね。


##<i class="fa fa-file-text-o"></i> 結び
以前の記事でも書きましたが、送信ドメイン認証はもはや必須の設定とも言えるものになってきています。やってみると案外つまづくこともあると思いますので参考にしていただければ幸いです。