에이전트가 초기 프로토타입에서 엔터프라이즈 배포로 확장됨에 따라 내부 제어, 독점 데이터 파이프라인, 엔터프라이즈 보안 정책을 통합해야 할 필요성이 빠르게 증가합니다. 복잡한 승인 결정은 표준 IAM 정책만으로는 쉽게 표현할 수 없는 경우가 있습니다.
이러한 요구사항을 해결하기 위해 Agent Gateway는 Google 서비스, 커스텀 승인 엔진 또는 서드 파티 보안 플랫폼을 통한 시행을 지원하고 게이트웨이 전반에 동일한 정책을 보편적으로 적용할 수 있는 새로운 정책 프레임워크를 도입합니다. 이 문서에서는 주요 에이전트 위험 사용 사례를 간략히 설명하고 확장 가능한 정책을 구성하는 방법을 설명합니다.
에이전트형 위험에 대한 정책 확장성 사용 사례
표준 결정론적 제어는 확률적 AI 워크로드에 충분하지 않은 경우가 많습니다. 확장 가능한 서비스 파이프라인은 조직이 고유한 에이전트 위험에 맞게 조정된 고급 로직을 삽입하는 데 도움이 됩니다.
- 콘텐츠 정제 및 안전 가드레일: 프롬프트 인젝션, 탈옥, 유해한 출력, 기밀 정보 손실로부터 보호합니다(예: Model Armor 사용).
- 데이터 손실 방지 (DLP): 페이로드 및 스트리밍 청크를 실시간으로 모니터링하여 독점 코드 또는 PII가 외부 시스템으로 유출되는 것을 방지합니다.
- 제로 트러스트 ID 거버넌스: 에이전트가 민감한 백엔드 또는 외부 도구에 액세스하도록 허용하기 전에 사용자 인증 정보를 검증하고 액세스 제어를 적용합니다 (예: IAP 사용).
- 맞춤형 엔터프라이즈 규정 준수: 내부 아키텍처에 맞는 커스텀 데이터 삭제 규칙, 토큰 변환 또는 규정 준수 메커니즘을 적용합니다.
Agent Gateway의 정책 확장성 프레임워크
Agent Gateway를 사용하면 확장 프로그램 바인딩을 연결하여 승인 결정을 ID 공급업체, 콘텐츠 안전 필터, 커스텀 서드 파티 보안 플랫폼과 같은 특수 정책 엔진에 위임할 수 있습니다.
정책 확장성 프레임워크는 역할과 리소스 간의 구분을 기반으로 작동합니다.
소비자: 최소한의 구성 작업으로 게이트웨이에 보안 및 거버넌스 확장 프로그램을 추가하려는 Agent Gateway 운영자
생산자: 다른 사용자가 사용할 수 있도록 서비스 확장 프로그램을 빌드하고 게시하는 내부 플랫폼팀, 퍼스트 파티 Google 서비스 (예: IAP 및 Model Armor), 서드 파티 ISV 파트너입니다.
ExtensionBinding: 소비자가 만든 리소스로, 확장 프로그램이 호출되는 시점을 결정하는 일치 조건과 함께ProducerExtension를 대상 Agent Gateway에 바인딩합니다. 이는 소비자가 확장 프로그램을 사용하기 위해 만들어야 하는 유일한 리소스입니다.ProducerExtension:ext_proc호환 승인 엔진을 단일 관리 단위로 패키징하는 제작자가 만든 리소스입니다. 모든 기본 실행 매개변수와 연결 설정을 캡슐화하므로 소비자가 하위 수준 데이터 영역 메커니즘을 구성할 필요가 없습니다.
기본 제공되는 퍼스트 파티 Google 확장 프로그램
IAP 및 Model Armor와 같은 퍼스트 파티 (1P) Google 서비스는 간소화된 운영 모델과 함께 사전 패키징된 확장 기능을 제공합니다.
- 소비자: 애플리케이션 개발자와 보안 운영자가 소비자로 활동합니다. 제로 트러스트 인증 또는 프롬프트 인젝션 보호를 사용 설정하려면 소비자 프로젝트에서 직접 Google의 사전 정의된 서비스 엔드포인트 URI를 타겟팅하는
ExtensionBinding리소스를 만듭니다. - 프로듀서: Google이 프로듀서 역할을 합니다. Google은 기본 Service Infrastructure와 확장 프로그램 엔드포인트를 전 세계적으로 빌드, 호스팅, 관리합니다 (예:
iap.googleapis.com또는modelarmor.us.rep.googleapis.com).ProducerExtension리소스를 만들거나 관리할 필요가 없습니다.
엔터프라이즈 및 파트너 (2P/3P) 확장 프로그램
Custom Governance 로직의 경우 정책 확장성을 통해 Enterprise팀과 보안 파트너 간에 유연한 양면 통합 모델을 사용할 수 있습니다.
생산자: 내부 플랫폼 엔지니어링팀 (2P) 또는 서드 파티 ISV 보안 공급업체 (3P)가 생산자 역할을 합니다. 프로듀서는 Envoy의
ext_proc프로토콜과 호환되는 gRPC 서비스를 빌드하고, 이를 전용 프로듀서 프로젝트 (예: 애플리케이션 부하 분산기 뒤에 있는 Cloud Run 서비스)에 호스팅하고, Private Service Connect (PSC) 서비스 연결을 사용하여 노출하고,ProducerExtension리소스를 게시합니다.소비자: 소비자 프로젝트의 애플리케이션 개발자와 보안 관리자가 소비자로 활동합니다. 프로듀서가 PSC를 사용하여 액세스 권한을 부여하면 소비자는 프로젝트에서 특정
ProducerExtension리소스 URI를 참조하는ExtensionBinding를 만들어 워크로드에 커스텀 제어 (예: 시맨틱 거버넌스 정책 또는 서드 파티 방화벽 규칙)를 적용합니다.
배포 패턴
확장 프로그램 바인딩은 유연한 배포 패턴을 지원하여 모든 트래픽 경로에 일관된 거버넌스를 적용함으로써 에이전트가 배포된 위치에 관계없이 거버넌스 정책이 동일하게 작동하도록 합니다. ExtensionBinding API는 모든 Agent Gateway 배포 모델에 균일하게 적용됩니다.
엔드 투 엔드 트래픽 가로채기 경로
확장 프로그램 바인딩을 적용하여 에이전트 생태계 내에서 다음 통신 경로를 통해 트래픽을 가로챌 수 있습니다.
- 사용자 → 에이전트 (인그레스): Agent Gateway를 타겟팅하는 최종 사용자 또는 클라이언트 애플리케이션의 수신 요청을 가로채 사용자 인증, ID 거버넌스 또는 프롬프트 인젝션 정제를 시행합니다.
- 에이전트 → 도구 / MCP (이그레스): 에이전트에서 모델 컨텍스트 프로토콜 (MCP) 서버 또는 외부 API로의 아웃바운드 호출을 가로채 권한을 검증하고 도구 입력을 정제합니다.
- 에이전트 → LLM 모델 (이그레스): 프롬프트가 파운데이션 모델에 도달하기 전에 프롬프트를 스캔하고 모델 응답을 필터링하여 데이터 손실이나 유해한 출력을 방지합니다.
에이전트 → 에이전트 (A2A 이그레스): 자율 에이전트가 프로젝트 간에 공동작업할 때 에이전트 간 통신을 제어하고 정책 경계를 적용합니다.
클라이언트에서 에이전트로
에이전트에서 모든 위치로
소비자: Agent Gateway에 확장 프로그램 바인딩
소비자 (예: 애플리케이션 개발자 또는 보안 운영자)는 ExtensionBinding를 만들어 Agent Gateway에 거버넌스 및 보안 로직을 연결합니다. 이 리소스는 대상 워크로드를 확장 프로그램에 바인딩하고 일치 조건을 선언하여 확장 프로그램을 호출해야 하는 시점을 정확하게 정의합니다 (예: 특정 외부 도구 또는 MCP 서버로 향하는 트래픽 가로채기). 일치 조건을 인라인으로 직접 지정하거나 (이 섹션의 예시에 표시된 대로) 별도의 YAML 파일에 지정할 수 있습니다.
확장 프로그램 제공업체에 따라 사용은 다음 두 가지 경로 중 하나를 따릅니다.
퍼스트 파티 소비자 구성
IAP 또는 Model Armor와 같은 Google 서비스의 경우 Google에서 백엔드 인프라와 등록을 전역적으로 관리합니다. 소비자는 특정 ProducerExtension 리소스 URI를 타겟팅할 필요가 없습니다. 사전 정의된 엔드포인트 문자열 (예: iap.googleapis.com 또는 modelarmor.us.rep.googleapis.com)을 ExtensionBinding의 대상으로 전달하여 이러한 서비스를 워크로드에 직접 바인딩할 수 있습니다.
IAP 확장 프로그램을 Agent Gateway에 바인딩
다음 예시에서는 퍼스트 파티 Google 서비스 (IAP)를 소비자 프로젝트의 Agent Gateway에 바인딩하는 ExtensionBinding 리소스를 보여줍니다. 지정된 matchConditions 필드에 따라 트래픽이 MCP 서버로 전송될 때 이 확장 프로그램이 호출됩니다.
다음 구성으로 YAML 파일을 만듭니다.
name: EXTENSION_BINDING_NAME target: resources: - "projects/PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME" matchConditions: - to: destination: resources: - prefix: "urn:mcp" producerExtension: "iap.googleapis.com"다음을 바꿉니다.
EXTENSION_BINDING_NAME: 확장 프로그램 바인딩 리소스의 이름입니다.PROJECT_ID: Cloud de Confiance by S3NS 프로젝트 ID입니다.LOCATION: 게이트웨이 및 확장 프로그램 바인딩의 위치입니다.AGENT_GATEWAY_NAME: 대상 Agent Gateway의 이름입니다.
확장 프로그램 바인딩 구성을 가져옵니다.
gcloud beta service-extensions extension-bindings import EXTENSION_BINDING_NAME \ --location=LOCATION \ --source=EXTENSION_BINDING_FILE_PATH
EXTENSION_BINDING_FILE_PATH를 YAML 구성 파일의 경로로 바꿉니다.
Model Armor 확장 프로그램을 Agent Gateway에 바인딩
프롬프트 인젝션, 유해한 콘텐츠, 민감한 정보 유출로부터 에이전트를 보호하려면 Model Armor를 워크로드에 직접 바인딩하면 됩니다.
지정된 matchConditions 필드에 따라 트래픽이 MCP 서버로 전송될 때 이 확장 프로그램이 호출됩니다.
다음 구성으로 YAML 파일을 만듭니다.
name: EXTENSION_BINDING_NAME target: resources: - "projects/PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME" matchConditions: - to: destination: resources: - prefix: "urn:mcp" producerExtension: "modelarmor.us.rep.googleapis.com" failOpen: true producerMetadata: model_armor_settings: '[{ "request_template_id": "projects/TEMPLATE_PROJECT_ID/locations/LOCATION/templates/REQUEST_TEMPLATE_ID", "response_template_id": "projects/TEMPLATE_PROJECT_ID/locations/LOCATION/templates/RESPONSE_TEMPLATE_ID" }]'다음을 바꿉니다.
EXTENSION_BINDING_NAME: 확장 프로그램 바인딩 리소스의 이름입니다.PROJECT_ID: Cloud de Confiance 프로젝트 ID입니다.LOCATION: 리소스 위치입니다.AGENT_GATEWAY_NAME: 대상 Agent Gateway의 이름입니다.TEMPLATE_PROJECT_ID: Model Armor 템플릿이 있는 프로젝트 ID입니다.REQUEST_TEMPLATE_ID: 요청을 평가하는 데 사용되는 Model Armor 템플릿의 ID입니다.RESPONSE_TEMPLATE_ID: 응답을 평가하는 데 사용되는 Model Armor 템플릿의 ID입니다.
확장 프로그램 바인딩 구성을 가져옵니다.
gcloud beta service-extensions extension-bindings import EXTENSION_BINDING_NAME \ --location=LOCATION \ --source=EXTENSION_BINDING_FILE_PATH
EXTENSION_BINDING_FILE_PATH를 YAML 구성 파일의 경로로 바꿉니다.
퍼스트 파티/제3자 소비자 구성
다른 내부 팀 (2P) 또는 외부 서드 파티 공급업체 (3P)에서 만든 서비스 확장 프로그램의 소비자로서, 소비자 프로젝트에 서비스를 사용할 수 있는 액세스 권한이 명시적으로 부여되었는지 확인해야 합니다.
액세스는 프로듀서가 Private Service Connect 서비스 연결 구성을 사용하여 제어합니다. 액세스 권한이 부여되면 ExtensionBinding에서 생산자가 제공한 특정 ProducerExtension 리소스 URI를 참조하여 워크로드를 바인딩합니다.
커스텀 승인 엔진 바인딩
다음 예시에서는 퍼스트 파티/서드 파티 제작자 프로젝트의 커스텀 확장 프로그램을 소비자 프로젝트의 Agent Gateway에 바인딩하는 ExtensionBinding 리소스를 보여줍니다. 지정된 matchConditions 필드를 기반으로 트래픽이 에이전트로 전송될 때 이 확장 프로그램이 호출됩니다.
다음 구성으로 YAML 파일을 만듭니다.
name: EXTENSION_BINDING_NAME target: resources: - "projects/CONSUMER_PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME" matchConditions: - to: destination: resources: - prefix: "urn:agent" producerExtension: "projects/PRODUCER_PROJECT_ID/locations/LOCATION/producerExtensions/PRODUCER_EXTENSION_NAME"다음을 바꿉니다.
EXTENSION_BINDING_NAME: 확장 프로그램 바인딩 리소스의 이름입니다.CONSUMER_PROJECT_ID: Agent Gateway를 호스팅하는 소비자 프로젝트의 프로젝트 ID입니다.LOCATION: 리소스 위치입니다.AGENT_GATEWAY_NAME: 대상 Agent Gateway의 이름입니다.PRODUCER_PROJECT_ID:ProducerExtension를 호스팅하는 프로듀서 프로젝트의 프로젝트 ID입니다.PRODUCER_EXTENSION_NAME:ProducerExtension리소스의 이름입니다.
확장 프로그램 바인딩 구성을 가져옵니다.
gcloud beta service-extensions extension-bindings import EXTENSION_BINDING_NAME \ --location=LOCATION \ --source=EXTENSION_BINDING_FILE_PATH
EXTENSION_BINDING_FILE_PATH를 YAML 구성 파일의 경로로 바꿉니다.
확장 프로그램 바인딩 연결 지점
확장 프로그램 바인딩은 거버넌스 요구사항에 따라 리소스 계층 구조의 여러 수준에서 구성할 수 있습니다.
- Agent Gateway 수준: Agent Gateway 리소스에 직접 정책을 연결하여 게이트웨이를 통과하는 모든 트래픽을 제어합니다.
- 프로젝트 수준: 프로젝트 내에서 지정된 유형의 모든 리소스에 전역적으로 적용되는
ExtensionBindings를 만들어 프로젝트 전체 규정 준수를 시행하는 기업 관리자의 관리를 간소화합니다.
프로젝트의 모든 Agent Gateway에 Model Armor 확장 프로그램 바인딩
다음 구성으로 YAML 파일을 만듭니다.
name: EXTENSION_BINDING_NAME target: scope: parent: "projects/PROJECT_NUMBER" resourceTypes: "AGENT_GATEWAY" matchConditions: - to: destination: resources: - prefix: "urn:mcp" producerExtension: "modelarmor.us.rep.googleapis.com" failOpen: true producerMetadata: model_armor_settings: '[{ "request_template_id": "projects/TEMPLATE_PROJECT_ID/locations/LOCATION/templates/REQUEST_TEMPLATE_ID", "response_template_id": "projects/TEMPLATE_PROJECT_ID/locations/LOCATION/templates/RESPONSE_TEMPLATE_ID" }]'다음을 바꿉니다.
EXTENSION_BINDING_NAME: 확장 프로그램 바인딩 리소스의 이름입니다.PROJECT_NUMBER:Cloud de Confiance 프로젝트의 프로젝트 번호입니다.TEMPLATE_PROJECT_ID: Model Armor 템플릿이 있는 프로젝트 ID입니다.LOCATION: 리소스 위치입니다.REQUEST_TEMPLATE_ID: 요청을 평가하는 데 사용되는 Model Armor 템플릿의 ID입니다.RESPONSE_TEMPLATE_ID: 응답을 평가하는 데 사용되는 Model Armor 템플릿의 ID입니다.
확장 프로그램 바인딩 구성을 가져옵니다.
gcloud beta service-extensions extension-bindings import EXTENSION_BINDING_NAME \ --location=LOCATION \ --source=EXTENSION_BINDING_FILE_PATH
EXTENSION_BINDING_FILE_PATH를 YAML 구성 파일의 경로로 바꿉니다.
특정 워크로드와 일치하는 요청의 경우 프로젝트 수준 및 리소스 수준 확장 프로그램 바인딩이 모두 실행됩니다. 동일한 확장 프로그램이 리소스 수준과 프로젝트 수준 모두에서 구성된 경우 두 번 호출됩니다.
확장 프로그램을 호출하는 일치 조건
일치 조건은 확장 프로그램이 호출되는 시점을 결정합니다. 일치 조건은 이 페이지의 이전 예시에 표시된 것처럼 인라인으로 직접 지정하거나 YAML 파일에 지정할 수 있습니다.
이 섹션에서는 트래픽 흐름, 대상 리소스 URN 또는 대상 호스트를 기반으로 하는 일반적인 상황에 대한 YAML 파일 구성 샘플을 제공합니다.
MCP 도구 서버로의 이그레스 (에이전트 → 도구): 에이전트에서 원격 모델 컨텍스트 프로토콜 (MCP) 도구 서버로 전송되는 트래픽을 가로챕니다.
# Invoke extension for all agent traffic to remote MCP servers - to: destination: resources: - prefix: "urn:mcp"인그레스 트래픽 (사용자 → 에이전트): Agent Gateway에서 관리하는 에이전트를 타겟팅하는 최종 사용자 또는 클라이언트 애플리케이션의 수신 요청을 가로챕니다 (예: 인그레스에서 최종 사용자 인증 또는 프롬프트 인젝션 정제 적용).
# Invoke extension on incoming user requests targeting agents - to: destination: resources: - prefix: "urn:agent"LLM 모델로의 이그레스 (에이전트 → LLM 모델): 대상 호스트를 일치시켜 에이전트에서 파운데이션 LLM 모델 또는 모델 서버로 전송되는 요청을 가로챕니다.
# Invoke extension on traffic sent to a specific model server - to: destination: hosts: - exact: "myexamplemodelserver.com"
제작자: 확장 프로그램 빌드 및 게시
커스텀 (2P 또는 3P) 제작자는 Private Service Connect 연결 뒤에 ext_proc 기반 서비스 확장 프로그램 구현을 호스팅합니다.
연결이 준비되면 확장 프로그램이 작동하는 요청 처리 단계, 사용할 권한, ext_proc 서비스의 PSC 연결 URI를 지정하는 ProducerExtension 리소스를 만듭니다.
gcloud beta service-extensions producer-extensions create PRODUCER_EXTENSION_NAME \ --phase authz \ --extension-settings=service=projects/PRODUCER_PROJECT_ID/regions/REGION/serviceAttachments/PSC_ATTACHMENT_NAME,authority="example.provider.net"
다음을 바꿉니다.
PRODUCER_EXTENSION_NAME:ProducerExtension리소스의 이름입니다.PRODUCER_PROJECT_ID: 프로듀서 프로젝트의 프로젝트 ID입니다.REGION: Private Service Connect 서비스 연결의 리전입니다.PSC_ATTACHMENT_NAME: Private Service Connect 서비스 연결의 이름입니다.
Cloud Run에서 커스텀 확장 프로그램 호스팅
전용 클러스터나 VM을 관리하지 않고 커스텀 ext_proc gRPC 서비스를 실행하려는 제작자에게는 Cloud Run이 이상적인 서버리스 대안입니다.
서버리스 확장 프로그램을 ProducerExtension로 게시하려면 Private Service Connect (PSC)를 사용하여 노출합니다. ProducerExtension 리소스에는 PSC 서비스 연결 URI가 필요하고 서비스 연결은 Cloud Run 서비스를 직접 타겟팅하는 대신 부하 분산기 전달 규칙을 타겟팅하므로 Cloud Run 서비스 앞에 애플리케이션 부하 분산기 (서버리스 NEG 백엔드 사용)를 배치합니다.
Cloud Run에서 확장 프로그램을 호스팅하는 대략적인 배포 워크플로는 다음과 같습니다.
Cloud Run에 확장 프로그램 배포: 커스텀
ext_procgRPC 확장 프로그램을 Cloud Run에서 컨테이너화된 서비스로 호스팅합니다.서버리스 NEG 만들기: Cloud Run에서 실행되는 확장 프로그램을 가리키는 서버리스 네트워크 엔드포인트 그룹(NEG)을 배포합니다.
서버리스 NEG 백엔드로 부하 분산기 설정: 서버리스 NEG를 백엔드로 사용하여 VPC 네트워크 내에 리전 애플리케이션 부하 분산기를 설정합니다.
PSC로 서비스 게시: 부하 분산기 전달 규칙을 직접 가리키는 Private Service Connect 서비스 연결을 만듭니다. 이렇게 하면 고유한 서비스 연결 URI (예:
projects/.../regions/.../serviceAttachments/...)가 생성됩니다.프로듀서 확장 프로그램 만들기: 이 생성된 URI를 사용하여
ProducerExtension리소스를 인스턴스화합니다.소비자 워크로드 바인딩: 이제 소비자는
ProducerExtension리소스 URI를 참조하여 게이트웨이를 확장 프로그램에 바인딩할 수 있습니다.
부록: 맞춤 확장 프로그램의 컨텍스트 메타데이터
커스텀 확장 프로그램이 컨텍스트 인식 승인 및 처리 결정을 내릴 수 있도록 Cloud de Confiance 데이터 영역은 수명 주기 및 리소스 컨텍스트를 ext_proc 서버에 직접 전달합니다.
이 정보는 ext_proc gRPC ProcessingRequest의 metadata_context 필드 내에 유형이 지정되지 않은 메타데이터로 번들로 묶입니다. 이 메타데이터는 com.google.serviceextensions.invocation_info 네임스페이스 아래에 있으며 표준 google.protobuf.Struct 형식을 사용합니다.
이 메타데이터를 디코딩하거나 JSON으로 변환하여 다운스트림 처리에 사용할 수 있습니다. MCP 서버로 향하는 트래픽이 있는 Agent Gateway를 타겟팅하는 요청의 JSON 형식 예시는 다음과 같습니다.
{ "binding_selector" : { "target" : "//networkservices.googleapis.com/projects/PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME", "project_number" : PROJECT_NUMBER, "to_resource": "urn:mcp:projects-PROJECT_NUMBER:projects:PROJECT_NUMBER:locations:LOCATION:agentregistry:services:SERVER_ID" } }
JSON 스키마는 다음과 같습니다.
message ServiceExtensionsInvocationInfo { message ExtensionBindingSelector { // The target (gateway ID, etc) in fully qualified name format. // For example: // "//networkservices.googleapis.com/projects/PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME" string target = 1; // Project number associated with the target. uint64 project_number = 2; // The destination resource within the Agent Registry that traffic is directed to. string to_resource = 3; } ExtensionBindingSelector binding_selector = 1; }