Bedrock AgentCore gateway의 사용자별 트래픽 제한 도입
Bedrock AgentCore gateway가 개별 사용자의 트래픽 소비량을 제어하는 속도 제한 기능을 도입했다. 특정 사용자가 자원을 독점해 전체 서비스가 마비되는 상황을 막아 하위 서비스의 가용성을 보장하려는 조치다. 운영자는 개별 사용자의 AI 자원 상한선을 설정해 서비스 안정성을 유지하고 예상치 못한 비용 급증을 방지할 수 있다. 이는 AI 서비스 진입점에서 자원 소비를 통제함으로써 인프라 운영 비용과 자원 사용량을 예측 가능하게 한다.
AgentCore gateway는 완전 관리형 서버리스 AI 게이트웨이로, 사용자가 직접 서버 인프라를 구축하지 않고도 AI 트래픽을 처리할 수 있는 단일 보안 진입점이다. 유입된 트래픽을 관리형 웹 검색, 지식 베이스, MCP 서버, LLM(거대언어모델), 에이전트, HTTP 엔드포인트로 분산 라우팅한다. MCP 서버는 모델 컨텍스트 프로토콜(Model Context Protocol)을 구현하여 AI 모델이 다양한 데이터 소스나 외부 도구에 표준화된 방식으로 연결되게 한다. 이러한 통합 라우팅 구조를 통해 보안 설정과 트래픽 제어를 단일 지점에서 일괄 수행한다.
트래픽 제한 기능은 추론 타겟, MCP 타겟, HTTP 패스스루 타겟의 세 가지 타입에서 작동한다. 제어 지표는 분당 요청 수(RPM), 동시 연결 세션 수(CPS), 단위 시간당 텍스트 처리량(Token throughput)으로 구성된다. 운영자는 이 지표들을 조합해 설정함으로써 트래픽 스파이크 발생 시 하위 서비스의 과부하 중단을 방지하고 일관된 응답 속도를 유지할 수 있다.
제한 규칙은 OAuth와 IAM 인증 정보를 기반으로 정의한다. OAuth로 외부 사용자 인증을 처리하거나, IAM(Identity and Access Management)으로 내부 권한을 정의해 규칙을 생성한다. 운영자는 이 인증 체계를 활용해 특정 사용자나 권한 그룹의 자원 소비량을 개별적으로 정의한다. 인증된 신원을 바탕으로 요청마다 제한 수치를 적용해 특정 계정의 과도한 자원 점유를 기술적으로 차단한다.
차원 키(Dimension Keys)와 엔트리를 활용한 트래픽 버킷팅 구조
속도 제한 설정은 트래픽을 그룹화하는 차원 키(Dimension Keys)와 처리량을 정의하는 엔트리(Entries)의 조합으로 제어된다. 차원 키는 게이트웨이가 유입 트래픽을 분류할 버킷(Bucket)의 식별 기준이다. 요청이 도착하면 시스템은 컨텍스트 내에서 설정된 차원 키 값을 찾아 해당 요청을 특정 버킷에 할당한다. 지원하는 차원 키에는 타겟 이름(targetName), 도구 이름(toolName), 모델 식별자(qualifiedModelId)가 포함된다. 또한 `$.context.jwt.<claim>` (JWT 클레임), $.context.iam.principal (IAM 주체), $.context.iam.sourceIdentity (IAM 소스 식별자)를 사용하여 요청자별로 트래픽을 분리할 수 있다.
엔트리는 차원 키 조합에 대해 허용할 처리량 수치를 정의하는 규칙이다. 와일드카드(`*`)를 사용하면 명시적 이름이 없는 모든 대상에 대해 독립적인 버킷을 생성하고 동일한 속도 제한을 적용한다. 우선순위는 명시적 이름 일치 엔트리가 와일드카드보다 높다. 예를 들어 targetName을 차원 키로 설정하고 Booking MCP 서버에만 100 RPS(초당 요청 수)를 할당하는 엔트리를 만들고, 나머지를 와일드카드로 10 RPS로 설정하면 Booking 타겟만 고속 처리되고 다른 타겟들은 각각 10 RPS의 개별 버킷을 할당받는다.
고객 정의 제한과 서비스 쿼터(Service Quotas)의 계층적 적용
AgentCore gateway는 고객 정의 제한값과 AWS 계정 단위의 서비스 쿼터(Service Quotas) 중 더 낮은 수치를 최종 처리량으로 적용하는 2단계 검증 구조를 가진다. 요청이 들어오면 먼저 고객 정의 제한(Customer-defined rate limits)을 평가하고, 이를 통과한 요청에 한해 서비스 쿼터를 다시 평가한다. 이 순차적 검증 방식은 개별 설정이 서비스 전체의 안정성을 해치지 않도록 이중 잠금 장치를 두는 구조다.
최종 처리 속도는 `min(고객 정의 제한, 서비스 관리 제한)`으로 결정된다. 예를 들어 사용자가 특정 API의 분당 요청 수를 100회로 설정했더라도, AWS 계정의 서비스 쿼터가 50회라면 실제 상한선은 50회가 된다. 반대로 서비스 쿼터가 1000회여도 사용자가 100회로 제한했다면 100회까지만 허용된다. 항상 더 엄격한 기준이 우선 적용된다.
서비스 쿼터는 AWS 계정당 적용되는 최상위 상한선(Ceiling)으로, 인프라 수준에서 보장해야 하는 최소한의 자원 분배와 시스템 보호를 위해 강제된다. 사용자가 정의하는 모든 세부 규칙은 이 상한선 범위 내에서만 유효하다. 서비스 규모 확장으로 쿼터가 병목이 될 경우, 서비스 쿼터 콘솔을 통해 AWS에 증설 요청을 제출하여 상한선을 높일 수 있다.
이 계층적 구조는 설정 실수로 지나치게 높은 제한값을 입력해 백엔드 시스템에 과부하를 주는 상황을 방지한다. 요청은 두 단계의 필터를 모두 통과해야 실제 타겟으로 전달되며, 어느 한 단계라도 수치를 초과하면 즉시 거부되어 스로틀링 응답을 반환한다.
그룹-개인 2중 제어 모델을 통한 자원 독점 방지 구현
Basic 그룹은 100 RPM과 50 CPS라는 두 개의 버킷을 공유한다. JWT 클레임인 `$.context.jwt.<claim>`으로 Basic, Advanced, Beta 그룹을 식별해 총량을 제어한다. Basic 그룹 사용자는 100 RPM의 단일 자원 풀을 나누어 쓰므로, 한 명의 사용자가 80건의 요청을 보내면 다른 사용자가 사용할 수 있는 잔여량은 20건으로 줄어든다. Advanced 그룹은 300 RPM과 150 CPS를 할당받으며, Advanced와 Beta 멤버십을 동시에 가진 사용자는 300 RPM과 200 CPS 버킷을 사용한다. Beta 사용자에게 높은 연결 허용량을 제공하는 것은 스트리밍 비중이 높은 벤치마크 작업 부하를 처리하기 위함이다.
개별 사용자의 자원 독점을 막기 위해 `$.context.jwt.sub`(사용자 고유 식별자) 클레임을 차원 키로 사용하는 개인 레벨 제한을 동시에 적용한다. 이를 통해 그룹 내 개별 사용자별로 독립적인 상한선을 강제한다. Basic 그룹 전체 한도가 100 RPM이라도 개별 사용자는 최대 20 RPM과 10 CPS까지만 소비하도록 제한할 수 있다. 개별 사용자가 할당된 쿼터를 모두 소진하면 그룹 쿼터에 여유가 있더라도 시스템은 Throttling response를 반환한다.
이 모델은 그룹 제한과 개인 제한을 모두 통과해야 하는 AND 시맨틱을 따른다. 그룹 상한선(Group ceiling)은 특정 그룹이 전체 시스템 자원을 과도하게 점유해 다른 그룹의 자원을 고갈시키는 것을 방지하고, 개인 상한선(Per-user ceiling)은 동일 그룹 내 특정 개인이 자원을 독점해 동료 사용자의 요청이 차단되는 것을 막는다. 이를 통해 그룹 간 형평성과 그룹 내부의 공정성을 동시에 확보한다.
RBAC 및 ID 제공자를 통한 엔터프라이즈 AI 서비스 운영 전략
Microsoft Entra ID를 ID 제공자로 설정하여 JWT 인증과 토큰 발행을 수행한다. Amazon Bedrock AgentCore는 유입 요청의 JWT를 검증하고 이를 기반으로 RBAC(Role-Based Access Control) 정책을 강제한다. AgentCore Identity는 외부 타겟으로 나가는 요청의 토큰 발행 서비스 역할을 수행하며, 조직 내 사용자 그룹별로 접근 가능한 AI 모델과 타겟 범위를 제한한다.
운영 전략은 사용자 그룹을 Basic, Advanced, Beta 세 단계로 구분해 자원을 차등 배분하는 방식이다. Basic 그룹은 최소 기능 수행을 위한 제한적 속도 제한을, Advanced 그룹은 업무 확장성을 고려한 높은 상한선을 부여받는다. Beta 그룹은 정식 배포 전 특정 모델의 성능을 벤치마킹하기 위해, 특정 모델에 대해 의도적으로 상향된 제한값을 제공받아 격리된 테스트 환경을 구축한다.
제어 정밀도를 높이기 위해 타겟 이름(`targetName`)과 JWT 역할 정보(`$.context.jwt.role`)를 조합한 다중 차원 키를 사용한다.
`dimensionKeys: ["targetName", "$.context.jwt.role"]`
이 구조를 통해 Basic 그룹 사용자가 특정 모델의 쿼터를 모두 사용하더라도, Advanced나 Beta 그룹 사용자는 별도의 버킷을 통해 중단 없이 서비스를 이용할 수 있다.
이러한 모든 차원 키 설정과 엔트리 정의 과정은 AWS CLI(AWS Command Line Interface)를 통해 구성하며, 이를 통해 인프라 수준에서 트래픽 흐름을 제어한다.
결과적으로 사용자는 자신의 설정값뿐만 아니라 계정 단위의 쿼터 상태를 함께 확인해야 실제 처리량을 정확히 예측할 수 있다.



