首页 > 解决方案 > 如何通过 SNS 和 Cloudwatch 发送短信?

问题描述

当我的 EC2 实例停止时,我正在尝试向我的手机发送 SMS。

  1. 我正在自动停止我的 EC2 实例,现在我想在它停止时向我的手机发送短信。
  2. 我用手机号创建了 SNS 主题。作为订户。
  3. 当 EC2 停止时,我创建了一个警报。
  4. 在 SNS > 移动 > 短信 (SMS) > 短信首选项(编辑)下:

一种。我选择“默认消息类型”作为“事务性”。

湾。我创建了一个新的 IAM 角色。

IAM 角色策略

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "logs:PutMetricFilter",
                "logs:PutRetentionPolicy"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

SNS 主题访问策略

{
  "Version": "2008-10-17",
  "Id": "__default_policy_ID",
  "Statement": [
    {
      "Sid": "__default_statement_ID",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": [
        "SNS:Publish",
        "SNS:RemovePermission",
        "SNS:SetTopicAttributes",
        "SNS:DeleteTopic",
        "SNS:ListSubscriptionsByTopic",
        "SNS:GetTopicAttributes",
        "SNS:Receive",
        "SNS:AddPermission",
        "SNS:Subscribe"
      ],
      "Resource": "arn:aws:sns:us-west-2:account-id:sns-topic-name",
      "Condition": {
        "StringEquals": {
          "AWS:SourceOwner": "account-id"
        },
        "ArnLike": {
          "AWS:SourceArn": "arn:aws:cloudwatch:us-west-2:account-id:alarm:*"
        }
      }
    }
  ]
}

触发警报时,我收到以下错误:

{
  "actionState": "Failed",
  "stateUpdateTimestamp": 1561102479560,
  "notificationResource": "arn:aws:sns:us-west-2:account-id:sns-topic-name",
  "publishedMessage": null,
  "error": "Resource: arn:aws:cloudwatch:us-west-2:account-id:alarm:alarm-name is not authorized to perform: SNS:Publish on resource: arn:aws:sns:us-west-2:account-id:sns-topic-name"
}

我无法理解它期待什么许可。

标签: amazon-web-servicesamazon-cloudwatchalarm

解决方案


错误的原因很可能是由于策略具有不正确的值。我不确定您更改了哪些值来保护敏感值,但您需要更新sns-topic-nameaccount-id.

但是,我会推荐另一种实现目标的方法......

您可以使用Amazon CloudWatch Events查看特定事件(例如,将状态更改为已停止的实例)并让它直接向 Amazon SNS 发送消息(不使用警报)。

步骤是:

  • 在 Amazon CloudWatch 控制台中,单击规则
  • 创建规则
  • 服务名称: EC2
  • 事件类型: EC2 Instance State-change Notification
  • 特定状态:已停止
  • 选择任何实例特定实例 ID
  • 在右侧的Targets下,单击Add target
  • SNS话题
  • 选择你的主题

CloudWatch 事件 - 创建规则

这将在实例停止时发送一条消息。


推荐阅读