🛡️

Auth0のメールプロバイダーにAmazon SESを使う場合はアクセスキーを登録せず、SMTPプロバイダーとして登録した方が安全という話

2024/11/18に公開

概要

Auth0のデフォルトのメールプロバイダー(Auth0で用意しているもの)では、いくつか制限事項があるため、別のメールプロバイダーを設定する必要があります。
そういった場合に、AWSを使っている環境ではAmazon SESを使うと簡単に外部メールプロバイダーのセットアップとメール配信のための設定ができます。
Auth0のメールプロバイダーにAmzon SESを使う場合に、

  • Amazon SES を選択し、認証情報(IAM情報)を設定する
  • SMTP Providerを選択し、Amazon SESをSMTPサーバーとしてSMTPの認証情報を設定する
    の2つの選択肢があるのですが、後者の方が安全であるという話になります。

ここでの具体的な制限事項としては、
・メールテンプレートのカスタマイズができない
・送信元アドレスを変えられない
などになります。

Auth0のEmail Provider設定画面:

参考:
https://dev.classmethod.jp/articles/use-amazon-ses-as-email-provider-to-remove-email-delivery-restrictions-in-auth0/

なぜSMTP Providerを選んだほうが安全か

前置き

タイトルで主張しておいてなんですが、めちゃくちゃ差があるわけでもなく、IAM情報を入れてはいけないというわけではない、というスタンスです。そのため、参考として載せさせていただいたクラスメソッドさんの記事のようにIAM情報を登録してAmazon SESをメールプロバイダーに設定するのも選択肢のひとつだと考えています。

Amazon SES方式の場合(IAM認証情報を入れる場合)

この方法ではIAMユーザーを作成して、アクセスキーとシークレットキーを発行し、それを登録します。その際に、IAMユーザーに付与する権限をSESのメール送信のみに絞ることでアクセスキーの漏洩などがあった場合でも他の操作はできない状態となります。
しかし、最小権限で運用を始めても、誤って強い権限が与えられるリスクやそのアクセスキーが漏洩、他でも使われる可能性があります。そういったリスクに備えるためにアクセスキーのローテーションを推奨していたり、なるべくアクセスキーのような長期的認証情報を作成するのではなく、IAM ロールなどの一時的なセキュリティ認証情報を使用することがAWSのドキュメントに書かれています。

この方式のAuth0での入力画面はこちらです:

SMTP 方式の場合(IAM認証情報を入れる場合)

この方法の実現方法はこちらのAuth0側のドキュメントに書かれています。
https://auth0.com/docs/customize/email/smtp-email-providers/configure-amazon-ses-as-external-smtp-email-provider

手順としてはこのようになります。SESでドメイン(ID)の設定は完了している前提とします。

SESのサービス画面からSMTP認証情報を発行する

  1. SMTP認証情報を発行
  2. 作成されるIAMユーザーの情報を入力

    ※ 記事作成のために作成して削除済みのユーザーです
  3. SMTP認証情報を取得

    ユーザー名 / パスワードが後ほど必要です。

ここで取得したユーザー名/パスワードを使うことでAmzon SESをSMTPサーバーをして使うことができるようになります。

この方式のAuth0での入力画面はこちらです:

セキュリティ面の比較

説明が長くなってしまったので、2つの方法をセキュリティ観点で比較し直すとこのようになります。

  • Amazon SES を選択し、認証情報(IAM情報)を設定する場合
    • IAMユーザーを使うことがそもそも推奨ではない
    • アクセスキーの漏洩による事故が多くリスクが高い
  • SMTP Providerを選択し、Amazon SESをSMTPサーバーとしてSMTPの認証情報を設定する
    • ユーザー名/パスワードによる認証なので漏洩のリスクはゼロではない
    • 漏洩したとしてもSMTPプロトコルにのみ影響範囲が留められる

まとめ

本番環境でAuth0を使う場合、メールのテンプレートを変更したい、メール送信元を独自のドメインのものにしたい、といったユースケースがあり、メールプロバイダーを設定するケースは多いのではないかと思います。そのメールプロバイダーの選択肢は多いですが、今回はAmazon SESを使っている場合にセキュリティ面を考慮するとどのような方法で設定するのが良いのかについて書きました。

書こうと思ったモチベーションとしては、自分も今までIAM認証の情報をAuth0に渡すしか方法を知らなかったのと、SMTPプロバイダーとしてAmazon SESを使う方法の記事があまり見つけられなかったので書いてみました。

この記事が誰かの役に立てば幸いです!

Discussion