본문으로 건너뛰기

네트워크 아키텍처

Multi-Region Shopping Mall의 네트워크는 3-tier VPC 아키텍처를 기반으로 설계되었습니다. 각 리전은 독립적인 VPC를 가지며, Transit Gateway Peering을 통해 리전 간 통신을 수행합니다.

VPC 설계

CIDR 블록 할당

리전VPC CIDR용도
us-east-110.0.0.0/16Primary Region
us-west-210.1.0.0/16Secondary Region

us-east-1 서브넷 구성

TierAZ-aAZ-bAZ-c용도
Public10.0.1.0/2410.0.2.0/2410.0.3.0/24ALB, NAT Gateway
Private10.0.11.0/2410.0.12.0/2410.0.13.0/24EKS Worker Nodes
Data10.0.21.0/2410.0.22.0/2410.0.23.0/24Aurora, DocumentDB, ElastiCache, MSK, OpenSearch

us-west-2 서브넷 구성

TierAZ-aAZ-bAZ-c용도
Public10.1.1.0/2410.1.2.0/2410.1.3.0/24ALB, NAT Gateway
Private10.1.11.0/2410.1.12.0/2410.1.13.0/24EKS Worker Nodes
Data10.1.21.0/2410.1.22.0/2410.1.23.0/24Aurora, DocumentDB, ElastiCache, MSK, OpenSearch

3-Tier 아키텍처

Tier별 역할

Tier구성 요소인터넷 접근인바운드 트래픽
PublicALB, NAT GatewayDirectInternet → ALB
PrivateEKS Nodes, PodsNAT Gateway 경유ALB → EKS
Data모든 데이터 스토어없음EKS → Data stores

Transit Gateway Peering

리전 간 통신을 위해 Transit Gateway Peering을 사용합니다.

Transit Gateway 라우팅 테이블

us-east-1 TGW Route Table:

DestinationTarget용도
10.0.0.0/16VPC Attachment로컬 VPC
10.1.0.0/16Peering Attachmentus-west-2 VPC

us-west-2 TGW Route Table:

DestinationTarget용도
10.1.0.0/16VPC Attachment로컬 VPC
10.0.0.0/16Peering Attachmentus-east-1 VPC

Terraform 구성

# us-east-1 Transit Gateway
resource "aws_ec2_transit_gateway" "use1" {
provider = aws.us-east-1

description = "Multi-region TGW us-east-1"
default_route_table_association = "enable"
default_route_table_propagation = "enable"

tags = {
Name = "multi-region-tgw-use1"
}
}

# us-west-2 Transit Gateway
resource "aws_ec2_transit_gateway" "usw2" {
provider = aws.us-west-2

description = "Multi-region TGW us-west-2"
default_route_table_association = "enable"
default_route_table_propagation = "enable"

tags = {
Name = "multi-region-tgw-usw2"
}
}

# Transit Gateway Peering
resource "aws_ec2_transit_gateway_peering_attachment" "use1_usw2" {
provider = aws.us-east-1

peer_region = "us-west-2"
peer_transit_gateway_id = aws_ec2_transit_gateway.usw2.id
transit_gateway_id = aws_ec2_transit_gateway.use1.id

tags = {
Name = "tgw-peering-use1-usw2"
}
}

Security Groups

서비스별 Security Group 구성

Security Group 상세

ALB Security Group

방향프로토콜포트소스/대상용도
InboundTCP4430.0.0.0/0HTTPS 트래픽
InboundTCP800.0.0.0/0HTTP (리다이렉트)
OutboundTCP8080EKS SG서비스 포워딩

EKS Node Security Group

방향프로토콜포트소스/대상용도
InboundTCP8080ALB SG서비스 트래픽
InboundTCP443EKS Control PlaneAPI Server
InboundTCP10250EKS Control PlaneKubelet
InboundAllAllSelfPod 간 통신
OutboundTCP5432Aurora SGPostgreSQL
OutboundTCP27017DocumentDB SGMongoDB
OutboundTCP6379ElastiCache SGRedis/Valkey
OutboundTCP9096MSK SGKafka SASL
OutboundTCP443OpenSearch SGOpenSearch HTTPS
OutboundTCP4430.0.0.0/0AWS APIs, ECR

Aurora PostgreSQL Security Group

방향프로토콜포트소스/대상용도
InboundTCP5432EKS SGApplication 접속
InboundTCP543210.0.0.0/16리전 내 접속
InboundTCP543210.1.0.0/16Cross-region 복제

DocumentDB Security Group

방향프로토콜포트소스/대상용도
InboundTCP27017EKS SGApplication 접속
InboundTCP2701710.0.0.0/16리전 내 접속
InboundTCP2701710.1.0.0/16Cross-region 복제

ElastiCache Valkey Security Group

방향프로토콜포트소스/대상용도
InboundTCP6379EKS SGApplication 접속
InboundTCP6379Self클러스터 내 통신

MSK Kafka Security Group

방향프로토콜포트소스/대상용도
InboundTCP9096EKS SGSASL/SCRAM 인증
InboundTCP9092EKS SGPlaintext (내부)
InboundTCP2181EKS SGZookeeper
InboundTCP909610.0.0.0/16리전 내 접속
InboundTCP909610.1.0.0/16MSK Replicator

OpenSearch Security Group

방향프로토콜포트소스/대상용도
InboundTCP443EKS SGHTTPS API
InboundTCP9200EKS SGREST API
InboundTCP9300Self노드 간 통신

NAT Gateway

각 AZ에 독립적인 NAT Gateway를 배치하여 고가용성을 확보합니다.

NAT Gateway 장점

구성장점단점
AZ당 1개 NATAZ 장애 격리, Cross-AZ 트래픽 없음비용 증가 (3x)
단일 NAT비용 절감Single Point of Failure

현재 구성: AZ당 1개 NAT Gateway (고가용성 우선)

VPC Endpoints

Private 서브넷에서 AWS 서비스에 접근하기 위한 VPC Endpoints를 구성합니다.

Endpoint 유형

Endpoint유형서비스용도
S3Gatewaycom.amazonaws.region.s3오브젝트 스토리지
ECR APIInterfacecom.amazonaws.region.ecr.api이미지 메타데이터
ECR DKRInterfacecom.amazonaws.region.ecr.dkr이미지 다운로드
STSInterfacecom.amazonaws.region.stsIAM 역할 수임
CloudWatch LogsInterfacecom.amazonaws.region.logs로그 전송
Secrets ManagerInterfacecom.amazonaws.region.secretsmanager시크릿 조회
KMSInterfacecom.amazonaws.region.kms암호화 키

Gateway vs Interface Endpoint

특성Gateway EndpointInterface Endpoint
비용무료시간당 + 데이터 처리
지원 서비스S3, DynamoDB만대부분의 AWS 서비스
네트워크라우팅 테이블 수정ENI 생성 (Private IP)
DNS퍼블릭 DNS 사용Private DNS 지원

Terraform 구성

# S3 Gateway Endpoint
resource "aws_vpc_endpoint" "s3" {
vpc_id = aws_vpc.main.id
service_name = "com.amazonaws.${var.region}.s3"
vpc_endpoint_type = "Gateway"

route_table_ids = [
aws_route_table.private_a.id,
aws_route_table.private_b.id,
aws_route_table.private_c.id,
]

tags = {
Name = "s3-gateway-endpoint"
}
}

# ECR API Interface Endpoint
resource "aws_vpc_endpoint" "ecr_api" {
vpc_id = aws_vpc.main.id
service_name = "com.amazonaws.${var.region}.ecr.api"
vpc_endpoint_type = "Interface"
private_dns_enabled = true

subnet_ids = [
aws_subnet.private_a.id,
aws_subnet.private_b.id,
aws_subnet.private_c.id,
]

security_group_ids = [aws_security_group.vpc_endpoints.id]

tags = {
Name = "ecr-api-endpoint"
}
}

# Secrets Manager Interface Endpoint
resource "aws_vpc_endpoint" "secrets_manager" {
vpc_id = aws_vpc.main.id
service_name = "com.amazonaws.${var.region}.secretsmanager"
vpc_endpoint_type = "Interface"
private_dns_enabled = true

subnet_ids = [
aws_subnet.private_a.id,
aws_subnet.private_b.id,
aws_subnet.private_c.id,
]

security_group_ids = [aws_security_group.vpc_endpoints.id]

tags = {
Name = "secrets-manager-endpoint"
}
}

네트워크 흐름 요약

다음 단계