使用Route53 Log Query记录VPC内的DNS请求

一、背景

Route53支持对特定VPC内发起的DNS请求进行记录,由此可以记录VPC内应用对外访问的请求信息。仅限域名,通过IP直接访问的不会记录。

本文介绍如何开启Route53的DNS日志,然后将其输出到CloudWatch的日志组的这样一个简单场景。在生产环境中,日志信息还可以输出到Kinesis或者OpenSearch,以便于各种分析。如果是低频分析,审计用途为主,也可以将日志输出到S3存储桶。

请注意:Query logging功能是记录日志的审计能力,不是实时阻断。如果您需要实施阻断,那么应该考虑Route53 DNS Firewall(2022年10月AWS中国区也上线了此功能),或者使用Network Firewall(简称NFW),或者使用网络流量深度检测的终极解决方案Gateway Load Balancer(简称GWLB)。因此基于以上的信息,可选择一个合适的方案。

本文以中国区为例进行配置,配置将默认VPC的日志输出到CloudWatch日志组。

二、开启日志

进入Route53界面,点击左侧的Query logging按钮,确认右侧显示的区域是正确的区域。由于记录VPC内的日志请求,因此VPC是Regional区域级别的服务,因此必须选择正确的区域,否则无法记录。如下截图。

点击配置Configure query logging按钮,然后输入名称mydnslog,然后选择日志交付的目的地是CloudWatch Loggroup,在下拉框中选择Create log group表示创建一个新的CloudWatch日志组,然后在名称位置输入/aws/route53/dnslog/bjs/default-vpc。这样的多级命名的名称,便于区分多种日志,未来检索更方便。然后将页面向下滑动。如下截图。

接下来在VPCs to log queries for的位置上,点击Add VPC,将要记录日志的VPC添加进来。本文添加AWS账户内的初始就存在的默认VPC。最后点击Configure query logging按钮创建日志。如下截图。

创建完成。如下截图。

三、模拟访问后查看DNS日志

在本VPC上使用Windows或者Linux发起对外部互联网的访问。在某些情况下,即便没有主动发起对外访问,Windows和Linux的EC2上内置的AWS System Manager的Agent(简称SSM Agent)也会对AWS的EC2控制台发起特定查询,保持EC2健康。这个访问会被DNS记录下来。

进入刚才创建的界面,在下方可看到名为mydnslog的日志,并会带有CloudWatch日志组跳转入口的连接。点击进入。如下截图。

进入日志组后,可看到其中有多条日志,按时间排序点击最新的查看。如下截图。

点击展开日志后,可看到其中的内容,是Windows的EC2内置的安全功能smartscreen连接微软官方服务器的访问请求。如下截图。

继续展开日志,即可看到EC2的SSM Agent连接AWS云端健康状态的请求。如下截图。

注意,在配置完成后,建议修改CloudWatch的本Log Group的保存日志的时间周期。为了降低存储费用,建议将DNS日志配置到3-7天,以节省存储成本。如果需要大量日志,可采用本文一开始介绍的将日志输出到S3的办法,即可降低日志存储成本。

四、参考文档

中国区发布Route53 Query logging功能

https://www.amazonaws.cn/new/2021/amazon-route-53-resolver-supports-vpc-dns-query-logging-available-china-regions/?nc1=h_ls

公有 DNS 查询日志记录

https://docs.amazonaws.cn/Route53/latest/DeveloperGuide/query-logs.html