Amazon WorkMail - WEBインフラに不要な穴を開けないために

# 概要
Amazon EC2 でインターネット向けにＷＥＢサーバーを運用している場合、よくある仕様追加「このドメイン名でメール送受信したい」に対応。
Amazon EC2 からのメール送受信は公式では非推奨 [^1] 。
[^1]: EC2 解除申請済みの場合はこの限りではない
「安いは正義」に「ＷＥＢインフラにメールサービスを上乗せするなんて」で立ち向かう方への処方箋。

## 前提
- ドメイン名（例えば example.tld）は既に取得済み、利用可能状態と仮定します。
- 実現までのプロセスはすべて AWS リソースを使います。
- ディレクトリーサービスの既存利用なしと仮定します。~~（お金なくて検証できてない）~~


# AWS リソース

## AWS 製品
既存のディレクトリーサービスが存在せず Amazon WorkMail をミニマムスタート、かつ、AWS サービス内で完結する場合には以下が必要になります。
1. Amazon VPC
2. AWS Directory Service
3. AWS Identity and Access Management (IAM)
4. Amazon WorkMail
5. Amazon Route53

## AWS リージョン
Amazon WorkMail は、2017年8月現在、以下のリージョンで提供されています。

|Code|Name|
|:--|:--|
|us-east-1|US East (N.Virginia)|
|us-west-2|US West (Oregon)|
|eu-west-1|EU (Ireland)|

Amazon WorkMail を利用するリージョンで Amazon VPC ならび AWS Directory Service を利用開始する必要があります。


# 費用計算
## 請求金額見積もり
1. Amazon VPC  
今回のケースでは費用発生しません。
2. AWS Directory Service  
Amazon WorkMail にて Simple AD を利用する場合に限り無料となります。[^2]
[^2]: [AWS Directory Service Other Directory Types Pricing – Amazon Web Services (AWS)](https://aws.amazon.com/jp/directoryservice/other-directories-pricing/#Amazon_WorkSpaces,_Amazon_WorkDocs,_and_Amazon_WorkMail)
3. AWS Identity and Access Management (IAM)  
今回のケースでは費用発生しません。
4. Amazon WorkMail  
１ユーザーあたり１ヶ月につき 4 USD。
5. Amazon Route53  
１ホストゾーン（ドメイン名）につき 0.50 USD/月  
100 万クエリにつき 0.400 USD


## 損益分岐点
Amazon WorkMail と Amazon EC2 (t2.medium) を12ヶ月運用で比較してみます。（US East (N.Virginia)）

|Products|type|price|
|:--|:--|:--|
|Amazon EC2|t2.medium のリザーブドインスタンス（１年全額前払）|約 22.91 USD/月|
|Amazon EBS|gp2 50GB|5 USD/月|
|Amazon WorkMail|６ユーザー|24 USD/月|
|Amazon WorkMail|７ユーザー|28 UDS/月|

６ユーザーより大きなユーザー数で運用は Amazon EC2 リザーブドインスタンスの方が費用的に安価になりますが、これには冗長性等、考慮されていません。
耐障害性、可用性から考えても、この要件が発生した際には Amazon WorkMail を選択がベストプラクティスと言えます。


# オペレーション
ドメイン名 example.tld によるメール送受信を実現するために以下を行います。

1. Amazon VPC  
  - Simple AD 稼働のための Subnet を用意
2. AWS Directory Service  
  - Simple AD によるディレクトリー作成
3. AWS Identity and Access Management (IAM)  
  - 保管メールデータ暗号化に使用するキー管理のために AWS Key Management Service (KMS) を設定
4. Amazon WorkMail
5. Amazon Route53  
  - ドメイン名 example.tld のＤＮＳレコード管理


## Amazon VPC
デフォルトで用意されている VPC と Subnet でも開始可能ですが、Simple AD で利用する Subnet は public subnet である必要はありません。
private subnet (Route Table に Destination: 0.0.0.0/0 が存在しない、またはそれ以外）で可能です。
以下成果物です。要望あればキャプチャー添付。TBC。

|Name|IPv4 CIDR|Availability Zone|
|:--|:--|:--|
|simplead-a|10.0.0.0/28|us-east-1b|
|simplead-b|10.0.0.16/28|us-east-1e|


## AWS Directory Service
AWS Management Console より AWS Directory Service を選択し、Simple AD をセットアップします。
~~年々 Simple AD と AD Connector の取り扱いがざつにｎ……~~

セットアップ情報は例えば下記です。要件に合わせて読み替えます。

### Directory details

|Name|Value|remarks|
|:--|:--|:--|
|Directory type|Simple AD|固定値|
|Directory DNS|ad.example.tld||
|NetBIOS name||オプション・未記入|
|Default administrative user|Administrator|固定値|
|Administrator password|********||
|Description||オプション・未記入|
|Directory size|Small||

### VPC Details

|Name|Value|
|:--|:--|
|VPC|10.0.0.0/16|
|Subnets|simplead-a, 10.0.0.0/28, us-east-1b|
||simplead-a, 10.0.0.16/28, us-east-1e|

### Access URL
セットアップ完了後、Status: Creating から Active になれば利用可能です。
この時、Access URL を定義します。
これは Amazon WorkMail の Web メールのＵＲＬで利用します。
例えば example.awsapps.com です。


## AWS Identity and Access Management (IAM)
保存されるメール暗号化のため、暗号キーを指定します。
ここではデフォルトの aws/workmail を使います。



## Amazon WorkMail
上記までに事前準備が完了しているはずですので、ここでは Standard setup でセットアップします。

### Organizations
セットアップ情報は例えば下記です。要件に合わせて読み替えます。

|Name|Value|remarks|
|:--|:--|:--|
|Available Directories|ad.example.tld|セットアップした Simple AD|
|Master keys|aws/workmail|セットアップした KMS|

Create 押下後、Status が Creating から Active に変われば利用可能です。

### Domains
セットアップした Organization のドメイン名を定義します。
Organization のナビゲーション Domains を押下してドメイン名を定義します。
ここで先に設定した Access URL（example.awsapps.com）も確認できます。

Amazon SES と同様、ドメイン名の確認（Verify domain）が必要になります。
次項の Amazon Route53 の Hosted Zone (example.tld）に表示される下記のＤＮＳレコードを追加します。

|Recode type|Hostname|Value|remarks|
|:--|:--|:--|:--|
|TXT|_amazonses.example.tld.|（指定された文字列）|Domain verification で利用します|
|MX|example.tld.|10 inbound-smtp.us-east-1.amazonaws.com.|[^3]|
|CNAME|autodiscover.example.tld.||[^3]|
|CNAME|（指定された文字列）._domainkey.example.tld.|（指定された文字列）|DKIM セットアップ[^4]|
[^3]: [AWS のリージョンとエンドポイント](http://docs.aws.amazon.com/ja_jp/general/latest/gr/rande.html#ses_region)
[^4]: [Amazon SES での DKIM を使用した E メールの認証 - Amazon Simple Email Service](http://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/dkim.html)


### Users
同じく Organization のナビゲーション Users よりユーザー定義を行います。
ユーザー名、パスワード、メールアドレスを入力してセットアップします。
特記する箇所はないため、ここでは割愛します。


## Amazon Route53
Amazon WorkMail のセットアップ、Domains で得たＤＮＳレコード情報を Hosted Zone example.tld に登録します。
割愛します。

上記にて username@example.tld によるメール送受信が可能です。


# クライアント
## デスクトップ、モバイル
Microsoft Exchange ActiveSync プロトコルをサポートするので、以下のデスクトップ、モバイルのクライアントに対応。
- Mac Mail.app
- iPhone
- Outlook
その他要検証。TBC。
## ウェブアプリケーション
AWS Management Console, Amazon WorkMail のナビゲーション Organization settings で用意されている Web Application https://（文字列）.awsapps.com/mail よりログイン可能。[^5]
[^5]: [Log On to the Amazon WorkMail Web Application - Amazon WorkMail](http://docs.aws.amazon.com/ja_jp/workmail/latest/userguide/using_web_application.html)

# その他留意事項
## 申請関連
### サービス上限
以下、気をつけるべき箇所の抜粋です。

- １ユーザーのメールボックスは 50GB
- 送信・受信ともに１メールは 25MB
- 1 日のユーザーあたりのメッセージ送信数  宛先に関係なく、1,000 件のメッセージ
- ユーザーのエイリアス（アドレス）は 100（ハードリミット）

## Amazon SES
メール送信は Amazon SES 経由で送信されますが、WorkMail からの送信は課金対象となりません。
また API 経由では必要な送信制限解除申請（サンドボックスから取り外す）も必要ありません。

# 未記入事項
以下の機能については記載してません。to be continued.

- 移行
- ジャーナリング
- フロールール
- グループ、リソース
- 既存ＡＤ連携

# 出典
- [Amazon WorkMail User Guide](http://docs.aws.amazon.com/ja_jp/workmail/latest/userguide/index.html)  
- [よくある質問 - Amazon WorkMail | AWS](https://aws.amazon.com/jp/workmail/faqs/)

いつの日も AWS ドキュメントと FAQ は最強説。