방화벽 정책 및 ACL
1) 목표와 원칙
방화벽/ACL은 데이터 평면 제어입니다. 기본 원칙:- 최소 특권: 필요한 만 허용하십시오 (명시 적 허용, 암시 적 거부).
- 세분화: 환경 격리 (prod/stage/dev), 테넌트, 임계 윤곽 (PCI/KMS/DB).
- 탈출 제어: 아웃 바운드 트래픽은 FQID/IP 목록 및 개인 엔드 포인트로 제한됩니다.
- 신원 인식 (L7): 결정은 IP뿐만 아니라 인증 된 엔티티 (SPIFFE/OIDC) 에 의해 이루어집니다.
- 코드로서의 인프라: 코드, 검토/CI/CD, 감사 변경 규칙.
2) 분류: 우리가 필터링하는 곳
2. 1 레이어 및 상태
L3/L4 무국적자: 클래식 ACL (CIDR, 프로토콜, 포트).
L3/L4 상태: 보안 그룹/NSG, 연결 모니터링.
L7 인식: 프록시/WAF/메쉬 RBAC (메소드, 경로, JWT 클레임, SNI).
인라인 대 대역 외: 인라인 방화벽 노선 트래픽; 대역 외-분석/경고.
2. 컨투어 2 개
주변 경계계: edge/WAF/Anti-DDoS.
핵심: 대중 교통 허브/
워크로드: SG/NSG неVM/ENI/POD.
앱 레벨: Envoy/Istio/NGINX 정책, 서비스 간 mTLS.
3) 클라우드 모델
AWS
보안 그룹 (SG): Stateful неENI/인스턴스/LB.
네트워크 ACL (NACL): 서브넷, 규칙 순서, 양방향 항목의 무국적자.
AWS 네트워크 방화벽/GWLB: L7 검사/IDS.
권장 사항: "SG-기본 제어, NACL-거친 펜싱/거부 목록".
푸른
NSG (stateful), ASG (태그 별 응용 프로그램 그룹), L7/IDS 용 Azure FW, Private Endpoints.
추천: sabnet + NIC의 NSG, ASG를 통한 서비스 태그.
GCP
VPC 방화벽 규칙 (stateful), 계층 적 FW (조직/폴더), Cloud Armor (L7), 개인 서비스 연결.
추천: org 수준의 가드 레일 + 프로젝트가 허용됩니다.
4) 규칙 설계: 패턴
4. 1 기본 세트
배치 리포지토리, 아티팩트 레지스터, 타사 API (개인/고정 출력을 통해) 에 허용되는 모든 출구 → 를 거부합니다.
동서 최소: 서비스는 필요한 종속성과 만 통신합니다.
관리자 액세스: MFA를 통한 요새/JIT, 녹음 세션을 통해.
4. 태그 및 그룹 2 개
IP 대신 라벨/태그를 사용하십시오: 'env', 'service', 'tier', 'tentier', 'pci = 참'.
태그가 변경되면 정책 업데이트-IP 그리드의 수동 편집 없음.
4. 3 수명주기
건식/적중 로그가있는 제안 → 평가 (준비) → 시행 (prod).
노화: 각 규칙에 대한 TTL/소유자, 사용되지 않은 자동 확인.
5) Kubernetes 및 서비스 메쉬
5. 1 네트워크 정책 (L3/L4)
최소값은 "필요한 것을 제외한 모든 것을 금지하는 것" 입니다
yaml apiVersion: networking. k8s. io/v1 kind: NetworkPolicy metadata: { name: deny-all, namespace: core }
spec:
podSelector: {}
policyTypes: ["Ingress","Egress"]
kind: NetworkPolicy metadata: { name: api-egress }
spec:
podSelector: { matchLabels: { app: api } }
egress:
- to:
- namespaceSelector: { matchLabels: { ns: db } }
ports: [{ protocol: TCP, port: 5432 }]
- to:
- ipBlock: { cidr: 10. 100. 0. 0/16 } # Private endpoints ports: [{ protocol: TCP, port: 443 }]
5. 2 L7 RBAC 텍스트 메쉬 (Istio/Envoy)
mSL + JWT 인증/청구/범위/경로.
yaml apiVersion: security. istio. io/v1 kind: AuthorizationPolicy metadata: { name: api-rbac }
spec:
selector: { matchLabels: { app: api } }
rules:
- from:
- source:
principals: ["spiffe://svc. payments"]
to:
- operation: { methods: ["POST"], paths: ["/v1/payouts"] }
when:
- key: request. headers[x-tenant]
values: ["eu-1","eu-2"]
6) 탈출 통제 및 개인 경계
PaaS/레지스터/리포지토리를 통한 PrivateLink/Private Service Connect 선호.
허용리스트 FQDN과 고정 IP (타사 허용량 목록) 가있는 GPS/프록시를 통한 나머지 출구.
인터넷에 포드/VM의 직접 액세스를 차단합니다. 출구 게이트웨이를 통해서만 예외.
7) DNS 및 SNI 인식 규칙
분할 수평선: 내부 영역은 외부에서 해결되지 않습니다.
발신 HTTPS (SNI 허용) 에 대한 FQID/SNI 지원이있는 FW/Proxy.
특정 공급 업체 도메인에 대한 고정 수정; IP의 변경 사항을 모니터링하십시오.
8) 로그, 감사, 관찰
흐름 로그 (VPC/VNet/NSG/NACL) 를 사용하여 SIEM으로 보냅니다.
로그의 'trace _ id' 를 통한 응용 프로그램과 관련이 있습니다.
메트릭: 적중/미스 규칙, 최고 화자, 드롭 레이트, 트래픽 비대칭, 탈출 누출.
보고서: "사용되지 않은 규칙", "가장 넓은 권한".
9) 코드 관리 (IaC) 및 검사
템플릿에 의하여 Terraform/CloudFormation + 모듈 식 정책.
코드로서의 정책 (OPA/Gatekeeper/Conftest): no '0. 0. 0. 0/0 ', 요구 사항' 설명/소유자/ttl ', prod/dev의 혼합 금지.
CI: 보푸라기, 정적 분석, 도달 가능성 분석기, 계획보기, 필수 동료 검토.
10) 실행 가능성 테스트 및 혼돈
상이한 서브넷/AZ/영역으로부터의 합성 샘플: 히/443, 데이터베이스/브로커의 특정 포트.
DR 경로를 확인하기위한 임시 거부: → 종속성 비활성화는 재시도/회로/대체를 트리거해야합니다.
MTU/MSS: 주변 장치 (특히 IPsec/NAT-T) 에 단편화가 없는지 확인하십시오.
11) 성능과 신뢰성
중앙 집중식 병목 현상을 피하십시오: 스케일 인라인 -FW (GWLB/스케일 세트).
허브 간 분포를위한 ECMP/AS 경로/BGP.
TLS 검사 프로필: 포인트 (비싼), 키 인쇄물을 별도로 저장하고 규정 준수를 준수하십시오.
12) 구성 요소의 예 (참조, 단축)
12. 1 AWS SG: API → Postgres + S3 PrivateLink
hcl resource "aws_security_group" "api" {
name = "sg-api"
description = "Ingress from ALB, egress to DB and PrivateLink"
vpc_id = var. vpc_id
ingress { from_port=8080 to_port=8080 protocol="tcp" security_groups=[aws_security_group. alb. id] }
egress { from_port=5432 to_port=5432 protocol="tcp" security_groups=[aws_security_group. db. id] }
egress { from_port=443 to_port=443 protocol="tcp" prefix_list_ids=[aws_vpc_endpoint. s3. prefix_list_id] }
tags = { owner="team-api", env=var. env, ttl="2026-01-01" }
}
12. 2 Azure NSG: 기본값으로 거부 + 허용 요새
bash az network nsg rule create -g rg -n allow-bastion --nsg-name nsg-app \
--priority 100 --direction Inbound --access Allow --protocol Tcp \
--source-address-prefixes 10. 0. 0. 10 --source-port-ranges "" \
--destination-port-ranges 22 --destination-address-prefixes 10. 1. 0. 0/16
12. 3 GCP 계층 적 방화벽: org- 가드 레일
yaml direction: INGRESS priority: 1000 action: deny enableLogging: true match:
layer4Configs: [{ ipProtocol: "all" }]
srcIpRanges: ["0. 0. 0. 0/0"]
targetResources: ["organizations/123456"]
12. 4 특사 RBAC (L7 허용)
yaml
- name: envoy. filters. http. rbac typed_config:
rules:
action: ALLOW policies:
payments-post:
permissions: [{ url_path: { path: "/v1/payouts", ignore_case: true } }]
principals: [{ authenticated: { principal_name: { exact: "spiffe://svc. payments" } } }]
13) 안티 패턴
`0. 0. 0. 유입/유출 "일시적으로" → 에서 0/0 '은 영원히 유지됩니다.
코드와 개정없이 "눈송이" (콘솔의 수동 편집).
prod/stage/dev에 대한 일반적인 SG/NSG; 임계 및 비 임계 서브넷 혼합.
탈출 제어 부족 및 개인 엔드 포인트 → 키/비밀 유출
DNA/SNI 무시: 공급 업체의 IP 허용-내일 변경되었으며 전체 범위가 열렸습니다.
흐름 로그가 없으며 런북 → 위상 조정이 불가능합니다.
14) iGaming/Finance 세부 사항 (PCI/규제)
인터넷이없는 별도의 VRF/세그먼트에있는 PCI CDE; PSP/로그에 액세스하십시오-mTLS 및 HMAC의 개인 연결/프록시를 통해.
데이터 레지던트: PII/결제 이벤트 - 국가/지역 내; 지역간-집계/익명 만 가능합니다.
KMS/Vault/HSM: 개별 서브넷/SG, 인증서가 짧은 mSL 클라이언트 만 있습니다.
WORM 감사: 변경되지 않는 스토리지 (Object Lock) 의 FW/흐름 로그, 최소 유지
파트너 (PSP/KYC): 공급자 별 FQDN리스트, 정적 출구 IP, SLA 모니터링.
15) Prod 준비 점검표
- 통합 세분화 모델 (허브 앤 스포크, VRF), 교차점이없는 CIDR.
- 기본적으로 거부하는 не출구; PaaS/스토리지에 대한 개인 엔드 포인트.
- SG/NSG는 서브넷/허브의 워크로드, NACL/경로 필터에 적합합니다.
- K8: 네트워크 정책 "모두 거부", 메쉬 mSL + L7 RBAC.
- IP 대신 태그/그룹; 각 규칙에 대한 소유자/TTL/설명.
- IaC + 코드 정책; 도달 가능성 시뮬레이션이있는 CI; 필수 동료 검토.
- 유량 로그 활성화; 대시 보드 탑 토커, 드롭 레이트; "탈출 누출" 에 대한 경고.
- 관리자 액세스를위한 Bastion/JIT; MFA; 로깅 세션.
- 런북 '및: 규칙을 추가/제거하는 방법, 사고에서 작동하는 방법; "죽은" 규칙의 정기적 인 개정.
- PCI/Finance: CDE 격리, WORM 감사, PSP/KYC에 대한 FQDN- 허용, 정적 출구 IP.
16) TL; DR
계층별 보호 구축: 워크로드의 SG/NSG 스테이트, 서브넷의 NACL/경로 필터, 메쉬/프록시의 L7 RBAC, 주변의 WAF/에지. 기본적으로-기본적으로 거부하면 제어 된 포인트 또는 개인 엔드 포인트를 통해서만 빠져 나옵니다. 규칙을 코드로 설명하고 정책 및 도달 가능성 시뮬레이터로 확인하고 흐름 로그를 수집하십시오. iGaming/Finance의 경우 PCI 세분화, WORM 감사 및 엄격한 FQDN- 허용을 PSP/KYC에 추가하십시오.