Amazon SESでDMARC対応した会社メールアドレスを使うには

SCSK 永見です。

私が管理しているAWS環境では、aws health aware ( https://github.com/aws-samples/aws-health-aware )で、health eventをメール送信しています。
その中で使われているAmazon Simple Email Service ( 以下「SES」) に、fromアドレスとして会社ドメイン(@scsk.jp)の自分自身のメールアドレスを指定しています。

そんな中、社内の迷惑メール対策として、DMARC対応をする動きがありました。
このままだとポリシーに違反するので、DKIM署名を有効化することでDMARC認証をパスできるよう設定しました。

結論

SESのIDタイプ:Eメールアドレス で、@scsk.jpのメールアドレスを登録する。
SESのIDタイプ:ドメインで、scsk.jpドメインを登録し、その際に指定されるDNSレコードを、会社のDNSサーバに登録してもらう。
そのうえで、@scsk.jpのメールアドレスをSESの送信に用いる。

前提事項

この記事における前提事項を2つ記載します。

SPF、DKIM、DMARCの理解

これらの説明は今回の本筋ではないため、これらの説明は省略します。最低限の理解として

  • SPFという、IPアドレスを使った、メールの正当性を確かめる認証技術
  • DKIMという、電子署名を使った、メールの正当性を確かめる認証技術
  • アライメントという、SPF/DKIMで認証したドメインと、fromアドレスが一致しているかの確認
  • DMARCという、SPF認証・SPFアライメント、DKIM認証・DKIMアライメントが成功しているかの判定、および失敗した場合の処理を定めるメカニズム

と押さえておいてください。

今回はDKIM認証・DKIMアライメントを成功させることで、DMARCの認証をパスできるようにします。

メールアドレスの設定

最初の結論で記載した「@scsk.jpのメールアドレスを登録する」についてです。
SESへ自分自身のメールアドレスを設定する作業は、先に完了している前提でこの記事を記載しています。
ドメインの登録とメールアドレスの登録、これらは順不同です。

DKIMを設定していないとどうなるか

SESのコンソールからテストメールを送ってみましょう。「テストEメールの送信」から送ることができます。
Gmailの表記がわかりやすいので、試しにGmail宛てにテストメールを送ります。

ちなみに、追加設定 のReturn-pathやCcに、自分が受信できる別のメールアドレスを入れておくと
何か起きたときでも原因追及ができます。

Gmailにて受信したメールを開き
右上の三点リーダ → 「メッセージのソースを表示」を選択すると、DMARC認証に失敗していることがわかります。

  • 「@amazonses.com」のDKIM認証は成功
  • DKIMアライメントに失敗
    • DKIM認証した「@amazonses.com」と、ヘッダfromである「@scsk.jp」が一致していないため

という状態です。

DKIMの設定方法

EasyDKIMとBYODKIMの2つ方法があるので、それぞれ説明します。設定はどちらか一方で問題ありません。
※検証時点に基づいた手順となります。最新の手順は公式ドキュメントを参照ください。

EasyDKIM:https://docs.aws.amazon.com/ja_jp/ses/latest/dg/send-email-authentication-dkim-easy.html

BYODKIM:https://docs.aws.amazon.com/ja_jp/ses/latest/dg/send-email-authentication-dkim-bring-your-own.html

設定方法:EasyDKIM

  • SES のコンソールからIDへ遷移します
  • 「IDの作成」を選択し、以下のように設定をします。ポイントは
    • ドメインは会社ドメインを記入します(青矢印部分)。
    • IDタイプはEasy DKIM を選択します。
    • DNS レコードの Route53 への発行 は 有効化のチェックを外します(赤矢印部分、会社DNSサーバにレコード登録するため)

  • その後、IDステータスが「検証準備中」の状態で、3つのDNSレコード(CNAME)が表示されます。これらを会社の情シスなどDNS管理をしている部署に、登録依頼を出します。
    • 一番下のdmarcにあるTXTレコードは、弊社会社全体でDMARCポリシーが決まっているので、今回は登録依頼を出しません。

  • 登録が完了すると、IDステータスが「検証済み」となり、認証に成功した旨のメールがルートユーザのメールアドレス宛てに届きます。

設定方法:BYODKIM

  • キーファイルを作成します。今回はCloudShellを使って作成します。

  • CloudShellにて下記コマンドを実行し、作成します。
    • キーファイルのファイル名(斜体)は任意です。
    • 以下の説明では2048ビット、パブリックキーのファイル名をscsk-public.key、プライベートキーのファイル名をscsk-private.keyとして説明します。
openssl genrsa -f4 -out scsk-private.key 2048
openssl rsa -in scsk-private.key -outform PEM -pubout -out scsk-public.key
  • アクション → ファイルのダウンロード から、scsk-private.key、scsk-public.key のキーファイルのファイル名を入力し、ローカルPCにダウンロードします。
    • いっぺんにダウンロードできないので、それぞれダウンロードしましょう。

  • SES のコンソールからIDへ遷移します。
  • 「IDの作成」を選択し、以下ポイントを踏まえて設定をします。
    • ドメインは会社ドメインを記入します(青矢印部分)。
    • プライベートキーはscsk-private.keyをテキストエディタで開いて、以下の加工を施したのちに貼り付けます。
      • —–BEGIN PRIVATE KEY—– と —–END PRIVATE KEY—– を削除する。
      • 改行を削除し、1行にする。
    • セレクター名はDNS レコード内で一意になるような任意の値を入れます(赤矢印部分)。

  • その後、IDステータスが「検証準備中」の状態で、DNSレコード(TXTレコード)が表示されます。これを会社の情シスなどDNS管理をしている部署に、登録依頼を出します。
    • p=customerProvidedPublicKey の customerProvidedPublicKey の値は、scsk-public.keyの中身を、以下の加工を施して入力します。
      • —–BEGIN PRIVATE KEY—– と —–END PRIVATE KEY—– を削除する
      • 改行を削除し、1行にする。
      • 255文字以上にならないよう、文字列を分割して指定する(“p=ab..cd” “ef..gh” のような形式)
    • 一番下のdmarcにあるTXTレコードは、弊社会社全体でDMARCポリシーが決まっているので、今回は登録依頼を出しません。

  • 登録が完了すると、IDステータスが「検証済み」となり、認証に成功した旨のメールがルートユーザのメールアドレス宛てに届きます。

設定が完了しているかの確認

DKIM署名が有効化されている状態で、テストメールを送ってみましょう。「テストEメールの送信」から送ることができます。
例によって、Gmail宛てにテストメールを送ってみましょう。

Gmailにて受信したメールを開き
右上の三点リーダ → 「メッセージのソースを表示」を選択すると、DMARC認証に成功していることがわかります。

  • 「@amazonses.com」のDKIM認証は成功
  • DKIMアライメントに成功
    • DKIM認証した「@scsk.jp」と、ヘッダfromである「@scsk.jp」が一致しているため

という状態です。

Tips

検証段階で調べて知ったことを2点補足します。

IDステータスがエラーの時は

DNSの登録に時間がかかり、IDステータスがエラーになることがあります。

そんなときは、DNS登録完了後、CloudShellで下記を実行することで、再度認証処理をすることができます。

aws sesv2 get-email-identity --email-identity scsk.jp

Gmail以外に送って設定確認をする

Gmailに送る以外で設定確認する方法としては、メールヘッダーを確認する方法があります。
「メッセージのソースを表示」の下に書いてある、小難しい英字の羅列のことです。
これはどのメーラーでも表示することができるはずです。
※確認方法はメーラーによって異なるので、お使いのメーラーでの確認方法を調べてみてください。

メールヘッダーを表示できたら、「dmarc=」という文字列を検索します。
成功しているのであればdmarc=pass となっているはずです(p、sp、disの値は異なります)。

dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=scsk.jp

一方で、失敗しているのであれば、dmarc=failとなっているはずです。

dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=scsk.jp

re:結論

  1. SESのIDタイプ:Eメールアドレス で、@scsk.jpのメールアドレスを登録する。
  2. SESのIDタイプ:ドメインで、scsk.jpドメインを登録する。
  3. 会社のDNSサーバにレコードを登録してもらう。

の3ステップでDMARC認証の対応は完了します。

 

よきSESライフを!

著者について

新卒入社5年目。AWSの再販を担当しています。
好きなAWSサービスはCloudShellとCost Explorer。

永見和也をフォローする

クラウドに強いによるエンジニアブログです。

SCSKクラウドサービス(AWS)は、企業価値の向上につながるAWS 導入を全面支援するオールインワンサービスです。AWS最上位パートナーとして、多種多様な業界のシステム構築実績を持つSCSKが、お客様のDX推進を強力にサポートします。

AWSクラウド
シェアする
タイトルとURLをコピーしました