如何通过SNS和Cloudwatch发送短信?
How to send SMS through SNS and Cloudwatch?
我正在尝试在我的 EC2 实例停止时向我的手机发送短信。
- 我正在自动停止我的 EC2 实例,现在我想在它停止时向我的手机发送短信。
- 我用我的手机号创建了 SNS 主题。作为订户。
- 我在 EC2 停止时创建了一个警报。
- 在 SNS > 移动 > 短信 (SMS) > 短信首选项(编辑)下:
一个。我选择 "Default message type" 作为 "Transactional".
b。我创建了一个新的 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 实例State-change 通知
- 特定状态:已停止
- 选择任何实例或特定实例ID
- 在右侧的目标下,单击添加目标
- SNS 话题
- Select你的话题
这将在实例停止时发送一条消息。
错误似乎是由于您的 IAM 角色缺少向 SNS 主题发布消息的权限。安排为您使用的角色或用户附加必要的权限,如下所示:
{
"Id": "Policy1415489375392",
"Statement": [
{
"Sid": "AWSConfigSNSPolicy20150201",
"Action": [
"SNS:Publish"
],
"Effect": "Allow",
"Resource": "arn:aws:sns:region:account-id:myTopic",
"Principal": {
"AWS": [
"account-id1",
"account-id2",
"account-id3",
]
}
}
]
}
我正在尝试在我的 EC2 实例停止时向我的手机发送短信。
- 我正在自动停止我的 EC2 实例,现在我想在它停止时向我的手机发送短信。
- 我用我的手机号创建了 SNS 主题。作为订户。
- 我在 EC2 停止时创建了一个警报。
- 在 SNS > 移动 > 短信 (SMS) > 短信首选项(编辑)下:
一个。我选择 "Default message type" 作为 "Transactional".
b。我创建了一个新的 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 实例State-change 通知
- 特定状态:已停止
- 选择任何实例或特定实例ID
- 在右侧的目标下,单击添加目标
- SNS 话题
- Select你的话题
这将在实例停止时发送一条消息。
错误似乎是由于您的 IAM 角色缺少向 SNS 主题发布消息的权限。安排为您使用的角色或用户附加必要的权限,如下所示:
{
"Id": "Policy1415489375392",
"Statement": [
{
"Sid": "AWSConfigSNSPolicy20150201",
"Action": [
"SNS:Publish"
],
"Effect": "Allow",
"Resource": "arn:aws:sns:region:account-id:myTopic",
"Principal": {
"AWS": [
"account-id1",
"account-id2",
"account-id3",
]
}
}
]
}