Security_Monitoring

实验概述:

安全监控是一个综合的概念,主要是指通过各种技术手段和管理措施,对系统、网络、环境、人员等诸多方面进行持续的观察、检测,以发现潜在的安全威胁或者已经发生的安全事件,并能够及时做出响应的一系列活动。

实验目标:

配置一个 Amazon Linux 2 实例,将日志文件发送到 Amazon CloudWatch。然后,创建一个 Amazon CloudWatch 告警和通知。最后,创建一个 CloudWatch 告警和通知来监控通过 NAT 网关传出的流量

alt text

(*)图解:

  • 一个在第一个可用区具有一个公有子网和两个私有子网且在第二个可用区具有一个公有子网的 VPC。

  • 一个具有两个节点(每个公有子网中各有一个)的 Network Load Balancer。

  • 一个在第一个私有子网中充当 Web 服务器的 EC2 实例。

  • 一个在第二个私有子网中充当数据库服务器的 EC2 实例。

  • 两个安全组,每个安全组根据实例用途各自对应一个实例。

网络流量从外部用户流经互联网网关,到达两个 Network Load Balancer 节点之一,最后到达 Web 服务器。如果请求在 Web 服务器上运行的 WordPress 博客站点的 URL,流量也会流向数据库服务器。

CloudWatch

CloudWatch是一种监控服务,它允许用户实时监控 AWS 资源以及在 AWS 上运行的应用程序。CloudWatch 能够收集和跟踪指标,这些指标是衡量相关资源和应用程序的变量。用户可以创建自定义控制面板,显示自定义应用程序的指标,并展示所选指标的自定义集合。

Session Manager

使用户可以使用基于浏览器的一键式交互 Shell 或 AWS Command Line Interface (AWS CLI) 来管理这些资源。

Network Load Balancer

是一种在网络层运行的负载均衡服务。它主要负责在多个目标(如EC2实例、容器和IP地址)之间自动分配传入的流量,并监控这些目标的健康状况,确保只有健康的实例接收流量。NLB能够处理大量的请求,每秒可以处理数百万个请求,适合于需要处理高并发和高吞吐量的场景。

容器:

提供了一种标准的方法来将应用程序的代码、配置和依赖项打包到单个对象中。容器会共享安装在服务器上的操作系统,并作为资源受到隔离的进程运行。容器旨在提供快速、可靠和一致的部署,不受环境的影响。容器提供了进程隔离,这意味着您可以拆分应用程序,并将其作为微服务这种独立组件来运行。

alt text

解决问题:

  • 将安全日志从数据库服务器发送到 CloudWatch,接下来可以创建 CloudWatch 指标和告警来监控日志中的任何异常行为。

  • 创建一个 CloudWatch 指标筛选条件来查找数据库服务器日志中的身份验证失败事件消息。

  • 创建一个 CloudWatch 告警来监控与通过 NAT 网关传出的流量相关的指标。

任务1:将本地日志从 EC2 实例发送到 CloudWatch

1.1:安装 CloudWatch 代理

  • 在 Connect to instance(连接到实例)页面上,选择 Session Manager 选项卡,打开终端安装 Amazon CloudWatch 代理程序包。

  • 启动CloudWatch 代理配置向导,该向导打开菜单根据所需选择

  • 比如:对于 Are you using EC2 or On-Premises hosts(使用 EC2 还是本地主机),输入 1 表示 EC2。

对于 Which user are you planning to run the agent(您打算让哪位用户运行代理),输入 1 表示 root(根用户)。

1.2:在安全日志中生成身份验证失败

运行以下命令: su dbdev 该命令意为尝试以 dbdev 身份登录,用于访问或管理与 "dbdev" 相关的数据库或服务 "su" 是一个在 Unix 和类 Unix 操作系统中用于切换用户身份的命令,全称为 "switch user"。

  • 当系统提示输入密码时,发挥创造力,尝试猜测密码可能是什么!请记住,您正在尝试生成身份验证失败,因此登录失败才是您想要的。

  • 重复前面的两个步骤三次,总共生成 4 次失败的登录尝试。

1.3:验证已将日志文件发送到 CloudWatch

  • 在页面顶部的统一搜索栏中,搜索并选择 CloudWatch。

  • 在页面左侧导航窗格的 Logs(日志)下,选择 Log groups(日志组)。

  • 在 Log groups(日志组)页面上,选择日志组的链接。

  • 如果未列出,请等待 1 分钟,然后选择页面右上角刷新按钮。

  • 在页面上,选择 Log streams(日志流)选项卡。

  • 在Log streams(日志流)部分中,注意有一个日志流以数据库服务器实例的 EC2 实例 ID 命名。

任务2:创建 CloudWatch 告警和通知

2.1:创建指标筛选条件

  • Metric filters(指标筛选条件)部分的右上角,选择 Create metric filter(创建指标筛选条件)。

  • 在 Define pattern(定义模式)页面上:

  • 在 Create filter pattern(创建筛选条件模式)部分,对于 Filter pattern(筛选条件模式),输入 "authentication failure"。

  • 在 Test pattern(测试模式)部分,对于 Select log data to test(选择日志数据进行测试),选择数据库服务器的 EC2 实例 ID。

  • 在 Assign metric(分配指标)页面上:

  • 在 Create filter name(创建筛选条件名称)部分,对于 Filter name(筛选条件名称),输入 database server authentication failures。

  • 在 Metric details(指标详细信息)部分,对于 Metric namespace(指标命名空间),输入 authentication failures,并验证是否启用 Create new(新建)选项。

  • 对于 Metric name(指标名称),输入 database server authentication failures。

  • 对于 Metric value(指标值),输入 1。

  • 对于 Default value(默认值),输入 0。

  • 提示:用户可以根据公司需求设定指标

    如下图所示:

alt text

2.2:通过指标筛选条件创建 CloudWatch 告警

  • 选择 Create Alarm(创建告警)。

  • 此时,一个新的 Web 浏览器标签页将打开 Specify metrics and conditions(指定指标和条件)页面。

  • 在 Specify metrics and conditions(指定指标和条件)页面的 Metric(指标)部分,验证以下默认设置:

  • 对于 Metric name(指标名称),输入 database server authentication failures。

  • 对于 Statistic(统计数据),选择 Sum(求和)。

  • 对于 Period(周期),选择 5 minutes(5 分钟)。

  • 在 Conditions(条件)部分:

  • 对于 Threshold type(阈值类型),选择 Static(静态)。

  • 对于 Whenever database server authentication failures is…(当数据库服务器身份验证失败…),选择 Greater(大于)。

  • 对于 than…(阈值…),输入 2。 展开 Additional configuration(其他配置)部分,然后进行以下配置:

  • 对于 Missing data treatment(缺失的数据处理),选择 Treat missing data as good (not breaching threshold)(将缺失的数据视为有效数据(未超出阈值))。

  • 在页面底部,选择 Next(下一步)。

  • 在 Configure actions(配置操作)页面的 Notification(通知)部分:

  • 对于 Alarm state trigger(告警状态触发器),选择 In alarm(告警中)

  • 对于 Select an SNS topic(选择 SNS 主题),选择 Create new topic(创建新主题)。

  • 对于 Create a new topic…(创建新主题…),输入CloudWatch_alarm_notifications。

  • 对于 Email endpoints that will receive the notification…(将接收通知的电子邮件终端节点…),输入您的电子邮件地址。

  • 选择 Create topic(创建主题)。

  • 在页面底部,选择 Next(下一步)。

  • 在 Add name and description(添加名称和描述)页面上:

  • 对于 Alarm name(告警名称),输入 database server authentication failures alarm。

  • 对于 Alarm description(告警描述),输入 Alarms and notifies for more than 2 authentication failures over a span of 5 minutes。

  • 选择 Next(下一步)。

  • 在 Preview and create(预览和创建)页面的底部,选择 Create alarm(创建告警)。

2.3:验证已激活告警

  • 在配置告警时,您将其设置为在 5 分钟内出现两次或两次以上身份验证失败时发出提醒。如果出现这种情况,告警状态将变为 In alarm(告警中),直到在另一个 5 分钟或更长时间内未出现身份验证失败,告警状态才会重新变为 OK(正常)。

  • 果告警状态是 OK(正常),请返回到 Database Server(数据库服务器)控制台会话,尝试以 dbdev 身份再次登录。

  • 如果需要的话,可以参阅任务 1.2 中的命令,尝试以 dbdev 身份登录。

  • 此时,告警状态将显示为 In alarm(告警中),而您将收到一封关于状态更改的电子邮件通知。

  • 检查您的电子邮件,看看是否收到了 AWS Notifications 发送的主题行为 AWS Notification - Subscription Confirmation(AWS Notification – 订阅确认)的电子邮件。

  • 选择 Confirm subscription link(确认订阅链接)

任务3:监控 NAT 网关

3.1:创建 CloudWatch 告警来监控通过 NAT 网关传出的网络流量

  • 在 Metrics(指标)部分顶部的搜索栏中,搜索 BytesOutToDestination。

  • 此时,指标列表将仅显示 BytesOutToDestination 指标名称。

  • 选择与这些说明左侧列出的 NatGatewayId 的值相匹配的 NatGatewayId 的指标。

  • 在页面底部,选择 Select metric(选择指标)。

  • 在 Specify metrics and conditions(指定指标和条件)页面的 Metric(指标)部分:

  • 对于 Metric name(指标名称),输入 BytesOutToDestination。

  • 对于 NatGatewayId,验证它是否与这些说明左侧列出的 NatGatewayId 的值相匹配。

  • 对于 Statistic(统计数据),选择 Sum(求和)。

  • 对于 Period(周期),选择 15 minutes(15 分钟)。

  • 在 Conditions(条件)部分:

  • 对于 Threshold type(阈值类型),选择 Static(静态)。

  • 对于 Whenever database server authentication failures is…(当数据库服务器身份验证失败…),选择 Greater(大于)。

  • 对于 than…(阈值…),输入 2000000。

  • 在页面底部,选择 Next(下一步)。

  • 在 Configure actions(配置操作)页面的 Notification(通知)部分:

-对于 Alarm state trigger(告警状态触发器),选择 In alarm(告警中) -对于 Select an SNS topic(选择 SNS 主题),选择 Select an existing SNS topic(选择现有 SNS 主题)。

  • 对于 Send a notification to…(将通知发送到…),选择 CloudWatch_alarm_notifications。

  • 在页面底部,选择 Next(下一步)。

  • 在 Add name and description(添加名称和描述)页面上:

  • 对于 Alarm name(告警名称),输入 NAT gateway outgoing traffic alarm。

  • 对于 Alarm description(告警描述),输入 Alarms and notifies for more than 2 MB of outgoing network traffic over 15 minutes。

  • 选择 Next(下一步)。

  • 在 Preview and create(预览和创建)页面的底部,选择 Create alarm(创建告警)。

  • 您将在页面顶部看到一条绿色横幅,其中显示以下消息:Successfully created alarm(已成功创建告警)。

3.2:生成足够的传出流量来激活告警

  • 接下来,您需要将数据上传到 S3 存储桶以生成足够的传出流量来触发告警。在实验环境构建过程中,一个名为 SampleData.zip 的示例文件已被添加到数据库服务器实例。该文件的大小约为 2.3MB

  • 设置一个环境变量来保存 S3 存储桶的名称:

  • 将 TEST_BUCKET 占位符值替换为这些说明左侧列出的 TestBucket 值。

  • 运行以下命令,将 SampleData.zip 文件上传到实验环境中的 S3 存储桶。

aws s3 cp ~/SampleData.zip s3://$TestBucket/

(1)aws s3 cp:这是 AWS CLI 的一个命令,用于复制文件和对象。cp 代表“copy”,即复制。

(2)~/SampleData.zip:这是本地文件的路径。

(3)s3://$TestBucket/:这是 AWS S3 存储桶的路径。

  • 输出将显示一条上传消息,表明已成功将文件上传到 S3。

  • 返回到打开 CloudWatch 控制台的 Web 浏览器标签页。

  • 如果您当前尚未处于 Alarms(告警)页面,请在页面左侧的导航窗格中选择 All alarms(所有告警)。

  • 等待大约 1-2 分钟,然后刷新页面。此时,您将看到 NAT gateway outgoing traffic alarm(NAT 网关传出流量告警)的状态显示为 In alarm(告警中)。您还将收到一封来自 AWS Notifications 的通知电子邮件,其中包含告警状态更改的详细信息。

  • 恭喜!您已成功创建 CloudWatch 告警来监控通过 NAT 网关传出的网络流量!

总结

  • 配置一个 Amazon Linux 2 实例,将日志文件发送到 Amazon CloudWatch

  • 创建 Amazon CloudWatch 告警和通知,监控失败的登录尝试

  • 创建 Amazon CloudWatch 告警,监控通过 NAT 网关的网络流量

作者:张祉杰