Woori FIS · AWS · Security
우리금융그룹 AWS 클라우드 보안 아키텍처
다중 AWS 계정의 망분리 요건을 서브넷과 방화벽 구조로 옮기고, 보안 구성을 Terraform 코드 한 벌로 표준화했습니다.
- 역할
- Cloud Security Engineer · 정보보안부 네트워크보안팀
- 기간
- 2026.02 – 2026.10
- CSP
- AWS
- 규모
- 다중 AWS 계정
- 핵심 기술
- Terraform · AWS Network Firewall · AWS WAF · AWS Shield Standard · GuardDuty · Security Hub · Splunk · Python
- 5
- Splunk SIEM/SOAR로 연동한 보안 서비스
- 3
- 망분리를 옮긴 설계 원칙
- 1
- 다중 AWS 계정에 적용하는 Terraform 코드
한눈에 보기
문제
그룹사들이 퍼블릭 클라우드를 처음 도입하는 단계에 Terraform이 없었고, 계정마다 담당자에 따라 보안 설정이 달랐습니다. 망분리 규정을 문서로만 지키기도 어려웠습니다.
접근
망분리(중요도가 다른 네트워크를 나눠 외부 위협이 내부로 바로 들어오지 못하게 하는 금융권 통제) 요건을 DMZ·Private 서브넷 분리, 백엔드 공인 IP 금지, 허용된 대상으로만 아웃바운드라는 세 원칙으로 옮겼습니다. WAF, Network Firewall, Shield Standard 구성을 Terraform으로 정의해 모든 계정에 같은 코드를 적용하고, GuardDuty와 Security Hub까지 Splunk SIEM/SOAR로 연동했습니다.
결과
계정이 늘어나도 같은 보안 기준이 코드로 반복되어 담당자별 정책 편차가 사라졌습니다. 다중 AWS 계정의 통신 구성은 Python 파이프라인으로 자동 수집·분석해 반복 가능한 점검이 됐습니다. IAM 권한도 Terraform으로 정의해 과도한 권한을 구조적으로 막았습니다.
자세히 보기
통신 범위 계산 (관련 공개 저장소 pf-09)
이 코드가 하는 일: 규칙의 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배운 점
보안 구성이 코드가 되면 계정별 차이가 코드 차이로 보입니다. 설정을 일일이 비교하지 않아도 어디가 다른지 바로 알 수 있습니다.
다음에 개선할 점
Shield는 Standard 범위로 운영했습니다. 다음에는 코드로 정의한 기준이 계정마다 실제로 지켜지는지 점검까지 자동화하고 싶습니다.