出于审计的目的,我们常常要记录VPC中所有服务请求了哪些域名,并且要针对部分黑名单域名进行拦截。
前者便是Route53 Resolver所提供的Log Query功能
https://www.amazonaws.cn/new/2021/amazon-route-53-resolver-supports-vpc-dns-query-logging-available-china-regions
需要注意的是直接访问IP由于没有DNS解析过程,所以并不会被记录下来。
而后者便是DNS Firewall功能
https://www.amazonaws.cn/new/2022/amazon-route-53-resolver-dns-firewall-is-now-available/
本文将创建VPC,并且创建实例进行Log Query以及DNS Firewall的初探。
创建VPC,我们使用最新的Console创建VPC,如下图

目前VPC创建的界面已经非常直观了,左边可以选择要创建的内容,例如几个公有子网,几个私有子网,几个NAT GW以及要不要创建VPC Endpoint,右侧则可以直观的看出,VPC创建后的拓扑。
在此我们简单创建一个拥有一个公有子网,并且有一个S3 Endpoint的VPC。

通过workflow,我们可以看到这个过程中实际执行了什么,并且生成了什么资源。
然后我们开启Route53 Resolver的Query Logging功能,这需要我们定位到Route 53这个服务中

我们配置Query Logging,并且将日志输出到CloudWatch Log Group中

最后我们得到了一个Query Logging配置

我们跳转到CloudWatch Logs服务,可以看到测试用的第一条Log已经正常写入

这是我们便可以在VPC中创建我们的EC2了。
我们创建EC2时,选择正确的IAM Profile,并且不添加Key,我们将使用EC2 Instance Connect来连接它。

接下来我们使用EC2 Instance Connect来连接Instance

用户名保留ec2-user

我们创建DNS Firewall Rule Group

在新增规则页面,我们添加一个domain list,并且当请求匹配时,我们返回NXDOMAIN

创建后,将Rule Group与VPC关联,这个步骤可能需要稍等一会儿。

绑定之后,实例并不是实时就被防护了,稍等一会儿我们就能得到下面这个结果。

可以看到DNS防火墙已经按照预期工作了,通过查看CloudWatch Log我们也得到了防火墙工作的证明。

总结
为了满足审计需要的R53 Query Logging,所产生的日志也可以存储到S3中(比CloudWatch Logs要便宜),它仅满足审计需要,常常要结合DNS Firewall对特定域名进行阻断。