우리금융그룹 AWS 클라우드 보안 아키텍처 설계 및 구현
다중 AWS 계정의 망분리 요건을 서브넷과 방화벽 구조로 옮기고, 보안 구성을 Terraform 코드 한 벌로 표준화했습니다.
통신 범위 계산 (관련 공개 저장소 pf-09)
이 코드가 하는 일: 확인하려는 대상 대역 목록과 방화벽 규칙의 CIDR 목록을 받아, 어떤 규칙에도 덮이지 않는 대역만 돌려줍니다. 규칙을 하나씩 적용하면서 그 규칙 안에 완전히 들어가는 대역은 지우고, 규칙이 대역의 일부만 덮으면 덮인 부분을 잘라 낸 나머지 대역만 남기며, 형식이 잘못된 CIDR은 건너뜁니다. 결과가 비어 있으면 요청한 통신이 이미 규칙으로 열려 있다는 뜻이고, 남은 대역이 있으면 정확히 그 범위만 새로 열면 된다는 뜻이라 중복 규칙 없이 필요한 만큼만 판단할 수 있습니다.
def uncovered_networks(
targets: Iterable[ipaddress.IPv4Network], rule_cidrs: Iterable[str]
) -> list[ipaddress.IPv4Network]:
"""The parts of the targets that no rule reaches."""
remaining = list(targets)
for cidr in rule_cidrs:
try:
rule = ipaddress.IPv4Network(cidr, strict=False)
except ValueError:
continue
next_round: list[ipaddress.IPv4Network] = []
for network in remaining:
if network.subnet_of(rule):
continue
if rule.subnet_of(network):
next_round.extend(network.address_exclude(rule))
else:
next_round.append(network)
remaining = next_round
return remaining