随着公司规模的日益增加,aws账号也随之增多,每个账号都有独立的NAT 导致无法对外网进行统一的管理,安全风险随之增加。为了更好的管理,在充分调研后,我们准备采用AWS原生的Network firewall 实现白名单访问。
- 需要实现的目标:
(1) 用户只能访问白名单的域名
(2)对于访问失败的域名要有log 输出,并且可以使用aws cloudwatch 分析出被阻挡的URL
(3)在增加网站时需要对网站地址进行检查
架构图如下:
由于我们在上新服务的时候只允许使用infra as code 的方式,所以本次部署采用terraform 部署,代码可以参考aws官方
https://github.com/aws-samples/aws-network-firewall-terraform
aws 官方部署是基于黑名单的,所以请将 firewall.tf 文件中代码generated_rules_type = "ALLOWLIST"
resource "aws_networkfirewall_rule_group" "block_domains" {
capacity = 100
name = "block-domains"
type = "STATEFUL"
rule_group {
rule_variables {
ip_sets {
key = "HOME_NET"
ip_set {
definition = [aws_vpc.spoke_vpc_a.cidr_block, aws_vpc.spoke_vpc_b.cidr_block]
}
}
}
rules_source {
rules_source_list {
generated_rules_type = "LIST"
target_types = ["HTTP_HOST", "TLS_SNI"]
targets = [".facebook.com", ".twitter.com"]
}
}
}
}