Amazon SESでAzure App Serviceドメインを使ってみた

# はじめに

みなさん、こんにちは。Amazon SESで独自ドメインを使用することが多いと思います。そして、独自ドメインをAmazon Route 53で管理してAmazon SESを使用する例をよく見かけると思います。  
今回は、Azure DNS上で管理されたAzure App Serviceドメインを使用してAmazon SESでメールを送信してみましたので手順を紹介します。

## メールのセキュリティ

最近では送信ドメイン認証への対応を必須とする事業者も出てきており、Amazon SESを導入するにあたっての検討項目となる場合もあると思います。  
詳細な説明は割愛しますが、下表に示すキーワードについて把握しておくと良いでしょう。

| 名前 | 説明 |
| :-- | :-- |
| SPF(Sender Policy Framework) | メールを送信したときのドメインが正しいサーバーから送信されたかどうか、メールの送信元サーバのIPアドレスとDNSを利用して受信サーバで確認する|
| DKIM(DomainKeys Identified Mail) | メールを送信する際にメールヘッダに電子署名を付与して、なりすましや改ざんを受信サーバで検知する|
| DMARC(Domain-based Message Authentication, Reporting, and Conformance) | SPFやDKIMで送信元ドメインの認証に失敗した場合、送信者が受信者に対しメールをどのように取り扱うかについてのポリシーをドメインのDNSに追加して指定する仕組み |

## 前提

- AzureでApp Serviceドメインを購入済み
- App Serviceドメイン購入後、DNSレコードの管理をAzure DNSに委任済み
- Amazon SESは東京リージョンのサンドボックスを利用

## Amazon SESの設定

早速、Amazon SESの設定をしていきましょう。

### ドメインの設定

1. AWSマネジメントコンソールにログインし、Amazon Simple Email Serviceの管理画面を表示します。
2. 左側のメニューの[**ID**]を選択し、[**IDの作成**]ボタンをクリックします。
3. [**ID タイプ**]に「**ドメイン**」を選択し、[**ドメイン**]の入力欄に、購入済みのApp Serviceドメイン`(例: example.com)`を入力します。

SPF認証に合格するには、MAIL FROMドメインがEメールを送信するアプリケーション(Amazon SES)と一致する必要があります。Amazon SESのデフォルトで送信するメッセージのMAIL FROMドメインは*amazonses.com*のサブドメインとなり、あらかじめDNSに送信元IPアドレスが登録されているため、SPF認証に合格します。  
Amazon SESで独自ドメインを使用してメールを送信する場合、Amazon SESの設定でドメインを登録するだけではMAIL FROMドメインが*amazonses.com*のサブドメインのままとなります。この場合、SPF認証に合格できても、DMARCの認証で合格できず、なりすましメールと判断される可能性があります。DMARCの認証が通るようにカスタムMAIL FROMドメインを設定します。

### DMARCの設定

1. 「**カスタム MAIL FROM ドメインの使用**」にチェックをして、[**MAIL FROM ドメイン**]の入力欄にサブドメイン`(例: mail)`を入力します。ここで入力した値がEメールのFromのドメインに使用されます。
2. [**MX 障害時の動作**]は、MXレコードの設定が正しくない場合にSESでメールを送信したときの動作を選択する項目です。デフォルトの*amazonses.com*のサブドメインでメールを送信するか、メールの送信を拒否するかのどちらかになります。今回はデフォルト設定にしておきます。
3. Azure DNSでDNSレコードの管理をするので、[**DNS レコードの Route53 への発行**]は無効にします。

独自ドメインからEメールを送信する許可がAmazon SESにあることを証明するために、TXTレコードをカスタムMAIL FROMドメインのDNSに設定して公開する必要があります。TXTレコードはAzure DNSで設定します。

### DKIMの設定

DKIMは電子署名を用いてドメインを認証する技術で、メールの改ざんを検知できます。  
Amazon SESはデフォルトで*amazonses.com*のサブドメインで署名をします。DKIMは送信者ではなく、第三者の署名でも認証に合格できます。DMARCの認証では送信者の署名であることが条件なので、独自ドメインでEメールを送信する場合はDMARC認証に失敗します。DMARCの認証が通るように、DKIMの設定をします。  
DKIMの設定の選択肢は「**Easy DKIM**」、「**Deterministic Easy DKIM**」、「**DKIM 認証トークンの指定 (BYODKIM)**」の3つありますが、「**Deterministic Easy DKIM**」は大規模向け、「**DKIM 認証トークンの指定 (BYODKIM)**」は鍵の用意が必要なので、今回は「**Easy DKIM**」を選択します。

1. DKIMの詳細設定を表示して、[**ID タイプ**]に「**Easy DKIM**」を選択します。
2. DKIM 署名キーの長さは、セキュリティ強化のためにお勧めされている、「**RSA_2048_BIT**」を選択します。
3. Azure DNSでDNSレコードの管理をするので、[**DNS レコードの Route53 への発行**]は無効にします。
4. [**DKIM 署名**]を有効にします。

上記の通り、ドメインの設定、DMARCの設定、DKIMの設定を実施したら、[**IDの作成**]ボタンをクリックします。すると、IDの概要画面に遷移します。[**ID ステータス**]が[**検証保留中**]の状態になります。  
IDの概要画面を下にスクロールして、DKIMの設定や、MAIL FROMの設定で[**DNS レコードの発行**]をクリックするとDNS レコードが表示されます。

## Azure DNSの設定

Route 53で管理しているドメインの場合は、Amazon SESの設定画面経由で必要なレコードを自動で登録できますが、独自ドメインをAzure DNSで管理していますので、レコードを手動で登録します。

### DNSに指定レコードを追加

Amazon SESの管理画面で表示されているレコードセットをAzure DNSに登録していきます。

1. Azure PortalでApp Serviceドメインが設定してあるDNSゾーンを表示します。
2. 左側のメニューの[**DNS の管理**]を選択し、[**レコードセット**]をクリックします。
3. [**+ 追加**]をクリックします。レコード セットの追加画面が表示されます。
4. 以下の表のレコードセット一つずつ、追加していきます。

#### App Serviceドメインが「*example.com*」の場合のDKIMのレコードセットの設定例

| 名前 | 種類 | エイリアス |
| :-- | :-- | :-- |
| xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx._domainkey | CNAME | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.dkim.amazonses.com |
| xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx._domainkey | CNAME | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.dkim.amazonses.com |
| xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx._domainkey | CNAME | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.dkim.amazonses.com |

:::note info
CNAMEレコードの名前について、Amazon SESの管理画面上ではドメインの末尾まで表示されていますが、Azure Portalで入力する場合は、[**名前**]の入力欄にドメインの前まで(上記例の通り"*example.com*"を外した値)を入力します。  
:::

#### App Serviceドメインが「*example.com*」、カスタムMAIL FROMドメインが「*mail*」の場合の、カスタム MAIL FROM ドメインのレコードセットの例

| 名前 | 種類 | 値 |
| :-- | :-- | :-- |
| mail | TXT | v=spf1 include:amazonses.com ~all |
| mail | MX | 10 feedback-smtp.ap-northeast-1.amazonses.com |

:::note info
- TXTレコード、MXレコードの名前について、Amazon SESの管理画面上ではドメインの末尾まで表示されていますが、Azure Portalで入力する場合は、[**名前**]の入力欄にドメインの前まで(上記例の通り"*example.com*"を外した値)を入力します。  
- Azure Portalの場合は、TXTレコードの値を引用符「"」で囲む必要はありません。  
- MXレコードについて、Azure Portal場合は[**優先設定**]と[**メール交換**]のように入力欄が分かれているので、[**優先設定**]に`10`、[**メール交換**]に`feedback-smtp.ap-northeast-1.amazonses.com`を設定します。
:::

### ドメイン検証のステータス確認

Amazon SESの管理画面に戻り、しばらくすると、[**DKIM の設定**]と[**MAIL FROM 設定**]のステータスが「**保留中**」から「**成功**」に変わり、[**ID ステータス**]が「**検証保留中**」から「**検証済み**」に変わります。

## テストメールの宛先アドレスの登録

今回は、サンドボックス環境なので、テストメールの宛先のEメールアドレスを登録します。

1. AWSマネジメントコンソールにログインし、Amazon Simple Email Serviceの管理画面を表示します。
2. 左側のメニューの[**ID**]を選択し、[**IDの作成**]ボタンをクリックします。
3. [**ID タイプ**]に「**E メールアドレス**」を選択し、[**E メールアドレス**]の入力欄に、テストメールの宛先となるEメールアドレスを入力します。
4. Amazon SESから入力したEメールアドレス宛に認証メールが送られてくるので、メールに記載されているURLをクリックします。

## テストメールの送信

1. AWSマネジメントコンソールにログインし、Amazon Simple Email Serviceの管理画面を表示します。
2. 左側のメニューの[**ID**]を選択し、IDとして登録したドメインを選択し、概要画面を表示します。
3. [**テスト E メールの送信**]ボタンをクリックします。
4. [**From-address**]に送信元メールアドレスの@より前の名前を入力します。(送信専用なので何でも良いです。)
5. [**シナリオ**]はプルダウンで「**カスタム**」を選択します。
6. [**カスタム受信者**]にサンドボックスに登録したEメールアドレスを指定します。
7. [**件名**]と[**本文**]にメッセージの件名と本文を入力します。
8. [**テスト E メールの送信**]ボタンをクリックします。

以上により、指定した宛先にテストメールが届きます。

# おわりに

今回はAmazon SESのサンドボックス環境を使って試してみましたが、いかがでしたでしょうか？  
本記事が、独自ドメインをAmazon SESで利用する上で参考になれば幸いです。

---

- AWS は、米国その他の諸国における Amazon.com, Inc. またはその関連会社の商標です。
- Microsoft Azure は，Microsoft Corporation の商標または登録商標です。
- その他、本資料に記述してある会社名、製品名は、各社の登録商品または商標です。