들어가며
AWS가 아닌 다른 서버에 배포된 애플리케이션이 AWS 서비스를 사용할 때 놓치기 쉬운 부분이 아웃바운드 방화벽입니다. 아웃바운드 방화벽이 있다면 애플리케이션이 AWS 서비스를 호출할 수 있도록 방화벽을 열어야 합니다.
예를 들어 S3를 사용한다면, S3에 접근하기 위해 임시 자격 증명을 발급하는 STS 엔드포인트와 S3 엔드포인트를 아웃바운드 방화벽에서 허용해야 합니다.

이상적인 아웃바운드 설정: FQDN 허용
가장 이상적인 아웃바운드 설정은 FQDN을 허용하는 것입니다. 방화벽이 FQDN 설정을 지원하면, 접근하는 AWS 리소스의 도메인만 방화벽에 등록하면 됩니다. ap-northeast-2 리전을 사용한다면 STS와 S3를 아래처럼 방화벽에 등록합니다.
sts.ap-northeast-2.amazonaws.com
s3.ap-northeast-2.amazonaws.com
문제 상황: IP 기반 아웃바운드 방화벽
FQDN을 지원하지 않는 아웃바운드 방화벽이라면 AWS IP 대역을 방화벽에 등록해야 합니다. 문제는 IP가 계속 바뀌고, 리전 하나만 해도 IP 대역이 천 개 가까이 된다는 점입니다. 사용하는 리전이 늘어나면 등록해야 할 IP 대역은 급격히 늘어납니다.
curl -fsSL https://ip-ranges.amazonaws.com/ip-ranges.json \
| jq -r '.prefixes[]
| select(.region == "ap-northeast-2" or .region == "GLOBAL")
| .ip_prefix'
3.5.140.0/22
23.228.249.0/24
120.52.22.96/27
3.2.75.0/24
...
해결 방법: AWS 리소스 IP 고정
IP 기반 아웃바운드 방화벽에서는 AWS 리소스의 IP를 고정하면 문제가 해결됩니다. VPC endpoint로 IP를 고정하고, NLB로 그 endpoint를 외부에 공개한 뒤, 애플리케이션의 DNS 응답을 NLB로 바꾸는 순서로 진행합니다.
VPC endpoint로 IP 고정하기
AWS 리소스의 IP는 VPC endpoint로 고정할 수 있습니다. VPC endpoint를 생성하면 endpoint DNS가 만들어지고, 이 DNS에 매핑된 IP는 고정됩니다. 아래 예제는 STS 엔드포인트를 VPC endpoint로 고정한 결과입니다.


VPC endpoint로 AWS 리소스의 IP를 고정할 수는 있지만, endpoint IP가 private IP라서 외부에서는 VPC endpoint를 호출하지 못합니다. 그래서 다음 단계는 endpoint를 외부에서 호출할 수 있게 만드는 것입니다.
NLB로 endpoint를 외부에 공개하기
VPC endpoint를 NLB의 target group으로 등록하면, 외부에서 NLB를 통해 VPC endpoint를 호출할 수 있습니다. 그리고 NLB는 고정 IP를 설정할 수 있기 때문에 “고정된 endpoint”라는 요구 조건에도 부합합니다.

DNS 응답을 NLB로 바꾸기
남은 문제는 사용하려는 AWS 서비스 도메인의 DNS 응답을 우리가 만든 NLB IP로 바꾸는 것입니다. DNS 응답을 바꾸는 방법은 여러 가지가 있으므로 환경에 맞게 선택하면 됩니다. 가장 간단한 방법은 hosts 파일을 수정하는 것입니다.
$ vi /etc/hosts
{NLB IP} sts.ap-northeast-2.amazonaws.com
{NLB IP} bedrock-agentcore.ap-northeast-2.amazonaws.com
forward proxy로 hosts 파일 수정 없이 우회하기
서버의 hosts 파일을 수정할 수 없다면, 서버의 DNS서버를 수정 또는 forward proxy를 사용하는 방법도 있습니다. 애플리케이션은 AWS 리소스에 접근할 때 forward proxy를 거치도록 하고, forward proxy가 AWS 리소스 대신 NLB를 호출하도록 설정하면 됩니다.

예를 들어 Squid proxy를 사용한다면, Squid의 CONNECT 요청을 허용하고 Squid 서버의 hosts 파일을 수정하면 됩니다.

인터넷 통신이 안 된다면
인터넷 통신이 불가능한 환경이라면, 애플리케이션 서버와 AWS를 전용회선 또는 Site to Site VPN으로 연결하고 애플리케이션에서 VPC endpoint DNS를 직접 호출하면 됩니다. AWS SDK에서 endpoint_url을 VPC endpoint DNS로 바꿉니다.
import boto3
sts = boto3.client(
"sts",
region_name="ap-northeast-2",
endpoint_url="https://vpce-xxxxxxxxxxxxxxxxx-abcde.sts.ap-northeast-2.vpce.amazonaws.com",
)
identity = sts.get_caller_identity()
print(identity)
참고로 Site to Site VPN은 이전 저의 글에 언급한 것 처럼 private 통신이 아니니 보안정책을 검토해야 합니다.
- Site to Site VPN 정리: https://malwareanalysis.tistory.com/893
'전공영역 공부 기록' 카테고리의 다른 글
| vLLM 처리량 설정 옵션 - max_num_seqs(batch size) (0) | 2026.08.30 |
|---|---|
| vLLM KV Cache pool 크기는 무엇으로 결정될까? (0) | 2026.08.30 |
| AI모델 로딩과 서빙에 필요한 VRAM은 다릅니다 (0) | 2026.08.30 |
| GPU 하드웨어 스펙표를 처음 볼 때, 보면 좋을 스펙 (0) | 2026.08.23 |
| FP32·BF16·TF32, AI 모델의 숫자 표현을 이해 (0) | 2026.08.23 |