一、背景
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功能
公有 DNS 查询日志记录
https://docs.amazonaws.cn/Route53/latest/DeveloperGuide/query-logs.html