【AWS】SNSの暗号化に要注意!メールが飛ばない原因と解決策

AWSでSNS(Simple Notification Service)を使う際、セキュリティを強化するために暗号化することが推奨されています。しかし、SNSの暗号化を設定すると、CloudWatchやEventBridgeからのメール通知が届かなくなることがあります。

この記事では、その原因と解決方法を説明します。

SNS暗号化でメールが飛ばない?その理由は...

SNSトピックを暗号化する際、AWSマネージドキー(alias/aws/sns)を使用するとCloudWatchやEventBridgeからSNSへの通知が正しく動作しません。
AWSマネージドキーのポリシーでは、CloudWatchやEventBridge が kms:Decrypt と kms:GenerateDataKey API 呼び出しを実行することを許可されていないからです。

以下の記事に詳細が記載されています。気になる方はチェックしてみてください。

これに気づかず、トラブルにハマる方も多いでしょう。
私もハマりました・・・

対策

カスタマーキー(CMK)を使おう

この問題を解決するには、AWSマネージドキーではなく、カスタマーキー(CMK)を使用します。KMS上でCMKを作成し、適切にキーポリシーを割り当てることで解決できます。
作成したCMKをSNSに割り当てれば、が正常にSNS通知が行われるようになります。

手順

1. KMSキーを作成

  • AWSマネジメントコンソールで、KMS(Key Management Service)にアクセスし、カスタマーキー(CMK)を作成します。

2. KMSキーのキーポリシーを作成

  • 以下のようなキーポリシーを使用します。

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

この許可により、CloudWatch は、暗号化設定された SNS トピックにメッセージを発行できるようになります。
EventBridge用のキーポリシーは、以下↓のように作成するとよいでしょう。

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

3. SNSトピックの暗号化を設定

  • SNSコンソールに移動し、暗号化を設定したいSNSトピックを選択します。

  • 「トピックの編集」から、暗号化のチェックをONにし、「カスタマーキー(CMK)」を選択します。変更の保存をクリックすれば作業は完了です。

この設定により、CloudWatch やEventBridgeから、SNS通知ができるようになります。


まとめ

SNSの暗号化はAWSのセキュリティ強化に不可欠ですが、デフォルトのAWSマネージドキーではCloudWatchやEventBridgeからの通知が動作しないことがあります。これを回避するためには、KMSカスタマーキー(CMK)を使用し、適切なキーポリシーを設定することが重要です。
この記事が誰かの役に立てば幸いです。

いいなと思ったら応援しよう!