0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SNSを暗号化したらCloudWatchAlarmsからのメール通知が届かなくなった

0
Posted at

概要

CloudWatchアラームを使用してエラーが発生したらAmazonSNSでメール送信するように設定を行っていました。
ある日、思い立ってAmazonSNSを暗号化したらメールが届かなくなりましたので、その原因と解決法を記載します。

解決方法

デフォルトのalias/aws/snsではなく、カスタマーマネージドキーを使用する。
※キーポリシーにCloudWatchアラームからkms:Decryptとkms:GenerateDataKey*を使用する許可ポリシーが必要

詳細

調査

調べるとこちらこちらに記事がありました。
公式にも書いてありますので、公式を参考に対応をしていきます。

アラーム履歴確認

SNS 通知の配信は、SNS トピックの設定と CloudWatch アラームによって異なります。SNS 通知が届かない理由を判断するには、CloudWatch アラームの履歴をチェックしてトリガーアクションのステータスを確認します。

上記指示に従い、履歴を確認します。

  • CloudWatchのメニュー > すべてのアラームを開き、対象のアラームを選択する
  • 開いたページの下部にある履歴タブを開いて確認
    image.png

以下のログが出ていました。

アクション arn:aws:sns:{リージョン}:{アカウントID}:{SNSトピック名} の実行に失敗しました。エラーが発生しました: "CloudWatch Alarms does not have authorization to access the SNS topic encryption key."

公式にドンピシャな文言が書かれているわけではないですが、状況証拠からSNS トピックの暗号化が原因でトリガーアクションが失敗した場合の対応を行います。

対策

カスタマーマネージドキーの作成

設定は適宜ですが、私は以下のように設定しました。

項目
キーのタイプ 対称
キーの使用法 暗号化および復号化
キーマテリアルオリジン KMS
リージョンごと 単一リージョンキー

キーポリシーに以下を追加することを忘れずに。(作成後でも追加できます)

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

{B6F0DF32-6C3E-4143-8B79-45ED817C7FB0}.png

AmazonSNSの暗号化

AmazonSNSを開き対象トピックを選択します。
編集を開き、暗号化 -オプションの設定を開き、AWS KMSキーに先ほど作成したキーを指定します。
image.png

原因

KMS作成時にポリシーを追加したことからもわかりますが、alias/aws/snsはCloudWatchアラームがkms:Decryptkms:GenerateDataKey*を使うことを許可していません。
一方、CloudWatchアラームはメッセージを SNS トピックに発行する際、これらのAPIを使用しますので、権限不足でエラーになっていたようです。

最後に

ちょっとした変更をするだけで今まで動いていたものが動かなくなるのはよくあるので、設定変更する場合は連携部分をチェックする必要があることを胸に刻みました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?