AWS

AWS VPC 보안, DNS 방화벽, 네트워크 방화벽 리소스

devfinger 2024. 10. 22. 19:54
VPC
 
보안
  • 네트워크 ACL
  • 보안 그룹
DNS 방화벽
  • 규칙 그룹
  • 도메인 목록
네트워크 방화벽
  • 방화벽
  • 방화벽 정책
  • Network Firewall 규칙 그룹
  • TLS 검사 구성
  • 네트워크 방화벽 리소스 그룹

1. VPC 네트워크 ACL (Network ACL)

필수 항목:

  • vpc_id: 네트워크 ACL이 속할 VPC ID (필수)

선택 항목:

  • subnet_ids: 연결된 서브넷 IDs (선택적)
  • egress: 아웃바운드 규칙 (선택적)
  • ingress: 인바운드 규칙 (선택적)

리소스 이름: aws_network_acl

resource "aws_network_acl" "main_nacl" {
  vpc_id = aws_vpc.main_vpc.id  # 필수: VPC ID

  # 옵션: 인바운드 규칙
  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    rule_no     = 100
    action      = "allow"
    cidr_block  = "0.0.0.0/0"
  }

  # 옵션: 아웃바운드 규칙
  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    rule_no     = 200
    action      = "allow"
    cidr_block  = "0.0.0.0/0"
  }

  tags = {
    Name = "MainNetworkACL"
  }
}

 

2. 보안 그룹 (Security Group)

필수 항목:

  • vpc_id: 보안 그룹이 속할 VPC ID (필수)

선택 항목:

  • ingress: 인바운드 규칙 (선택적)
  • egress: 아웃바운드 규칙 (선택적)
  • tags: 태그 추가 (선택적)

리소스 이름: aws_security_group

resource "aws_security_group" "main_sg" {
  vpc_id = aws_vpc.main_vpc.id  # 필수: VPC ID

  # 옵션: 인바운드 규칙
  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  # 옵션: 아웃바운드 규칙
  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }

  tags = {
    Name = "MainSecurityGroup"
  }
}

 

3. 규칙 그룹 (Rule Group)

필수 항목:

  • rule_group: 규칙 그룹의 정의 (필수)
  • capacity: 규칙 그룹의 최대 처리량 (필수)

리소스 이름: aws_networkfirewall_rule_group

resource "aws_networkfirewall_rule_group" "main_rule_group" {
  capacity = 1000  # 필수: 처리량
  rule_group {
    rules_source {
      stateless_rules_and_custom_actions {
        stateless_rules {
          priority = 1
          rule_definition {
            match_attributes {
              protocols = [6]
            }
            actions = ["aws:pass"]
          }
        }
      }
    }
  }

  tags = {
    Name = "MainRuleGroup"
  }
}

 

4. 도메인 목록 (Domain List)

필수 항목:

  • domains: 도메인 목록 (필수)

리소스 이름: aws_networkfirewall_rule_group

resource "aws_networkfirewall_rule_group" "domain_list" {
  capacity = 1000  # 필수: 처리량
  rule_group {
    rules_source {
      rules_string = <<RULES
alert http any any -> any any (msg:"Example rule"; content:"example.com"; sid:1;)
RULES
    }
  }

  tags = {
    Name = "DomainRuleGroup"
  }
}

 

5. 방화벽 (Network Firewall)

필수 항목:

  • vpc_id: 방화벽이 연결될 VPC (필수)
  • subnet_mappings: 방화벽이 배포될 서브넷 목록 (필수)

리소스 이름: aws_networkfirewall_firewall

resource "aws_networkfirewall_firewall" "main_firewall" {
  name     = "MainFirewall"
  vpc_id   = aws_vpc.main_vpc.id  # 필수: 연결된 VPC
  firewall_policy_arn = aws_networkfirewall_firewall_policy.main_firewall_policy.arn

  subnet_mappings {
    subnet_id = aws_subnet.public_subnet.id  # 필수: 방화벽이 배포될 서브넷
  }

  tags = {
    Name = "MainFirewall"
  }
}

 

6. 방화벽 정책 (Firewall Policy)

필수 항목:

  • firewall_policy: 방화벽 정책 정의 (필수)

리소스 이름: aws_networkfirewall_firewall_policy

resource "aws_networkfirewall_firewall_policy" "main_firewall_policy" {
  name = "MainFirewallPolicy"
  firewall_policy {
    stateless_default_actions = ["aws:forward_to_sfe"]
    stateless_fragment_default_actions = ["aws:forward_to_sfe"]
    stateless_rule_group_references {
      priority = 10
      resource_arn = aws_networkfirewall_rule_group.main_rule_group.arn
    }
  }

  tags = {
    Name = "MainFirewallPolicy"
  }
}

 

7. TLS 검사 구성 (TLS Inspection Configuration)

필수 항목:

  • tls_inspection_configuration: TLS 검사 구성 (필수)

리소스 이름: aws_networkfirewall_tls_inspection_configuration

resource "aws_networkfirewall_tls_inspection_configuration" "main_tls_inspection" {
  tls_inspection_configuration {
    server_certificates {
      certificate_arn = "arn:aws:acm:us-west-2:123456789012:certificate/abcd1234-56ef-78gh-90ij-klmnopqrstuv"
    }
  }

  tags = {
    Name = "MainTLSInspection"
  }
}

 

8. 네트워크 방화벽 리소스 그룹 (Network Firewall Resource Group)

필수 항목:

  • resource_group_name: 리소스 그룹 이름 (필수)

리소스 이름: aws_networkfirewall_resource_group

resource "aws_networkfirewall_resource_group" "main_resource_group" {
  resource_group_name = "MainResourceGroup"  # 필수: 리소스 그룹 이름

  tags = {
    Name = "MainResourceGroup"
  }
}