Google 社のメール送信ガイドラインへの SES 対応備忘録( CLI で利用アカウント内、全リージョンの SES 利用状況を確認してみた )

2024.01.31

こんにちは、AWS 事業本部の yoshi です。 Google 社のメール送信ガイドラインへの SES 対応にて、役に立ったことを備忘録として記載します。

私の場合ドメインが DNSプロバイダーに登録されておりましたが以下、AWS のブログにも詳細に対応方法が記載されており大変助かりました。
An Overview of Bulk Sender Changes at Yahoo/Gmail

しかし、アカウント内の複数リージョンで SES を利用している場合や、対象アカウントが複数存在する場合、マネジメントコンソールからの確認では物凄く大変ですよね!
また、AWS から以下、通知が届いたけど、どのリージョンの SES なのか見つけるのが大変かと思います。

[お知らせ] メールボックスプロバイダー、大量メール送信者に対する新たな要件について [AWS アカウント: xxxxxxxxxxx]

[Action may be required] Mailbox providers announce new requirements for bulk email sender [AWS Account: xxxxxxxxxxx]

以下、スクリプトの結果から DKIM is not enabled or not verified for domain と表示された リージョンの SES を調査、対応することで少しでも迅速な対応が可能ではないかと思いますのでお役に立てれば嬉しいです。

CLI で利用アカウント内、全リージョンの SES 利用状況を確認してみた

以下のスクリプトを作成して、アカウント内の、全てのリージョンで使用されている SES の状況を確認しました。
前提条件:
 ・最新の AWS CLI がインストールされている
 ・jq がインストールされている
 ・以下、スクリプトを任意の名前 xxxx.sh で保存して実行できるようにしておく


#!/bin/bash

# AWS のすべてのリージョンをリストアップ
regions=$(aws ec2 describe-regions --query "Regions[].{Name:RegionName}" --output text)

for region in $regions
do
  echo "Region: $region"

  echo "Verified Domains:"
  # 各リージョンの検証済ドメインをリストアップ
  domains=$(aws ses list-identities --region $region --identity-type Domain --output text)

  # ドメインの DKIM 属性を取得し、DKIM が有効化されているか確認
  for domain in $domains
  do
    echo "Domain: $domain"
    dkim_attributes=$(aws ses get-identity-dkim-attributes --region $region --identities $domain)
    dkim_enabled=$(echo "$dkim_attributes" | jq -r ".DkimAttributes[\"$domain\"].DkimEnabled")
    dkim_verification_status=$(echo "$dkim_attributes" | jq -r ".DkimAttributes[\"$domain\"].DkimVerificationStatus")
    if [[ "$dkim_enabled" == "true" && "$dkim_verification_status" == "Success" ]]; then
      echo "DKIM is enabled and verified for domain $domain"
    else
      echo "DKIM is not enabled or not verified for domain $domain"
    fi
  done

  echo "Verified Email Addresses:"
  # 各リージョンの検証済みメールアドレスをリストアップ
  email_addresses=$(aws ses list-identities --region $region --identity-type EmailAddress --output text)

  # メールアドレスのドメイン部分を取得し、DKIM 属性を確認
  for email in $email_addresses
  do
    # メールアドレスからドメイン部分を抽出
    domain=$(echo $email | sed 's/.*@//')
    echo "Email Address: $email (Domain: $domain)"
    dkim_attributes=$(aws ses get-identity-dkim-attributes --region $region --identities $domain)
    dkim_enabled=$(echo "$dkim_attributes" | jq -r ".DkimAttributes[\"$domain\"].DkimEnabled")
    dkim_verification_status=$(echo "$dkim_attributes" | jq -r ".DkimAttributes[\"$domain\"].DkimVerificationStatus")
    if [[ "$dkim_enabled" == "true" && "$dkim_verification_status" == "Success" ]]; then
      echo "DKIM is enabled and verified for domain $domain"
    else
      echo "DKIM is not enabled or not verified for domain $domain"
    fi
  done
done

スクリプトの内容としては、利用中のドメインとメールアドレスの確認、各ドメインとメールアドレスのドメインに対して DKIM の有効化状態と検証状態を確認します。
各ドメインとメールアドレスの後に表示された内容と意味については以下になります。

表示内容の意味

表示内容 SES の状態 備考
DKIM is enabled and verified for domain xxx DKIM 署名が有効かつ検証ステータスが成功の状態 DkimEnabled が true
DkimVerificationStatus が Success
DKIM is not enabled or not verified for domain XXX DKIM 署名が無効化、検証ステータスが成功以外の状態

検証してみる

SES ap-northeast-1 に以下、検証済 ID が登録されているとします。

fogefoge.co.jp ドメイン
xx.fogefoge.co.jp ドメイン
01_XXXX@xx.fogefoge.co.jp E メールアドレス
02_XXXX@xx.fogefoge.co.jp E メールアドレス

実行結果例

Region: ap-northeast-1
Verified Domains:
Domain: fogefoge.co.jp
DKIM is enabled and verified for domain fogefoge.co.jp
Domain: XX.fogefoge.co.jp
DKIM is enabled and verified for domain XX.fogefoge.co.jp
Verified Email Addresses:
Email Address: 01_XXXX@XX.fogefoge.co.jp (Domain: XX.fogefoge.co.jp)
DKIM is enabled and verified for domain XX.fogefoge.co.jp
Email Address: 02_XXXX@XX.fogefoge.co.jp (Domain: XX.fogefoge.co.jp)
DKIM is enabled and verified for domain XX.fogefoge.co.jp

※ アカウントで利用リージョンが制限されている場合は、実行する権限がありませんの様なエラーが表示されます。

リージョン ap-northeast-1 の SES に設定されている検証済み ID ドメインが fogefoge.co.jp、XX.fogefoge.co.jp、メールアドレスが 01_XXXX@XX.fogefoge.co.jp、02_XXXX@XX.fogefoge.co.jp であること、また各ドメイン及びメールアドレスの DKIM 署名が有効かつ検証ステータスが成功の状態であることがわかりました。

DKIM is enabled and verified for domain XXX と表示された場合

対応のポイントとしては、DKIM 認証が OK な親ドメインに DMARC 対応を実施する

検証の場合、ドメインは fogefoge.co.jp と XX.fogefoge.co.jp がありますが、fogefoge.co.jp の追加ドメイン _dmarc として TXT レコード "v=DMARC1; p=none" を追加します。これは、サブドメイン用の DMARC ポリシーを作成しない場合、親ドメインの DMARC ポリシーを継承するためです。また、DMARC のレポートを受け取るメールアドレスがある場合は、rua=mailto:fogefoge.co.jp なども追加しましょう。
 参考情報:RFC 7489

DNS プロバイダーにレコード追加設定が完了すると以下、コマンドにて DMARC の TXT レコードを確認することができます。

dig _dmarc.fogefoge.co.jp txt | grep DMARC

_dmarc.fogefoge.co.jp. 0       IN      TXT     "v=DMARC1; p=none"

DKIM is not enabled or not verified for domain XXX と表示された場合

上記の検証では、表示されておりませんが以下の様な場合、事前に対応が必要になります。

①.ドメインで表示された

この場合、ドメインの DKIM の検証が完了していない可能性が考えられるので以下を参照して対応が必要です。

確ポイント 対応内容 参考情報
DKIM の設定ステータスが未開始 DNS レコードの発行を実施、全ての CNAME を DNS プロバイダーに追加登録依頼を実施 DNS プロバイダーでの DKIM ドメイン ID の検証
DKIM 署名が無効化状態 DKIM 署名を有効化 継承された DKIM 署名プロパティについて理解する

②.メールアドレスで表示された

この場合、該当リージョンの SES に親ドメインの登録が有るか無いかで確認ポイントが変わってきます。
親ドメインが有る場合、メールアドレスが 親ドメインから DKIM 署名を継承されているか確認します。そして、親ドメイン側でも問題が無いか確認します。
親ドメインが無い場合、このままでは DKIM 署名を継承することができません。理由として、DKIM 認証は、ドメインレベルでのみ設定が可能なためです。
ですので、該当リージョンの SES に親ドメイン作成が必要になります。

確ポイント 対応内容 参考情報
親ドメイン有 ・メールアドレスの DKIM 署名が無効化なら有効化
・親ドメインで ①.ドメインで表示された を実施
DKIM に関する考慮事項
継承された DKIM 署名プロパティについて理解する
親ドメイン無 ・親ドメイン作成
①.ドメインで表示された を実施
Amazon SES で DKIM を有効にするにはどうすればよいですか?

まとめ

アカウント内の複数リージョンで SES を利用している、対象アカウントが複数存在する場合等、現在の SES 利用状況確認に少しでもお役に立てればと思います。最後までお読みいただきありがとうございました。

関連記事

突貫でおぼえるSPF、DKIM、DMARC