AWS中通过Endpoint Security(如Amazon GuardDuty)与安全组、网络ACL联动实现协同防御

设计AWS云架构方案实现基于AWS Endpoint Security(EPS)与AWS服务深度集成,结合AWS CLI或管理控制台,EPS与VPC安全组、网络ACL联动,实现网络层与终端层的协同防御。例如,当EPS检测到某实例被入侵时,可通过API自动调整安全组规则,限制其出站流量,以及具体实现的详细步骤和关键代码。

通过此方案,可实现终端层与网络层的实时联动防御,提升AWS环境的安全性。


架构设计概述

  1. 检测层:使用Amazon GuardDuty监控EC2实例的安全事件。
  2. 事件触发:通过Amazon EventBridge捕获GuardDuty事件并触发Lambda函数。
  3. 响应层:Lambda函数自动修改安全组规则限制受感染实例的出站流量,可选联动网络ACL。
  4. 恢复机制:记录原始安全组配置,支持手动或自动恢复。

详细步骤

1. 启用Amazon GuardDuty
  • 在AWS控制台启用GuardDuty,并配置检测规则(默认已包含常见威胁检测)。

2. 创建EventBridge规则监听GuardDuty事件
  • 规则名称 : guardduty-to-lambda

  • 事件模式 :

    json 复制代码
    {
      "source": ["aws.guardduty"],
      "detail-type": ["GuardDuty Finding"],
      "detail": {
        "severity": [7, 8, 8.9, 9],  // 高严重性事件
        "resource": {"resourceType": ["Instance"]}
      }
    }
  • 目标:选择后续创建的Lambda函数。


3. 创建Lambda函数处理事件
  • Runtime: Python 3.9+

  • IAM角色 :附加以下权限策略:

    json 复制代码
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "ec2:CreateSecurityGroup",
            "ec2:AuthorizeSecurityGroupIngress",
            "ec2:RevokeSecurityGroupEgress",
            "ec2:ModifyInstanceAttribute",
            "ec2:DescribeInstances"
          ],
          "Resource": "*"
        }
      ]
    }

4. Lambda函数代码
python 复制代码
import boto3

def lambda_handler(event, context):
    # 解析事件中的实例ID
    instance_id = event['detail']['resource']['instanceDetails']['instanceId']
    ec2 = boto3.resource('ec2')
    instance = ec2.Instance(instance_id)
    
    # 获取实例的私有IP(用于网络ACL可选步骤)
    private_ip = instance.private_ip_address
    
    # 创建隔离安全组,仅允许管理员SSH访问
    ec2_client = boto3.client('ec2')
    isolated_sg = ec2_client.create_security_group(
        GroupName='Isolated_SG',
        Description='Restrict all outbound traffic',
        VpcId=instance.vpc_id
    )
    sg_id = isolated_sg['GroupId']
    
    # 添加入站规则:允许管理员IP访问SSH
    ec2_client.authorize_security_group_ingress(
        GroupId=sg_id,
        IpPermissions=[{
            'IpProtocol': 'tcp',
            'FromPort': 22,
            'ToPort': 22,
            'IpRanges': [{'CidrIp': 'YOUR_ADMIN_IP/32'}]
        }]
    )
    
    # 移除默认出站规则并拒绝所有出站
    ec2_client.revoke_security_group_egress(
        GroupId=sg_id,
        IpPermissions=[{'IpProtocol': '-1', 'IpRanges': [{'CidrIp': '0.0.0.0/0'}]}]
    )
    
    # 将实例关联到新安全组
    instance.modify_attribute(Groups=[sg_id])
    
    # (可选)修改网络ACL
    subnet = ec2.Subnet(instance.subnet_id)
    nacl_id = subnet.network_acl_id
    
    # 添加拒绝该实例出站的ACL规则(规则号需唯一)
    ec2_client.create_network_acl_entry(
        NetworkAclId=nacl_id,
        RuleNumber=100,
        Protocol='-1',
        RuleAction='deny',
        Egress=True,
        CidrBlock=f'{private_ip}/32'
    )
    
    return {'status': 'success'}

5. 测试与验证
  1. 模拟一次入侵(如触发GuardDuty的测试事件)。
  2. 检查Lambda日志(CloudWatch Logs),确认安全组和网络ACL被正确修改。
  3. 验证受感染实例的出站流量是否被阻断。

6. 恢复流程
  • 手动恢复
    1. 将实例重新关联原始安全组。
    2. 删除临时创建的隔离安全组和网络ACL条目。
  • 自动恢复:可通过额外Lambda定时任务或基于GuardDuty的解决事件触发。

关键注意事项

  1. 规则号冲突 :网络ACL的RuleNumber需唯一,建议使用动态生成的高位数值(如时间戳后几位)。
  2. 安全组默认规则:新安全组默认拒绝所有入站、允许所有出站,需显式移除出站规则。
  3. 跨账户支持:若GuardDuty跨账户检测,需配置EventBridge跨账户权限。
相关推荐
沪上企服通22 分钟前
高端财税的技术切面:从“可审计级旧账重建“看企业税务合规中台的架构演进
架构
西安景驰电子28 分钟前
《PTP精确时间协议系列》第一篇:从原理到应用,全面解读IEEE 1588
linux·运维·服务器·开发语言·网络·windows·php
Bruce_Liuxiaowei38 分钟前
基于微步在线威胁情报的公网 IP 攻击迹象监测:threatbook_query 脚本全解析与 BruceSec 平台整合实践
数据库·tcp/ip·安全·网络安全·智能体
ZJU_统一阿萨姆1 小时前
【DSH】如何将 DeepSeek Harness 嵌入生产环境?万字解构 DeepSeek Agent Harness 的运行机制与安全边界
前端·javascript·安全
ZGi.ai1 小时前
多模型回答不稳定:路由规则与评测方法
网络·人工智能·大模型评测·多模型·模型路由·zgi·模型网关
dogstarhuang1 小时前
大模型 API 停服怎么办:用 API 网关实现多模型统一接入与可切换架构
人工智能·后端·架构·大模型·api·数字化转型·ai应用
明航咨询_贾老师1 小时前
CISP-AISE知识体系大纲深度解读:6大模块,国内首个AI安全应用官方认证
人工智能·安全
80s7772 小时前
独享住宅IP、长效代理ip是什么?有哪些作用?
网络·网络协议·tcp/ip
IPdodo_2 小时前
静态 IP、住宅 IP 和固定出口有什么区别?开发场景选型指南
服务器·网络·网络协议·tcp/ip·代理ip
40岁资深老架构师尼恩2 小时前
工业级 AI问数 AST语法 + 知识图谱语义+ 质量规则 三层安全校验 架构设计与实现
人工智能·安全·知识图谱