AWS 네트워크 구성 패턴 가이드

 

개요

AWS 네트워크 구성 시 참고하기 좋은 여러가지 패턴들을 모아놓은 가이드 문서입니다.

 

네트워크 구성 사례

Transit Gateway 연결 구성

Transit Gateway는 VPN 및 Direct Connect 전용선을 모두 사용할 수 있습니다. Transit Gateway를 사용하면 VPC, 온프레미스 데이터 센터, 다른 AWS 계정에서 호스팅되는 VPC 등과 같은 여러 곳에서 사용할 수 있는 중앙 집중식 가상 프라이빗 네트워크를 구성할 수 있습니다. VPN을 사용하여 인터넷을 통해 안전하게 연결할 수 있고, 전용선을 사용하여 보다 안전하고 빠른 연결을 설정할 수 있습니다. 이를 통해 효율적이고 심플한 네트워크 구성을 유지할 수 있습니다.

 

일반적인 Direct Connect 아키텍처

Direct Connect (DX)

AWS Direct Connect는 회사 내부 네트워크 혹은 기존 데이터 센터 환경의 온프레미스 장비와 AWS 클라우드 네트워크를 전용 회선으로 연결하여, 하이브리드 클라우드 환경을 구축할 수 있는 네트워크 서비스입니다.
전용 회선의 장점인 높은 보안성일관된 네트워크 대역폭을 제공하고, AWS 서비스의 트래픽 비용 (Data transfer Out)을 절감시킬 수 있는 장점이 있습니다.

 

Direct Connect Locations

2024년 3월 6일 기준으로 서울 리전의 계약 가능한 Direct Connect Location 목록

더 자세한 정보는 AWS DX Location 공식 문서를 참조합니다.

 

Virtual Interface

줄여서 VIF라고 부릅니다. Virtual Interface는 DX Location 담당자와 통화하면서 연결 작업을 진행해야 합니다.
이 때, AWS측의 가상 인터페이스 2개를 서로 BGP ASN을 동일하게 맞춰서 구성해주어야 합니다.

 

VIF 타입 주의사항

Transit Gateway와 Direct Connect를 연결해서 사용하는 경우에는, Virtual Interface 타입을 Transit Virtual Interface만 사용할 수 있습니다.
Private VIF나 Public VIF를 사용중인 경우, 아래와 같은 에러가 발생하면서 Direct Connect와 Transit Gateway를 연결할 수 없습니다.

Transit Gateway 에러

Cannot associate Transit Gateway to Direct Connect Gateway that has Private Virtual Interfaces attached

 

Virtual Interface의 잘못된 타입으로 인해 Direct Connect Gateway와 Transit Gateway를 연결하지 못하는 상황을 표현한 구성도입니다.

에러 발생 시스템 구성도

이 경우, 다음 순서대로 Virtual Interface 오류를 조치합니다.

 

Transit Gateway

Transit Gateway는 AWS의 네트워크 중앙 허브입니다.
다음과 같은 연결이 필요한 경우 Transit Gateway를 사용합니다.

Transit Gateway Attachment

VPC와 VPC를 연결하면 Transit Gateway Attachment(ENI)가 지정된 서브넷에 생성됩니다. 이를 통해 Transit Gateway로 트래픽을 송수신합니다.

Transit Gateway 구축 시에는 AWS 공식문서의 Transit Gateway 설계 모범 사례를 준수해서 만들기를 권장합니다.

 

Transit Gateway에 라우팅 룰은 크게 2가지로 구분됩니다.

 

VPC Endpoint 통합

여러 개의 VPC 환경에서 S3, KMS, SNS 등의 엔드포인트를 하나의 계정에서 통합관리 하기

VPC Endpoint는 크게 2가지 타입으로 구분됩니다.

 

Interface Endpoint를 사용하면 여러 개의 VPC의 Private Subnet에서 공통으로 사용하는 서비스 S3, KMS, ECR 등의 엔드포인트를 통합 관리할 수 있습니다.

VPC Endpoint 통합

생성절차는 다음과 같습니다.

VPC Endpoint 설정 화면

Route 53에서 Private Hosted Zone 생성한 화면

참고자료
AWS VPC PrivateLink를 이용한 네트워크 구성 전략(박병진) - 당근 SRE 밋업 1회

 

Route 53 Inbound Resolver

온프레미스 데이터센터에서 AWS Private DNS 사용하고 싶을 경우 Route 53 Inbound Resolver를 생성하면 됩니다.

Route 53 Inbound Resolver 예시

Route 53 Inbound Resolver 공식문서

 

SSM Session Manager

SSM Session Manager

Private Subnet에 위치한 EC2 인스턴스에 SSM Sessions Manager를 접속하기 위해서는 3개의 VPC Endpoint 등록이 필요합니다.

1 | Interface Type | com.amazonaws.REGION.ssmmessages  
2 | Interface Type | com.amazonaws.REGION.ec2messages  
3 | Interface Type | com.amazonaws.REGION.ssm

 

SSM Session Manager용 VPC Endpoint를 구성할 때에는 아래 문서들을 참고하면 좋습니다.

Systems Manager를 사용하여 인터넷 액세스 없이 프라이빗 EC2 인스턴스를 관리할 수 있도록 VPC 엔드포인트를 생성하려면 어떻게 해야 합니까?
AWS Knowledge Center

Automated configuration of Session Manager without an internet gateway
AWS Blog

Step 5: Create VPC endpoints
SSM Session Manager에 필요한 VPC Endpoint 생성 가이드

 

SSM Session Manager 중앙집중식 로깅

서버 원격관리 방식으로 SSM Session Manager를 사용하는 경우 중앙집중식으로 SSM 로깅을 할 수 있습니다.

중앙집중식 로깅 아키텍쳐

여러 AWS 계정의 SSM 로그를 지정된 하나의 AWS 계정으로 모으면 다음과 같은 장점이 있습니다.

 

S3 버킷에 저장된 SSM Session Manager 로그에는 아래와 같이 접속 시간, 실행한 명령어와 결과가 저장됩니다.

Script started on 2023-01-19 07:10:08+0000
[?1034hsh-4.2$ 
[Ksh-4.2$ 

sh-4.2$ uptime

 07:09:57 up 39 min,  0 users,  load average: 0.00, 0.00, 0.00

sh-4.2$ exit

exit

Script done on 2023-01-19 07:10:08+0000

 

중앙 로깅용 S3 버킷 정책Bucket Policy의 예시는 다음과 같습니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowLoggingSSMFromCrossAccountInstances",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": [
                "s3:PutObjectAcl",
                "s3:PutObject",
                "s3:GetEncryptionConfiguration"
            ],
            "Resource": [
                "arn:aws:s3:::<YOUR_SSM_LOGGING_BUCKET_NAME>",
                "arn:aws:s3:::<YOUR_SSM_LOGGING_BUCKET_NAME>/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:PrincipalOrgID": "<YOUR_AWS_ORGANIZATION_ID>"
                }
            }
        },
        {
            "Sid": "DenyDeleteBucketFromAnyone",
            "Effect": "Deny",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:DeleteBucket",
            "Resource": "arn:aws:s3:::<YOUR-SSM-LOGGING-BUCKET-NAME>"
        }
    ]
}

 

하나의 ALB에서 여러 도메인 라우팅

HTTPS Listener Rule을 사용하면 동일한 로드 밸런서에서 여러 도메인에 따라 백엔드 서버를 다르게 보낼 수 있습니다.
도메인을 구분하는 방법은 Listener Rule의 조건문에서 Host Header를 사용하면 됩니다.

HTTPS Listener Rule 예시

Application Load Balancer를 사용하여 호스트 기반 라우팅을 설정하려면 어떻게 해야 합니까?
AWS 공식 가이드

 

QueryPie

QueryPie Proxy 기능을 활용하여 EC2 인스턴스가 DB에 직접 접근하지 않고, QueryPie를 통해 경유해 접속하도록 안전한 DB 접속 경로를 제공합니다.

QueryPie Proxy 접속경로

 

Central Egress

Centralized egress to internet

Central Egress 아키텍처