본문으로 건너뛰기

네트워크 아키텍처

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"
}
}

네트워크 흐름 요약​

다음 단계​