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ポリシーが決まっているので、今回は登録依頼を出しません。
- p=customerProvidedPublicKey の customerProvidedPublicKey の値は、scsk-public.keyの中身を、以下の加工を施して入力します。
- 登録が完了すると、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=failとなっているはずです。
re:結論
- SESのIDタイプ:Eメールアドレス で、@scsk.jpのメールアドレスを登録する。
- SESのIDタイプ:ドメインで、scsk.jpドメインを登録する。
- 会社のDNSサーバにレコードを登録してもらう。
の3ステップでDMARC認証の対応は完了します。
よきSESライフを!