amazon-web-services - 如何使用 sns 警报的 lambda (python) 发送松弛通知
问题描述
我将 json 对象中的 sns 事件发送到我的电子邮件,但我希望使用 lambda 将特定部分发送到松弛通知。我希望解析时间、事件名称、组 ID、事件 ID 等并将其发送到 slack。我在网上尝试了各种示例,但不断出错。我有一个 cloudwatch 事件,它监视是否有人在给定的安全组上使用了 0.0.0.0/0。如果发生这种情况,这将触发与 sns 警报关联的云监视事件。我已经集成了电子邮件警报,但我希望在松弛时完成此操作。我需要这方面的指导,我尝试了其他在线示例?
*{
"version": "0",
"id": "5391448e-1276-49f1-d5a2-5b4898b1f863",
"detail-type": "AWS API Call via CloudTrail",
"source": "aws.ec2",
"account": "982239453305",
"time": "2019-10-02T10:07:07Z",
"region": "eu-west-1",
"resources": [],
"detail": {
"eventVersion": "1.05",
"userIdentity": {
"type": "AssumedRole",
"principalId": "AROAIZE22Q5MDGTLWB2FW:jahmed",
"arn": "arn:aws:sts::988339453305:assumed-role/dp-admins/arahman",
"accountId": "988339453305",
"accessKeyId": "*******",
"sessionContext": {
"sessionIssuer": {
"type": "Role",
"principalId": "********",
"arn": "arn:aws:iam::988569453305:role/dp-admins",
"accountId": "988569453305",
"userName": "dp-admins"
},
"webIdFederationData": {},
"attributes": {
"mfaAuthenticated": "true",
"creationDate": "2019-10-02T10:05:55Z"
}
}
},
"eventTime": "2019-10-02T10:07:07Z",
"eventSource": "ec2.amazonaws.com",
"eventName": "RevokeSecurityGroupIngress",
"awsRegion": "eu-west-1",
"sourceIPAddress": "195.89.75.182",
"userAgent": "console.ec2.amazonaws.com",
"requestParameters": {
"groupId": "sg-00d088d28c60e6bd0",
"ipPermissions": {
"items": [
{
"ipProtocol": "tcp",
"fromPort": 0,
"toPort": 0,
"groups": {},
"ipRanges": {
"items": [
{
"cidrIp": "0.0.0.0/0",
"description": "test-MUST-REMOVE!"
}
]
},
"ipv6Ranges": {},
"prefixListIds": {}
},
{
"ipProtocol": "tcp",
"fromPort": 0,
"toPort": 0,
"groups": {},
"ipRanges": {},
"ipv6Ranges": {
"items": [
{
"cidrIpv6": "::/0",
"description": "test-MUST-REMOVE!"
}
]
},
"prefixListIds": {}
}
]
}
},
"responseElements": {
"requestId": "93fc850f-65e7-464f-b2e0-3db1753a0c94",
"_return": true
},
"requestID": "93fc850f-65e7-464f-b2e0-3db1753a0c94",
"eventID": "2aa40c8d-cc28-45af-89c8-e8885d98dc00",
"eventType": "AwsApiCall"
}
}*
解决方案
- 这是我用来与松弛集成的代码
- 阅读 SNS 消息,然后在 slack webhook url 上发布消息。
import json
import logging
import os
from urllib2 import Request, urlopen, URLError, HTTPError
# Read all the environment variables
SLACK_WEBHOOK_URL = os.environ['SLACK_WEBHOOK_URL']
SLACK_USER = os.environ['SLACK_USER']
SLACK_CHANNEL = os.environ['SLACK_CHANNEL']
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def lambda_handler(event, context):
logger.info("Event: " + str(event))
# Read message posted on SNS Topic
message = json.loads(event['Records'][0]['Sns']['Message'])
logger.info("Message: " + str(message))
# Construct a new slack message
slack_message = {
'channel': SLACK_CHANNEL,
'username': SLACK_USER,
'text': "%s" % (message)
}
# Post message on SLACK_WEBHOOK_URL
req = Request(SLACK_WEBHOOK_URL, json.dumps(slack_message))
try:
response = urlopen(req)
response.read()
logger.info("Message posted to %s", slack_message['channel'])
except HTTPError as e:
logger.error("Request failed: %d %s", e.code, e.reason)
except URLError as e:
logger.error("Server connection failed: %s", e.reason)
推荐阅读
- datagrid - 使用 datagridConfig addColumn() 方法在 DatagridListener 中忽略 OROCRM Datagrid 单元格模板
- java - 如果输入正确,如何使(EditText)自动将用户发送到其他页面?无需按钮。安卓工作室
- r - 如何在一张图表中绘制多个箱线图?
- r - 为什么有些华夫饼图字形有效,而其他字形无效?
- javascript - 如何调用 clearTimeout 并仍然运行 setTimeout 的函数?
- exception - F#:使用签名文件实现异常时如何满足 IStructuralEquatable 要求?
- java - 使用二元运算符更改数字的位
- mysql - Where 子句中的未知列 (as)
- c# - 有没有办法在碰撞时触发脚本?(2D,c#,unity,个人项目)
- google-sheets - 基于下拉选择的项目列表