亚马逊AWS官方博客

Amazon Systems Manager Incident Manager 配置指南

概述

Amazon Systems Manager Incident Manager是一个事件管理控制台。事件管理器可以通知用户,突出显示相关的故障以及提供相关工具来使服务恢复正常。 为了帮助用户熟悉如何在亚马逊云平台上使用Amazon Systems Manager Incident Manager,亚马逊工程师开发了以下演示项目供您参考。

整体架构

架构分为四大块:

  • Amazon EventBridge
  • Amazon Systems Manager Incident Manager
  • Amazon Config
  • Amazon Chatbot

在本Demo中,我们会创建一个安全组,配置Amazon Config来评估这个安全组。随后我们会添加一条不合规的Inbound Rules,这个安全组的不合规状态会被Amazon EventBridge捕捉到,随即会触发Amazon Incident Manager的响应计划。最后报警信息会被发布到相关聊天频道中,还会通过提升计划以邮件的形式逐层通知到相关人员,同时还会执行运行手册自动地修复不合规的资源,使其达到合规状态。

步骤

在开始之前,请先确保您具有登录AWS 全球区控制台的账号,并具备管理员权限,您可以先登录控制台,选择合适的区域,并保持窗口开启。

一、创建Amazon SNS

请按下面的信息创建SNS。

  • Name: IncidentManagerSNS
  • Display Name: IncidentManagerSNS

二、创建Amazon Chime并配置Webhook

复制Webhook URL,下一个步骤会使用到。

三、创建Amazon Chatbot

请按下面的信息创建Chatbot,目前Amazon Chatbot支持两种客户端,Amazon Chime和Slack,这里我们以Amazon Chime为例,进行配置。

  • Chat client: Amazon Chime
  • Name: IncidentManagerChatbot
  • Webhook URL: 第二步复制的Webhook URL
  • Webhook description: IncidentManagerChatbot
  • Role Name: AWSChatbot-role
  • Region: Asia Pacific – Singapore
  • Topics: IncidentManagerSNS

四、在Amazon VPC中创建用于测试的Security Group

请按下面的信息创建SG。

  • Security group name: IncidentManagerTestSG
  • Description: IncidentManagerTestSG
  • VPC: 默认VPC

五、在Amazon Config中创建Rules

请按下面的信息创建Amazon Config Rules。

  • AWS Managed Rules: restricted-ssh

六、创建IAM Role

请按下面的信息分别创建用于Amazon Incident Manager和Amazon Document的IAM Role。

  • IncidentManagerRole
    • Role name: IncidentManagerRole
    • Role description: Allows Incident Manager to call AWS services on your behalf
    • Trusted entities: AWS service: ssm-incidents.amazonaws.com
    • Policies:
      • AmazonSSMFullAccess
      • AmazonEC2FullAccess

  • IncidentDocumentRole
    • Role name: IncidentDocumentRole
    • Role description: Allows Document to call AWS services
    • Trusted entities: AWS service: ssm.amazonaws.com
    • Policies:
      • AmazonEC2FullAccess
      • AWSConfigRulesExecutionRole

七、在Amazon System Manager中创建Document

选择Create automation,输入“IncidentManagerDocument”,选择Editor,粘贴以下内容,替换assumeRole为第六步创建的IncidentDocumentRole的ARN。

description: ''
schemaVersion: '0.3'
assumeRole: 'arn:aws:iam::012345678910:role/IncidentDocumentRole'
mainSteps:
  - name: RevokeIngress
    action: 'aws:executeScript'
    inputs:
      Runtime: python3.6
      Handler: script_handler
      Script: |-
        import boto3
        def script_handler(events, context):
            configClient = boto3.client('config')
            ec2 = boto3.resource('ec2')
            response = configClient.get_compliance_details_by_config_rule(
                ConfigRuleName='restricted-ssh',
                ComplianceTypes=[
                    'NON_COMPLIANT'
                ]
            )
            resourceList = []
            for tmpResult in response['EvaluationResults']:
                tmpResourceId = tmpResult['EvaluationResultIdentifier']['EvaluationResultQualifier']['ResourceId']
                security_group = ec2.SecurityGroup(tmpResourceId)
                response = security_group.revoke_ingress(
                    CidrIp='0.0.0.0/0',
                    FromPort=22,
                    IpProtocol='tcp',

八、在Amazon Incident Manager中创建Contacts

请按下面的信息创建Contact information。

  • Name: ope01
  • Unique alias: ope01
  • Contact channel:

九、在Amazon Incident Manager中创建Escalation plans

Escalation plan可以逐层通知相关联系人,在本指南中只通知了一层联系人,请按下面的信息创建escalation plan。

  • Name: escalation01
  • Alias: escalation01
  • Stage1
    • Contact Name: ope01

十、在Amazon Incident Manager中创建Response plans

请按下面的信息创建response plan。

Name: response01

  • Title: response01
  • Impact: Critical
  • Chat channel: IncidentManagerChatot
  • Chat channel SNS topics: IncidentManagerSNS
  • Engagements: escalation01
  • Runbook
    • Owner: Owned by me
    • Runbook: IncidentManagerDocument
    • Version: Default at the time of execuion
    • Role name: IncidentManagerRole

十一、在Amazon EventBridge中创建Rule

请按下面的信息创建Rule。

  • Name: IncidentManagerRule

选择Event Pattern,Custom pattern,粘贴以下内容,替换GroupId为第四步中创建的Security Group Id。

{
  "source": ["aws.config"],
  "detail-type": ["Config Rules Compliance Change"],
  "detail": {
    "messageType": ["ComplianceChangeNotification"],
    "configRuleName": ["restricted-ssh"],
    "resourceType": ["AWS::EC2::SecurityGroup"],
    "newEvaluationResult": {
      "complianceType": ["NON_COMPLIANT"]
    }
  }
  • Target
    • Incident Manager response plan
    • Reponse plan: response01

测试验证

一、添加Inbound Rules

请按以下信息往本指南中创建的SG里添加一条Inbound Rule。

  • Type: SSH
  • Source: Anywhere-IPv4

二、告警检查

  • Incident Manager检查,已成功报警。

  • Amazon Chime检查,已成功报警。

  • Amazon System Manager Automation检查,已成功执行。

  • Security Group检查,不合规的Inbound Rule已被删除。

本篇作者

杨探

亚马逊云科技解决方案架构师,负责互联网行业云端架构咨询和设计。