[作業記録] 続・Cloud IdentityでGCPの組織をつくる (Amazon SESでメールを受信する)

# これはなんですか
- GCPの組織を作った時の作業記録です。
- 2021年2月現在の状況を記録します。
- [[作業記録] Cloud IdentityでGCPの組織をつくる](https://qiita.com/Hikosaburou/items/856134eb160990534f32) とは以下の点で差分があります。
    - ゾーン管理をAmazon Route53で行います
    - メール受信をAmazon SESで行います。


# 作業内容
以下を実施しました。

- ドメインの取得
    - ムームードメインで取得しました
- Amazon Route53 設定
    - 取得したドメイン名のゾーン管理を行います
- Amazon SES 設定
    - ドメインに紐づくメール受信設定をします
    - S3バケットにメールを保存する設定を行います
- Cloud Identity の登録
    - 取得したドメイン・メール設定を利用しました。

今回はCloud Identityを設定とGCP組織の作成を同時に行います。

# 前回の問題点と解決策

前回（[[作業記録] Cloud IdentityでGCPの組織をつくる](https://qiita.com/Hikosaburou/items/856134eb160990534f32)）の設定では、ムームーメールを使ってメール受信環境を整えました。ただこの方法では、ドメイン名のゾーン管理が **ムームーDNSに制限される** という問題がありました。諸事情でAmazon Ruote53でゾーン管理をしたくなったので、この縛りは大きな問題となります。

解決案としては、Google WorkspaceやMicrosoft 365のようなSaaSを使う方法や、メール送信クラウド (SendGridの受信機能) を使う方法がありますが、今回は **Amazon SESのメール受信機能** を使うことにしました。

選定理由は以下の3点です。

- Amazon Route53でゾーン管理をしたいので、同じAWSのサービスであるAmazon SESを使う方が管理上楽だから。
    - SendGridのようなメール送信サービスでも費用面含め問題ないとは思うが、管理対象が増えるのは面倒なのでできるだけ避けたい。
- SaaSの場合はメール以外のリッチな機能がある分費用が高くつく可能性が高いから。
    - 1ユーザー5,600円〜のため、ムームーメールよりは安いけど、少し高い。
- 単純にSES設定に興味があったから。

この辺りの設定についてはAWSのドキュメントに加えて、以下のクラスメソッドさんのブログ、Qiita記事を参考にしました。

- [Amazon SES を使用した E メールの受信 - Amazon Simple Email Service](https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/receiving-email.html)
- [[新機能]Amazon SES でメール受信が出来るようになりました！ | DevelopersIO](https://dev.classmethod.jp/articles/receiving-email-with-amazon-ses/)（2015年の記事なので、概念を理解するために確認しました）
- [Amazon SES で独自ドメインのメール受信設定 - Qiita](https://qiita.com/u-bayashi/items/28936c4df1935da154d4)

# 作業記録

以下、作業記録です。

## ドメインの取得
前回取得したドメインはムームーメールの設定解除ができず、ゾーン管理をムームーDNSからRoute53に移せなかったため、新規に取得しました。以下、 `example.com` と表記します。

## Route53 Hosted Zone 設定
取得したドメインのゾーンをRoute53で管理するため、Route53で新たに `example.com` のHosted Zoneを作成します。Hosted Zoneを作成するとNSレコードが登録されています。

![スクリーンショット 2021-02-24 13.30.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236562/3f607f0a-5efa-c366-aa32-ca622476870b.png)

ムームードメインの[ネームサーバー設定](https://muumuu-domain.com/?mode=conpane&state=dns)にて、Route53 Hosted ZoneのNSレコードの値をひとつづつ入力します。

![スクリーンショット 2021-02-24 13.27.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236562/e58350bd-c908-f61d-9c0a-c7d156da4fff.png)

ムームードメインのネームサーバー設定ページに書かれているとおり、ネームサーバー設定は反映までに時間がかかることがあります。(自分の場合はドメイン取得から続けて設定していたので、さらに時間がかかりました)

## Amazon SES設定

Amazon SESでメール受信設定を行います。[東京リージョンではメール受信が対応していない](https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/regions.html#region-receive-email)ので、バージニア北部 (us-east-1) リージョンで作業します。

### ドメイン検証

[チュートリアル](https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/receiving-email-getting-started-verify.html)を参考にドメインの検証を行います。コンソールの画面に従って `example.com` のドメインを検証します。SESダッシュボードの [Domains] > [Verify a New Domain] から指示に従って設定すれば、検証用のTXTレコードと受信用のMXレコードがRoute53 Hosted Zoneに作成されます。

![スクリーンショット 2021-02-24 18.20.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236562/4a94bd67-2c2e-7c97-2de1-c298b815f3d5.png)

### メール受信設定

引き続き[チュートリアル](https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/receiving-email-getting-started-receipt-rule.html)に沿ってメール受信設定をします。SESダッシュボードの [Rule Sets] > [Create a Receipt Rule] でルールを作成します。

以下設定例です。ドメイン名は適宜読み替えてください。

- **受信者**: `admin_at_example_com`
- **アクションタイプ**: S3
    - **S3バケット**: 作成(任意のバケット名)
    - **Object key prefix**: `admin` (任意で設定)
    - **Encrypt Message**: なし (任意で設定)
    - **SNS Topic**: None (任意で設定)
- **ルール名**: `admin@example.com`
    - Enabled, Enable spam and virus scanning を有効にする
- ルールセット、ルールの位置はデフォルト

### メール受信テスト

作成したルールセットが有効であることを確認します。 `admin@example.com` にメールを送信し、S3バケットにメールファイルが格納されていることが確認できればOKです。

ファイルは `eml`, `mht` 等の拡張子を付与することで対応するソフトで閲覧できます。

### 予算アラート設定

Amazon Route53, Amazon SESはいずれも従量課金サービスのため、思わぬ請求を避けるため予算アラートを設定しておきます。AWSのBillingコンソールから [Budgets] > [予算を作成] を選択し、予算アラートを新規作成します。今回はAmazon Route53とAmazon SESの費用の合計が次の閾値を超えた場合にメールを飛ばす設定をしました。

- 月額予測が予算の80％を超えた場合
- 月額実績値が予算の100%を超えた場合

なお、AWSアカウント内でこれまでに各サービスを利用してなかった場合、フィルタ設定ができないかもしれません。その場合は課金状況が最新に反映されるのを待ちましょう。


## Cloud Identity への登録作業

以降は [[作業記録] Cloud IdentityでGCPの組織をつくる](https://qiita.com/Hikosaburou/items/856134eb160990534f32) と同じ手順で設定します。`admin@example.com` 宛のメールを確認する場合は先ほどと同じ要領でメールを開き、設定を進めればOKです。ただし、連絡先のメールアドレスを見ておけば登録自体は問題なくできるので特に気にしなくていいかもしれません。

## GCP組織設定

GCPのコンソールを見たら、 [IAMとアカウント] > [IDと組織] > [チェックリスト] に組織周りの設定がチュートリアル形式でまとめられていました。複数人の組織でGCPを運用する場合はこれに沿って設定すれば良さそうです。

# まとめと感想

- Cloud Identityを登録して、GCP組織を設定しました。
- Amazon Route53 + Amazon SESを使ってメール受信環境を整備しました。
- 検証用途であれば安上がりで済むので、SaaS他のサービスを使うよりも優秀だと思います。
    - 本格運用する場合は初めからGoogle Workspaceを使う方が良いと思いました。

# ToDo

- メール受信時のIPアドレスフィルタリングを検討する。
    - どんなメールでも受信してしまうと費用に跳ね返るので、GCP関係のメール以外は拒否しておきたい。
- GCP組織を作成するためにメール受信環境が必要かどうかを検証する。