Amazon Bedrock AgentCore Gateway를 접근 가능하게 만들기 (오직 CloudFront를 통해서만)
Source: Dev.to
Tags: aws, architecture, genai, cloud, security

Amazon Bedrock AgentCore Gateway는 GenAI 기반 API를 손쉽게 노출할 수 있게 해줍니다.
AWS는 CloudFront를 사용해 사용자 지정 도메인을 연결하는 공식 패턴을 제공합니다:
Client → CloudFront → AgentCore Gateway
공식 문서:
많은 사용 사례에서 이 접근 방식으로 충분합니다.
하지만 요구 사항이 더 강력해야 한다면 어떨까요?
이 엔드포인트는 특정 CloudFront 배포를 통해서만 접근 가능해야 합니다.
이때가 바로 아키텍처 경계가 중요한 순간입니다.
숨겨진 노출 문제
다음과 같은 경우에도:
- CloudFront가 앞에 배치됨
- AWS WAF가 연결됨
- 사용자 지정 도메인이 구성됨
기본 AgentCore Gateway 서비스 엔드포인트는 공개적으로 접근 가능합니다. CloudFront는 역방향 프록시 역할을 할 뿐, 엄격한 격리 경계는 아닙니다.
AgentCore는 리소스 기반 정책을 지원합니다:
이 정책들은 주로 누가 게이트웨이를 호출할 수 있는지를 제어합니다 (IAM 주체, AWS 계정, 지원되는 조건 키). 이 모델은 내부 서비스‑간 통신에는 잘 맞지만, 공개 API의 경우:
- 외부 소비자는 IAM을 사용해 인증하지 않습니다.
- 인증은 일반적으로 OAuth, JWT, API 키 또는 사용자 정의 헤더에 의존합니다.
- 정당한 사용자를 위해 엔드포인트는 인터넷에서 접근 가능해야 합니다.
따라서 정당한 트래픽이 CloudFront를 통해 흐르더라도, 추가적인 제어가 도입되지 않으면 기본 Gateway 엔드포인트는 여전히 인터넷에서 직접 접근 가능할 수 있습니다. IAM 기반 제한은 서비스 엔드포인트 자체가 공개된 상태이기 때문에 그 노출을 제거하지 못합니다. 인그레스 격리 요구사항이 엄격한 환경에서는 이것이 중요한 격차가 됩니다.
이것을 S3 + CloudFront (OAI / OAC)와 비교하기
Amazon S3는 오직 CloudFront만 버킷에 접근할 수 있다는 기본적인 강제 수단을 제공합니다. Origin Access Identity (OAI) 또는 Origin Access Control (OAC) 를 사용하면 S3 버킷을 비공개로 만들고 특정 CloudFront 배포에만 접근을 제한할 수 있습니다.
예시 S3 버킷 정책:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowCloudFrontAccessOnly",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E123ABC456XYZ"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-private-bucket/*"
}
]
}
이 모델에서는:
- 버킷이 공개되지 않습니다.
- 직접 인터넷 접근이 실패합니다.
- 오직 CloudFront 아이덴티티만 허용됩니다.
AgentCore는 현재 동등한 격리 구조를 제공하지 않으므로, 추가적인 경계가 도입되어야 합니다.
CloudFront‑Only 액세스 강제 아키텍처

예시:
- 공용 진입점:
ext-clients-api-57x9abc.mycompany.com - 필수 하위 Host 헤더:
gw-abc123.gateway.bedrock-agentcore.us-east-1.amazonaws.com
네트워크 계층에서 CloudFront‑전용 적용
**Application Load Balancer (ALB)**는 공개 주소를 가질 수 있지만, 공개 인터넷에서 접근할 필요는 없습니다. 인바운드 트래픽은 AWS Managed Prefix Lists for CloudFront를 사용하여 제한할 수 있습니다:
AWS는 CloudFront origin‑facing IP 범위를 포함하는 관리형 프리픽스 리스트를 유지합니다. 이 관리형 프리픽스 리스트를 ALB 보안 그룹에 연결하고 인바운드 HTTPS를 오직 다음으로부터 허용합니다:
com.amazonaws.global.cloudfront.origin-facing
이것이 달성하는 것
- 오직 CloudFront 엣지 로케이션만 ALB와 TCP 연결을 수립할 수 있습니다.
- 직접 인터넷 트래픽은 보안‑그룹 수준에서 차단됩니다.
- IP 스푸핑으로 제한을 우회할 수 없습니다.
CloudFront가 없으면 ALB에 접근할 수 없으며, 진정한 네트워크 적용 경계를 형성합니다.
AWS WAF와 DDoS 보호가 위치하는 곳
이 설계는 계층형 보호를 가능하게 합니다.
CloudFront (엣지 레이어)
CloudFront는 AWS Shield Standard에 의해 자동으로 보호되며, 엣지에서 DDoS 완화를 제공합니다. CloudFront에 연결된 AWS WAF는 다음을 제공할 수 있습니다:
- 비율 기반 규칙(남용 방지 및 스크래핑 보호)
- IP 평판 필터링
- 지리적 제한
- AWS 관리형 규칙 그룹
- AWS Bot Control
- 계정 탈취 방지(ATP)
- 인증 필드 검사
- 헤더 검증
- 페이로드 크기 제한
악의적인 트래픽은 인프라에 도달하기 전에 필터링됩니다.
ALB (인그레스 레이어)
AWS WAF는 ALB에도 연결하여 다음을 적용할 수 있습니다:
- 필수 커스텀 헤더 검증(예: CloudFront가 삽입한 비밀 헤더)
- 서비스에 더 가깝게 적용되는 추가 비율 제한 또는 봇 제어
- CloudFront 규칙을 우회하는 애플리케이션 레이어 공격에 대한 보호
이러한 레이어를 결합하면 “CloudFront‑only” 요구 사항을 만족하면서도 정당한 사용자가 접근할 수 있는 공개 API를 제공하는 방어‑심층(Defense‑in‑Depth) 자세를 구현할 수 있습니다.
CloudFront가 삽입한 비밀 헤더
- 엄격한 Host 헤더 검증
- 추가 관리형 규칙 그룹
- 인증 흐름 검사
ALB DNS 이름이 발견되더라도:
- 관리형 프리픽스 리스트 제한으로 직접 연결 시도가 실패합니다.
- 헤더 검증 및 WAF 규칙으로 위조된 요청이 차단됩니다.
이로 인해 세 가지 시행 레이어가 형성됩니다:
- 엣지 – Shield + WAF
- 네트워크 – 관리형 프리픽스 리스트 제한
- 애플리케이션 – ALB WAF + 리스너 규칙
기술적 과제: TLS vs Host Header
-
ALB는 맞춤 도메인에 대한 인증서를 사용하여 TLS를 종료해야 합니다, 예시:
ext-clients-api-57x9abc.mycompany.com -
하위 라우팅에서는 다른 HTTP Host 헤더가 필요할 수 있습니다, 예시:
gw-abc123.gateway.bedrock-agentcore.us-east-1.amazonaws.com
이들은 서로 다른 프로토콜 계층에 속합니다:
| 계층 | 목적 |
|---|---|
| TLS (SNI) | 인증서 검증을 제어 |
| HTTP | Host 헤더가 라우팅 로직을 제어 |
AgentCore는 임의의 맞춤 도메인을 인바운드로 수용하지 않으므로, 이 불일치는 트래픽이 AgentCore에 도달하기 전에 해결되어야 합니다.
솔루션: CloudFront 오리진 수정
CloudFront Functions는 다음을 수정할 수 있습니다:
domainName– TLS/SNI용 오리진 연결 호스트명hostHeader– 오리진에 전달되는 HTTP Host 헤더
예시 함수
import cf from 'cloudfront';
const ORIGIN_DOMAIN_NAME = 'ext-clients-api-57x9abc.mycompany.com';
const OVERRIDE_HOST_HEADER = 'gw-abc123.gateway.bedrock-agentcore.us-east-1.amazonaws.com';
function handler(event) {
const request = event.request;
cf.updateRequestOrigin({
domainName: ORIGIN_DOMAIN_NAME,
hostHeader: OVERRIDE_HOST_HEADER
});
return request;
}
이를 통해 다음을 구현할 수 있습니다:
- ALB 인증서에 대한 TLS 검증.
- 필요한 Host 헤더에 기반한 ALB 라우팅.
- 외부 클라이언트가 오직 커스텀 도메인만을 통해 상호 작용하도록 제한.
- AgentCore가 오직 제어된 CloudFront → ALB → PrivateLink 경로를 통해서만 접근 가능하도록 유지.
최종 결과
아키텍처는 다음을 제공합니다:
- 맞춤 도메인 지원
- 엣지 수준 DDoS 보호 (Shield Standard)
- 고급 WAF 보호 (속도 제한, ATP, 봇 제어, 관리형 규칙)
- 네트워크 수준 CloudFront 전용 적용
- ALB에서의 인그레스 검증
- VPC 엔드포인트 (PrivateLink)를 통한 프라이빗 연결
- GenAI 워크로드를 위한 강력한 인그레스 격리
기본 AWS 패턴은 표준 배포에 잘 맞습니다.
엄격한 CloudFront 전용 접근성이 필요할 때는 아키텍처 경계가 필요합니다.
CloudFront + 관리형 프리픽스 리스트 + ALB + PrivateLink + 계층형 WAF가 해당 경계를 제공합니다.