AWS SNS订阅会自动删除订阅本身。

19

我订阅了一个SNS主题,并将端点设置为电子邮件地址。

昨晚我收到取消订阅主题的通知,我询问了所有可以访问收件箱的人,没有人点击了取消订阅链接。

我重新创建了订阅,但今天早上它又自动取消了。

这是怎么回事?我该如何防止再次发生这种情况?我在CloudTrail中查找,但除非通过控制台或API进行订阅,否则不会记录取消订阅操作。

任何指示都将有所帮助,谢谢。


1
我不认为它可能会自动删除。我认为更有可能的是有人取消了订阅,但他们可能不想承认。 - user9244629
1
不,情况并非如此。这已经发生了两次,而且一开始只有两个人可以访问邮箱。我怀疑这是Gmail自动垃圾邮件过滤器的原因。 - Gapton
你好@Gapton,你是如何解决这个问题的?我也遇到了同样的问题,SNS订阅会自动删除。 - Shashank Shah
4个回答

3
订阅将处于“已删除状态”,因为订户取消了电子邮件订阅,可能是由于从电子邮件通知中点击了“取消订阅”URL。建议我们手动订阅电子邮件端点,复制订阅URL并粘贴到SNS控制台中。这样,订阅只能由SNS主题所有者删除/移除,而不能通过电子邮件中的取消订阅URL来删除。一旦我们手动复制链接到SNS控制台并确认订阅,我们将控制该订阅,并在CloudTrail中生成跟踪以进行审计。

谢谢,这对我很有用。AWS 支持中心 文章 也提到了这个解决方案。 - Denis Isaev

1

这可能有不同的原因:

  • AWS已经记录,如果每秒钟超过10封电子邮件,则会自动取消订阅以避免垃圾邮件(解决方案是向您的主题添加过滤选项,以便您不会向任何人发送垃圾邮件)
  • 接收电子邮件的任何人都已经取消了订阅(您已经排除了这个原因)
  • 似乎是AWS SNS电子邮件订阅的一个错误(简单的解决方法是使用Email-JSON而不是普通的Email,更复杂的解决方法是使用Lambda函数发送电子邮件 - 请注意,这可能根本不是错误,因为可能是自动垃圾邮件过滤器在起作用,这就是为什么Email-JSON选项可以避免这种情况的原因)

0

这可能是 Gmail 的自动垃圾邮件过滤器,但由于没有可用的日志记录,很难验证。

AWS文档中我看到,您可以启用删除认证。这应该可以防止被Gmail删除。

删除订阅。如果订阅需要身份验证进行取消订阅,则只有订阅所有者或主题所有者可以取消订阅,并且需要 AWS 签名。如果取消订阅调用不需要身份验证并且请求方不是订阅所有者,则会向终端节点发送最后一个取消消息,以便终端节点所有者可以轻松地重新订阅该主题,如果 取消订阅请求是无意的。

要更改此权限,请转到SNS主题概述并选择所需的主题。单击编辑主题策略。如果您点击高级视图,请确保添加了类似以下内容的内容:

  "Action": [
    "SNS:Unsubscribe"
  ],
  "Resource": "arn:aws:sns:<AWS_REGION>:<AWS_ACCOUNT_ID>:<SNS_TOPIC>",
  "Condition": {
    "StringEquals": {
      "AWS:SourceOwner": "<AWS_ACCOUNT_ID>"
    }
  }

这将确保只有账户所有者才能取消订阅,而不是每个人。将<>之间的变量更改为您的需求。


1
我会点赞这个回答,但它没有说明如何启用删除的身份验证,AWS 文档也没有明确说明。 - VaTo
我这里有两个问题:第一个是这个策略将适用于主题中的所有订阅,而不仅仅是一个特定的订阅;第二个问题是关于SNS_Topic,您指的是主题ARN还是显示名称? - VaTo
3
撤销我之前的命令:我收到了以下错误提示:Invalid parameter: Policy statement action out of service scope! (Service: AmazonSNS; Status Code: 400; Error Code: InvalidParameter; Request ID:xxxxxxxxx) - VaTo
如果我理解正确,只有订阅者(而不是主题所有者)可以添加身份验证要求,他们只能在订阅时添加,并且必须通过CLI或SDK调用完成。例如,在CLI中:https://docs.aws.amazon.com/cli/latest/reference/sns/confirm-subscription.html - hiljusti
1
@hiljusti 你是对的,但不仅可以通过cli完成 - 它也可以在aws控制台中完成。 - Denis Isaev

0
我建议您将您的SNS格式更改为电子邮件JSON而不是电子邮件。

你的回答可以通过提供更多的支持性信息来改进。请编辑以添加进一步的细节,比如引用或文档,以便他人可以确认你的回答是否正确。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接