はじめに
こちらはDKIM設定についての健忘録です。
DKIMとは
DKIM(DomainKeys Identified Mail) は、メールのなりすましや改ざんを防止するための技術です。
- メール送信時に「秘密鍵」で署名
- 受信者は「DNS上の公開鍵」で署名を検証
検証に成功すると、送信者の正当性が保証され、信頼性が向上します。
DKIMのメリット
- スパムやなりすましと誤判定されにくい
- DMARCと組み合わせてセキュリティ強化
- ドメインの信頼性を可視化
DKIM構成の全体像(AWS SES)
| 構成要素 | 説明 |
|---|---|
| SES | ドメインの送信者認証と署名付与 |
| DKIM署名 | SESが自動的に DKIM-Signature を付与 |
| DNS(Route 53等) | SESが提供する3つのCNAMEレコードを追加 |
AWS SESで利用可能な3種類のDKIM設定方式
- Easy DKIM
- Deterministic Easy DKIM
- BYODKIM(Bring Your Own DKIM)
Easy DKIM
▷ 概要
AWS SES が 自動で鍵ペアを生成・管理し、DNSにCNAMEレコードを設定することで、簡単にDKIMを有効にできる方式です。
▷ 特徴
- 鍵の管理は SES 側で自動
- DNSに設定するのは CNAME レコード(公開鍵への参照)
- 最大3つのトークンが発行される(例:
xyz._domainkey.example.com) - 手間が少なく、個人〜中小企業での利用にも向いています
Deterministic Easy DKIM
▷ 概要
2023年にリリースされた Easy DKIM の進化版。セレクター(xyz._domainkey の xyz 部分)が 決定論的な(予測可能な)文字列 になることで、DNS管理の自動化やIaC対応がしやすくなっています。
▷ 特徴
- Easy DKIM と同様、鍵管理は SES が自動で対応
- セレクター名が決定論的(例:
ses._domainkey.example.com) - インフラコード(Terraform/CDKなど)での自動化がしやすい
- マルチアカウント構成やCI/CD導入時に便利
BYODKIM(Bring Your Own DKIM / DKIM認証トークンの指定)
▷ 概要
自分で鍵ペアを用意・管理する方式です。SESに公開鍵を登録し、署名は自前のメールシステムやサービスで実行します。柔軟性が高く、高度なセキュリティ要件に対応可能です。
▷ 特徴
- 鍵ペアは ユーザー自身が生成・管理
- SESには公開鍵を登録する(秘密鍵は外部で管理)
- DNSには TXTレコード を自分で作成して登録
- オンプレや外部メール送信基盤との連携が可能
- 高度なセキュリティ要件向き
3方式の比較まとめ
| 特徴 | Easy DKIM | Deterministic Easy DKIM | BYODKIM |
|---|---|---|---|
| 鍵の管理 | SES が自動 | SES が自動 | ユーザーが管理 |
| DNS設定方法 | CNAMEレコード | CNAMEレコード(予測可能) | TXTレコード(自作) |
| セレクター名 | ランダム文字列 | 固定 or 予測可能(例: ses) | 自由に設定可能 |
| 署名の実行者 | SES | SES | ユーザー側のシステム |
| 運用のしやすさ | ◎(簡単) | ◎(自動化向き) | △(上級者向け) |
| 想定用途 | 一般的なSES運用 | CI/CD環境・IaC対応 | セキュリティ重視、外部連携 |
どれを選ぶべきか
| ユースケース | 推奨される方式 |
|---|---|
| 手軽に導入したい | Easy DKIM |
| DNSもコード管理している / 自動化したい | Deterministic Easy DKIM |
| 自前で鍵管理したい / カスタム署名が必要 | BYODKIM |
Easy DKIMの設定手順(AWSコンソール)
① SESに送信ドメインを登録
-
AWSマネジメントコンソールにログイン
-
SES(Simple Email Service) のコンソールを開く
-
ナビケーションペインから 設定 > [ID] を押下
-
[IDの作成] を押下
-
以下の設定を入力:
-
IDタイプ:
ドメイン -
ドメイン:
your-domain.com(※これは入力例です。ご自身のドメインを指定してください) - DNSレコードのRoute53への発行:有効化
- DKIM 署名: 有効化(デフォルトでON)
-
IDタイプ:
-
[IDの作成] を押下
② DKIMトークン(CNAMEレコード)を取得
- 作成されたドメインを押下
- 「DKIM」セクションを確認
-
xyz12345._domainkey.your-domain.comのような 3つのCNAMEレコード が表示されます。
これらをDNS(Route 53など)に設定する必要があります。
③ DNSにCNAMEレコードを追加(Route 53等)
Route 53を使用している場合の設定手順:
- Route 53 コンソールを開く
- 該当のホストゾーン(your-domain.com)を押下
- [レコードを作成] を押下し、以下の情報を入力
| 項目 | 内容例(実際の値はSES画面からコピー) |
|---|---|
| レコードタイプ | CNAME |
| レコード名 |
xyz12345._domainkey(ドメイン部分は不要) |
| 値(Value) | xyz12345.dkim.amazonses.com |
| TTL | デフォルト(300など) |
これを3件分繰り返します。
④ SESでDKIMステータスを確認
-
SESの「Verified identities」に遷移
-
対象ドメインを押下
-
「Verification status」および「DKIM status」が
SuccessになっていればOK- 反映には数分〜最大72時間かかる場合があります
送信後の確認方法
実際にSESで送信したメールを受信し、メールヘッダーを確認します。
DKIM-Signature のような行があれば、署名が付与されています。
DKIM-Signature: v=1; a=rsa-sha256; d=your-domain.com; ...
⚠ よくある注意点
| 注意点 | 内容 |
|---|---|
| DNS反映の遅延 | CNAMEレコードの反映に最大72時間かかることがあります |
| 他サービスとの競合 | Google Workspace や SendGrid などと同一ドメイン使用時に注意 |
| メールアドレス単位不可 |
ドメイン単位のみDKIM署名が可能(xxx@your-domain.comは不可) |
| DMARCとの関係 | DKIMが失敗するとDMARCポリシーでfail扱いになることがあります |
まとめ
- AWSコンソールから簡単にDKIM署名の設定が可能
- DNSにCNAMEを3件追加するだけで署名が有効化
- SPFやDMARCと組み合わせてセキュリティ強化