• 2026年05月25日
  • blog

AWS SNSとKMSの関係:EventBridge通知が届かない!? その原因と対策まとめ

こんにちは。AWSのシステム設計に携わっていると、「EventBridgeからSNSに通知を送ったはずなのに、なぜかSubscriberに届かない…」という場面に出くわすことがあります。
この現象、実はSNSとKMSの暗号化設定、そしてIAM権限の設計に思わぬ落とし穴が潜んでいることが少なくありません。

AWSのSNSは一見シンプルに見えて、基本的な仕組みの理解がトラブル回避のカギとなります。
弊社は、日々さまざまなAWS案件に携わる中で、「基本の徹底こそが最も強力なトラブルシューティングになる」と実感しています。

そこで本記事では、あえて“基礎”に立ち返り、AWS初心者の方にも分かりやすいよう、SNS×KMS×IAMの関係と通知が届かない原因・対策を丁寧に解説します。
「今さら聞けない…」という方も、現場でつまずきやすいポイントを一緒に整理していきましょう。

1. どんな問題が起きたの?

ある日、EventBridgeルールでSNSトピックにイベントをPublishし、そこからメール通知を流す仕組みを構築していました。
テストイベントを送ってみると…「あれ?メールが来ない…」。SNSの配信履歴を見ても、配信された形跡がありません。
AWSの公式ドキュメントにも、同じようなトラブルについて記載があります。

参考:AWS EventBridgeでSNSにメッセージが配信されない場合
https://docs.aws.amazon.com/ja_jp/eventbridge/latest/userguide/eb-troubleshooting.html#eb-no-messages-published-sns

2. SNSとKMSの仕組みをかみ砕いて解説!

「SNS?KMS?IAM?なんだか難しそう…」と思った方もいるかもしれません。
ここで一度、初心者の方にも分かりやすいように、たとえ話で仕組みを噛み砕いてみます。

  • SNS / EventBridgeなど = 会社の「発送部門」の担当者
    • 役割:社内の各所から依頼された書類を、指定された宛先に正確に届けるのが仕事です。
  • KMS = 会社の「セキュリティ部門」の担当者
    • 役割:会社の重要な情報資産を守る責任者。機密情報を保護するための金庫や特殊な鍵、封筒などを厳格に管理しています。
  • 通知メッセージ = 「機密情報が書かれた書類」
  • 暗号化 = 「中身が透けない、開封すると分かる特殊なセキュリティ封筒に入れる作業」

 

シナリオ:なぜ通知が届かなくなるのか?

あなたの会社には、重要なルールがあります。
「全ての機密書類は、発送前に必ずセキュリティ部門が管理する『特殊セキュリティ封筒』に入れなければならない」
ある日、ある部署が「この機密書類をA社の担当者に届けて!」と発送部門の担当者(SNS)に依頼しました。
発送担当者(SNS)は、ルールに従って書類を「特殊セキュリティ封筒」に入れるため、セキュリティ部門(KMS)のオフィスへ向かいます。
セキュリティ部門の担当者(KMS)は、封筒を渡す前に、壁に貼ってある「封筒使用許可リスト(IAMポリシー)」を確認します。
「この封筒を使って良いのは、法務部と経理部だけ」
リストに「発送部門」の名前がなかったため、セキュリティ担当者(KMS)はこう言います。
「申し訳ありません。あなたたちの部署には、この封筒を使用する権限がありません」
結果、発送担当者(SNS)はセキュリティ封筒を手に入れられませんでした。
ルール違反になるため機密書類をそのまま送るわけにもいかず、発送作業そのものが中止されてしまいます。
書類はA社に届きませんでした。

3. SNS×KMS運用で気を付けたいIAM権限

ここで一度、SNSトピックとKMS暗号化を利用した場合の権限設計を整理しておきましょう。

  • (A) SNSトピックにPublishする人/サービス
    必要権限:sns:Publish
  • (B) SNSトピックを購読する人/サービス
    通常はIAM権限不要ですが、LambdaやSQSの場合は追加権限が必要
  • (C) SNSトピックを管理する人/ツール
    必要権限:sns:CreateTopic, sns:SetTopicAttributes など
  • (D) KMSキーを利用する人/サービス
    SNSサービスやPublish元IAMロールにKMSキー権限(kms:GenerateDataKey*, kms:Decrypt)が必要

4. なぜ通知が失敗するの?

KMSキーの権限が足りないとどうなる?

ここが最大の落とし穴!
SNSサービス(sns.amazonaws.com)や、EventBridgeの実行ロールなど、Publish元のIAMにKMSキーの操作権限がないと、暗号化できず処理が失敗します。
AWSでは、許可をもらっていないと「AccessDenied(アクセス拒否)」というエラーになり、SNSは暗号化できず、通知も配達できません。
SNSの配信履歴やCloudWatch Logsを確認すると、AccessDeniedExceptionなどのエラーが出ているはずです。

5. 成功・失敗の流れを図で比較!

ここからは、「鍵(KMSキー)」のやり取りがうまくいった場合と失敗した場合の流れを図解します。
それぞれのポイントを見比べながら、どこで問題が起きやすいか把握しましょう。

(1)正常パターン:権限が正しく設定されている場合

ポイント

  • KMSからSNSにデータキーが正常に渡る
  • SNSは購読者にメッセージを配信できる

(2)失敗パターン:KMS権限不足で通知失敗

ポイント

  • KMSが「AccessDenied」エラーを返す
  • SNSは暗号化できず、購読者に通知が届かない

6. どうすればいいの?

配達屋さん(SNSやEventBridge)に「この南京錠(KMSキー)を使っていいよ」ときちんと許可を与えるだけ!

EventBridgeのIAMロールやSNSサービスに、KMSキーを使う権限(kms:GenerateDataKey*, kms:Decrypt)を付与しましょう。SNSサービス(sns.amazonaws.com)にもKMS権限が必要な場合があります。

KMSキーのポリシー例はこんなイメージです↓

{
  "Effect": "Allow",
  "Principal": {
    "Service": "sns.amazonaws.com"
  },
  "Action": [
    "kms:GenerateDataKey*",
    "kms:Decrypt"
  ],
  "Resource": "*"
}

エラー内容はCloudWatch LogsやSNSの配信履歴で確認できます。「AccessDenied」系のエラーが出ていないか見てみましょう。

7. まとめ

SNSトピックにKMS暗号化を使う場合、「KMSキーの権限までしっかり設計する」
EventBridgeやSNS、KMSが絡む連携では、どのIAMロールやサービスにどんな権限が必要か、一度整理してみることをおすすめします。
もし通知が届かない場合は、SNS配信履歴やCloudWatch Logsで「KMS権限のエラーが出ていないか?」を真っ先にチェックしましょう。

8. 参考リンク

「SNS通知が来ない!」と悩んでいる方の参考になれば幸いです。

この記事の著者: DTUHブログ編集部

著者の他の記事を見る