GitHub EnterpriseをAWSで使おう – Amazon SESを利用したEmail Notificationの設定

2016.10.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは、中山です。

GitHub Enterprise(以下GHE) on AWSシリーズの第3弾です。今回はAmazon SESを利用したEmail Notificationの設定についてご紹介します。

Email NotificationとはPRやissueを上げるとメールで通知してくれる機能のことです。GitHubユーザでしたらすでに利用したことがあると思います。ユーザアカウントに紐付いたメールアドレス宛てに通知してくれるので、すぐにこういった通知に対して気付くことができます。まだまだpush型通知は普及していないため、こういったメールというレガシーな技術を利用した通知システムは広く普及している方法の1つだと思います。

当然GHEにもこの機能はあります。ただし、GHEはインストールを自分で行うという性質上、Email Notificationの設定も自分で行う必要があります。デフォルトでは無効化されています。この機能を利用しないと通知が届かないため、ほぼ設定が必須の機能だと思います。

GHEでEmail Notificationの設定を行うにはSMTPサーバを別途構築する必要があります。GHE自身からメールを送信する機能はありません。すでにSMTPサーバがある場合は別ですが、このためだけに構築するのはセキュリティや運用面からいって結構敷居が高いのではないでしょうか。そこで今回は、フルマネージド型メールサービスであるAmazon SESを利用したEmail Notificationの設定方法をご紹介します。

注意点として、以下の点を前提とした説明になっていることをご了承ください。

  • DNSはRoute53を利用している
  • ドメインをすでに取得している
  • SESのサンドボックス環境

サンドボックス環境なので、送信先メールアドレスは検証する必要があります。実際に利用する際には以下のドキュメントを参照して、サンドボックス外に出てからご利用してください。

設定方法

早速設定方法をご紹介します。SESは現時点(2016年10月27日)で東京リージョンにまだないので、バージニア/オレゴン/アイルランドの各リージョンから選択する必要があります。今回はバージニアリージョンを利用します。

ghe3-1-2

1. SMTP認証用IAMユーザの作成

SESからメールを送信するためにSMTP認証用IAMユーザを作成します。GHEの利用シーンとしては、最小権限(SESからメールを送るだけの権限)を持ったユーザを作成して、それを利用し続けるという場合が多いと思うので、新規でユーザを作成します。ちなみに以下の権限が必要です。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "ses:SendRawEmail",
      "Resource": "*"
    }
  ]
}

もし既存ユーザからSMTP認証用ユーザ/パスワードを生成したい場合は以下のエントリを参照してください。

それでは設定方法の解説に入ります。まず、SESのメイン画面から「SMTP Settings」を押下、続けて「Create My SMTP Settings」を押下してください。

ghe3-2

すると、お馴染みのIAMの画面が出てくるので「Create」を押下して、認証情報を含んだCSVファイルをダンロードしておいてください。

ghe3-3

これでSMTP認証用IAMユーザの作成は完了です。

2. 送信元ドメインの検証

続いてSMTPに利用する送信元ドメインを検証します。SESのメイン画面から「Domains」を押下、続けて「Verify a New Domain」を押下してください。

ghe3-4

「Domain」に自分が利用したいドメインを入力します。セキュリティの向上のためにDKIMを有効化した方がよいので、下の方にある「Generate DKIM Settings」は特別な理由がない限りチェックを入れてください。DKIMについては以下のエントリが詳しいです。

最後に「Verify This Domain」を押下します。

ghe3-5

DNSサーバに登録する必要のある各種レコードの情報が表示されます。今回はDNSサーバにRoute53を利用する前提なので「Use Route 53」を押下、続けて「Create Record Sets」を押下すれば自動でレコードセットを作成してくれます。

ghe3-7

しばらくすると以下のような件名のメールが届きます。これでドメインの検証に成功したことを確認できます。

  • Amazon SES Domain Verification SUCCESS for <_YOUR_DOMAIN_> in region US East (N. Virginia)
  • Amazon SES DKIM setup SUCCESS for <_YOUR_DOMAIN_> in US East (N. Virginia) region

この時点でマネジメントコンソールを確認すると、先程設定したドメインが「verified」と表示されることが確認できます。

ghe3-6-2

3. 送信用メールアドレスの検証

SESのサンドボックス環境では、送信元アドレスも送信先アドレスも、検証されたドメインやメールアドレスのみに制限されます。今回サンドボックスでの説明になるので、送信先メールアドレスを検証しておく必要があります。

SESのメイン画面から「Email Addresses」を押下、続けて「Verify a New Email Address」を押下します。

ghe3-9

続けて検証したいメールアドレスを入力してください。

ghe3-10

しばらくすると、先程入力したメールアドレス宛てに「Amazon SES Address Verification Request in region US East (N. Virginia)」という件名のメールが届きます。本文内にあるリンクをクリックすると「Congratulations!」と記載されたページが表示されます。

ghe3-12

この時点でマネジメントコンソールから確認すると、以下のように「verified」と表示されることが確認できます。

ghe3-11

4. マネジメントコンソールからEMailの設定

ここまでくれば後はGHE側の設定のみです。「https://<hostname>/setup」にアクセスしてマネジメントコンソールを開き、「Email」の設定画面を開きます。

ghe3-13

デフォルトではチェックが無効化されている「Enable email」にチェックを入れてください。設定する必要のある各種項目と入力内容を以下に記載します。SMTP認証用の情報は先程ダウンロードしておいたCSVファイルに記載されています。

設定内容 意味 入力内容
Server address SMTPサーバのドメイン email-smtp.us-east-1.amazonaws.com(バージニアの場合)
Port GHEからSMTPサーバに接続するポート 587
Domain HELOに利用するドメイン 必要であれば変更
Authentication GHEからSMTPサーバにアクセスする際の認証方法 plain
Username SMTP認証に利用するユーザ名 IAMユーザのアクセスキー
Password SMTP認証に利用するパスワード IAMユーザのシークレットアクセスキーをHMAC-SHAで署名したもの
No-reply email address Email Notificationに利用されるFrom/Toアドレス noreply@<SESで検証したドメイン>
Support email address supportリンクに記載されるメールアドレス 必要であれば変更

全て入力すると以下のようになります。

ghe3-18

続いて「Test email settings」を押下して、SES経由でGHEからメールが送信できるか確認してください。入力する送信先メールアドレスは先程検証したものになります。

ghe3-15

テストメールの送信に成功すると、No-replyに指定したメールアドレスが送信元となっている「GitHub Enterprise: SMTP Test Email」という件名のメールが届いていることが確認できます。

ここまでくれば設定は完了です。お疲れ様でした。

Email Notificationを試してみる

続いて、実際に通知用メールが届くのか確認してみましょう。手っ取り早く適当に作成したリポジトリにissueを立てて通知メールが届くのか確認してみます。

ghe3-16

issueを立てた後、以下のような通知用メールが届けば成功です。

ghe3-17

まとめ

いかがだったでしょうか。

AWSのフルマネージドサービスを利用すれば簡単にかつ運用コストを抑えた形でEmail Notificationの設定ができることを確認しました。せっかくAWS上に構築したのだったら、こういったサービスを積極的に利用していくことをオススメします。次回以降もAWS特有の構築方法をご紹介していこうと思います。

本エントリがみなさんの参考になれば幸いです。