運用中のサービスを新しいAWSアカウントに移行中なのですが、SESのフィードバック通知(Bounce, Complaintなど)でSNSトピックを設定しようとしたら謎のエラーに阻まれました。
An invalid or out-of-range value was supplied for the input parameter.
SNSトピックは“Standard”で作成、リージョンもSESと同じ、SNSトピックのアクセスポリシーにはses.amazonaws.comのsns:Publishを許可済み...と漏れなく設定しているつもりだったので、何が問題なのかわかりませんでした。
原因
SNSトピックの暗号化に設定しているKMSのキーポリシー不足が原因でした。
暗号化トピックにpublishする主体(今回のSES)には、KMSにkms:GenerateDataKeyとkms:Decrypt権限が必要とのことです。実際の暗号化/復号処理はSNS側で実行されますが、そのためのKMS API呼び出しをSESがトリガーする形になるためです。
ただ、今回SNSトピックの暗号化に利用したのはAWS管理キーalias/aws/snsだったので、キーポリシーを編集できませんでした...
解決策
そのため、今回、以下のポリシーを追加してカスタマーマネージドキー(CMK)sns-ses-dev-1を新規で作成してSNSに設定しました。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowSESToUseKMSKey",
"Effect": "Allow",
"Principal": {
"Service": "ses.amazonaws.com"
},
"Action": [
"kms:GenerateDataKey",
"kms:Decrypt"
],
"Resource": "*"
}
]
}
無事にフィードバック通知にSNSトピックを設定できるようになりました。
さいごに
CMKはコストがかかるので、開発環境ならそもそもSNSトピックの暗号化はしなくてもいいかもしれません。
参考


