Amazon Bedrock AgentCore 게이트웨이를 (오직 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 기반 제한만으로는 서비스 엔드포인트 자체가 공개된 상태이기 때문에 그 노출을 제거하지 못합니다. 인그레스 격리 요구사항이 엄격한 환경에서는 이것이 중요한 격차가 됩니다.
Source: …
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는 현재 동등한 격리 구성을 제공하지 않으므로, 추가적인 경계가 도입되어야 합니다.
Source: …
CloudFront‑전용 액세스 강제 아키텍처

예시:
- 공용 진입점:
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에 도달할 수 없게 되어 진정한 네트워크 적용 경계가 형성됩니다.
Source: …
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
AgentCore 앞에 ALB를 배치할 때:
-
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가 해당 경계를 제공합니다.