amazon-web-services - 如何通过 SNS 和 Cloudwatch 发送短信?
问题描述
当我的 EC2 实例停止时,我正在尝试向我的手机发送 SMS。
- 我正在自动停止我的 EC2 实例,现在我想在它停止时向我的手机发送短信。
- 我用手机号创建了 SNS 主题。作为订户。
- 当 EC2 停止时,我创建了一个警报。
- 在 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"
}
我无法理解它期待什么许可。
解决方案
错误的原因很可能是由于策略具有不正确的值。我不确定您更改了哪些值来保护敏感值,但您需要更新sns-topic-name
和account-id
.
但是,我会推荐另一种实现目标的方法......
您可以使用Amazon CloudWatch Events查看特定事件(例如,将状态更改为已停止的实例)并让它直接向 Amazon SNS 发送消息(不使用警报)。
步骤是:
- 在 Amazon CloudWatch 控制台中,单击规则
- 创建规则
- 服务名称: EC2
- 事件类型: EC2 Instance State-change Notification
- 特定状态:已停止
- 选择任何实例或特定实例 ID
- 在右侧的Targets下,单击Add target
- SNS话题
- 选择你的主题
这将在实例停止时发送一条消息。
推荐阅读
- javascript - 如何在 JavaScript 中使用正则表达式对下划线或连字符分隔的单词进行缩写?
- python - modulenotfounderror:没有名为“sklearn”的模块
- php - MYSQL + php,避免日期冲突
- c# - CodeDom 的 AccessDenied(Win32.Ressource)
- android - 关于所需记录类型的建议
- json - 从节点获取 JSON 数组到 Reactjs
- c# - c# ext.net:无法获取动态添加的字段集项目
- kotlin - Kotlin 标准函数:run、with、let、also 和 apply
- python - Python opencv/cv2 错误着色
- linux - 对 docker build 感到困惑以永远运行 docker 容器