이 문서는 Agent Gateway 이그레스에 대한 IAM 통합 액세스 정책 (UAP)을 구성하고 적용할 때 발생하는 일반적인 문제를 진단하고 해결하는 데 도움이 됩니다.
정책 시정 조치 및 액세스 실패
이 섹션에서는 시행 문제를 설명합니다.
정책이 시행되지 않음
증상: 액세스를 차단하도록 IAM 거부 규칙 또는 제한적인 허용 규칙이 구성되어 있어도 에이전트가 대상 도구, MCP 서버 또는 엔드포인트에 액세스할 수 있습니다.
원인: Agent Gateway 승인 확장 프로그램이 테스트 실행 모드로 실행 중이거나 정책 바인딩 범위가 대상 리소스와 일치하지 않습니다. 테스트 실행 모드에서는 액세스 결정이 평가되고 감사를 위해 로깅되지만 요청은 차단되지 않습니다.
해결책:
테스트 실행 모드를 시행 모드로 전환: 먼저 승인 확장 프로그램 구성 파일(
iap-request-authz-extension.yaml)을 확인합니다.iamEnforcementMode이"DRY_RUN"로 설정되어 있으면"ENFORCE"로 업데이트하거나DRY_RUN설정을 삭제하고 gcloud CLI를 사용하여 확장 프로그램을 다시 가져옵니다.gcloud service-extensions authz-extensions import EXTENSION_NAME \ --source=EXTENSION_FILE.yaml \ --location=LOCATION다음을 바꿉니다.
EXTENSION_NAME: 승인 확장 프로그램의 이름EXTENSION_FILE: YAML 확장 프로그램 구성의 파일 이름LOCATION: 게이트웨이가 배포된 Google Cloud 리전
게이트웨이 승인 정책 위임 확인: 게이트웨이 승인 정책 (
policyProfile: REQUEST_AUTHZ)이 올바른 Agent Gateway 인스턴스 (target.resources)에 바인딩되어 있는지 확인합니다.정책 바인딩 범위 확인: IAM UAP가 트래픽이 도착하는 대상 리소스 범위에 바인딩되어 있는지 확인합니다.
규칙 우선순위 검사: 조합 정책에서 거부 규칙은 동일한 범위의 허용 규칙을 명시적으로 재정의합니다. 그러나 레지스트리 또는 프로젝트 수준에서 바인딩된 더 넓은 허용 규칙이 있는 UAP가 조건 제한 없이 액세스 권한을 부여하는지 확인합니다.
시정 조치 정책이 에이전트 액세스를 차단함
증상: Agent Gateway 정책 시행이 사용 설정된 경우 에이전트의 이그레스 요청이 HTTP 403 Forbidden 또는
PERMISSION_DENIED 오류와 함께 실패합니다.
원인:
에이전트의 ID가 UAP에 지정되지 않았습니다.
에이전트의 ID에 대상 리소스에 대한
iap.resources.egressViaIAP권한이 부여되지 않았습니다.정확한 대상 호스트 이름이 Agent Registry에 등록되지 않았습니다.
요청 속성이 UAP의 Common Expression Language (CEL) 조건을 충족하지 않습니다.
해결책:
- 중단 없는 디버깅을 위해 테스트 실행 모드로 전환: 실패를 진단하는 동안 감사 로그를 검사하는 동안 활성 에이전트 트래픽이 차단되지 않도록 승인 확장 프로그램을 일시적으로 테스트 실행
모드 (
iamEnforcementMode: "DRY_RUN")로 전환합니다. Cloud 감사 로그 쿼리: Cloud 감사 로그를 쿼리하여 정확한 승인 확인 및 CEL 속성 평가를 검사합니다.
gcloud
다음
gcloud logging read명령어를 실행합니다.gcloud logging read \ 'protoPayload.serviceName="iap.googleapis.com" AND protoPayload.authorizationInfo.permission="iap.resources.egressViaIAP" AND protoPayload.status.code!=0' \ --project=PROJECT_ID \ --limit=20PROJECT_ID를 프로젝트 ID로 바꿉니다.콘솔
- 콘솔에서 Google Cloud 로그 탐색기 페이지로 이동합니다.
- 프로젝트를 선택합니다.
- 쿼리 편집기에서 다음 쿼리를 입력합니다.
protoPayload.serviceName="iap.googleapis.com" protoPayload.authorizationInfo.permission="iap.resources.egressViaIAP" protoPayload.status.code!=0 - 쿼리 실행 을 클릭합니다.
- 로그 항목을 펼치고
protoPayload.authorizationInfo를 검사하여 평가에 실패한 대상 리소스 URI와 권한을 확인합니다.
정확한 호스트 이름 일치 확인: Agent Gateway는 대상 호스트 이름을 정확히 일치시킵니다. Google API 또는 서드 파티 서비스는 SDK 버전, 리전 클라이언트 구성 또는 mTLS 사용에 따라 여러 호스트 이름 변형을 통해 확인할 수 있습니다(예:
us-central1-aiplatform.googleapis.com대us-central1-aiplatform.mtls.googleapis.com대aiplatform.googleapis.com).- 등록된 대상을 사용하는 경우 모든 정확한 호스트 이름 변형이 Agent Registry에 등록되어 있는지 확인합니다.
- 에이전트가 등록되지 않은 엔드포인트에 액세스하는 경우
등록되지 않은 엔드포인트 정책
이 해당 호스트 및 경로에 대해
iap.resources.egressViaIAP를 부여하는지 확인합니다.
범위 전반의 정책 바인딩 적용 범위 확인: 정책 바인딩이 지원되는 세 가지 범위 중 하나에 있는지 확인합니다.
- 레지스트리 전체: 레지스트리의 모든 에이전트, MCP 서버, 엔드포인트에 대한 액세스 권한을 부여합니다.
- 리소스별: 특정 등록된 MCP 서버, 엔드포인트 또는 에이전트에 대한 액세스 권한을 부여합니다.
- 등록되지 않은 엔드포인트: Agent Registry 외부의 대상에 대한 액세스 권한을 부여합니다.
- 참고: 대상 리소스의 정책 바인딩을 설명할 때 반환된 출력에
"etag"필드는 포함되지만 바인딩은 포함되지 않는 경우 해당 대상에 대한 IAM 정책이 없습니다.
일반적인 UI, gcloud, REST API 오류 메시지
이 섹션에서는 오류 메시지와 해결 방법을 설명합니다.
정책을 찾을 수 없음
오류 메시지:
- 콘솔 UI: "요청된 정책이 없습니다. 선택한 리소스에 정책이 있는지 확인하세요.'
- API / gcloud:
POLICY_NOT_FOUND/HTTP 404 Not Found
원인: 업데이트 요청 또는 정책 바인딩에 지정된 UAP ID가 프로젝트 또는 위치에 없거나 삭제되었습니다.
해결책: 프로젝트에서 사용 가능한 모든 UAP를 사용하여
gcloud iam access-policies list --project=<var>PROJECT_ID</var> --location=global
바인딩하거나 업데이트하기 전에 정확한 정책 ID와 위치를 확인합니다.
대상 바인딩 한도 초과
오류 메시지:
- 콘솔 UI: "선택한 대상이 액세스 정책 바인딩 한도에 도달했습니다. 새 바인딩을 추가하기 전에 기존 바인딩을 삭제하세요.'
- API / gcloud:
TOO_MANY_ACCESS_POLICY_BINDINGS_PER_TARGET
원인: 대상당 허용되는 최대 한도보다 많은 정책 바인딩을 대상 리소스 (예: MCP 서버 또는 레지스트리)에 연결하려고 했습니다.
해결책: 개별 규칙마다 별도의 UAP 및
바인딩을 만드는 대신 여러 허용 또는 거부 규칙을
단일 UAP로 통합합니다. gcloud iam
policy-bindings delete를 사용하여 사용하지 않는 바인딩을 삭제합니다.
정책 바인딩 한도 초과
오류 메시지:
- 콘솔 UI: "선택한 정책의 바인딩 한도에 도달했습니다. 새 바인딩을 추가하기 전에 기존 바인딩을 삭제하세요.'
- API / gcloud:
TOO_MANY_ACCESS_POLICY_BINDINGS_TO_POLICY
원인: 단일 UAP가 프로젝트 전반에서 너무 많은 고유한 대상 리소스에 연결되어 있습니다.
해결책: 레지스트리 전체 범위
(AgentRegistry) 또는 프로젝트 범위와 같은 더 넓은 범위에서 정책을 바인딩하고 CEL 속성 조건 (예:
destination.agent_registry.mcp_server.name)을 사용하여 정책 규칙 내에서 개별
도구에 대한 액세스를 관리합니다.
조건 한도 초과
오류 메시지:
- 콘솔 UI: "이 정책이 최대 속성 조건 수에 도달했습니다. 변경사항을 저장하려면 일부 조건을 삭제하세요.'
- API / gcloud:
TOO_MANY_CONDITIONS/ 정책의 규칙에 대한 조건 한도 초과
원인: 단일 허용 또는 거부 규칙에 단일 규칙에서 지원되는 것보다 세분화된 액세스 제어 (FGAC) 속성 조건 또는 복잡한 하위 표현식이 더 많이 포함되어 있습니다.
해결책: CEL 논리 연산자 (&&,
||) 또는 집합 포함 조회 (in)를 사용하여 속성 검사를 통합하거나 동일한 UAP 내에서 여러
규칙에 걸쳐 표현식을 분할합니다.
규칙 세부정보가 오래됨
오류 메시지:
- 콘솔 UI: "규칙 세부정보가 오래되었습니다. 이 페이지가 로드된 후에 다른 사용자가 이 규칙을 수정했습니다. 수정하거나 삭제하기 전에 페이지를 새로고침하여 현재 세부정보를 가져오세요.'
- API / gcloud:
etag불일치로 인한HTTP 412 Precondition Failed/ABORTED
원인: 다른 관리자 또는 자동화된 프로세스가 UAP를 가져온 후에 수정하여 요청의 etag가 활성 서버 상태와 달라졌습니다.
해결책: 콘솔 페이지를 새로고침하여 활성 정책 세부정보
와 etag를 가져온 후 수정사항을 저장합니다. REST API를 사용하는 경우 먼저 GET
요청을 실행하여 활성 "etag" 값을 가져오고
PATCH 요청 페이로드에 포함합니다.
정책에서 마지막 규칙을 삭제할 수 없음
오류 메시지:
- 콘솔 UI: "이 규칙을 삭제할 수 없습니다. '기본 정책'에는 규칙이 하나 이상 있어야 합니다. 이 규칙을 삭제하려면 대신 정책을 삭제하세요." 또는 "<정책 이름>의 마지막 규칙입니다. 이 규칙을 삭제하면 정책도 삭제되고 연결된 모든 바인딩이 영구적으로 삭제되어 리소스에 대한 에이전트 액세스에 영향을 미칠 수 있습니다."
원인: 규칙이 없는 IAM UAP는 저장할 수 없습니다.
해결책: 정책에서 유일한 규칙을 삭제하려면 전체 정책을 삭제합니다. 정책 자체를 삭제하기 전에 정책을 참조하는 모든 정책 바인딩을 삭제해야 합니다.
고급 탭에 보관된 커스텀 CEL 표현식
오류 메시지:
- 콘솔 UI: "커스텀 CEL 표현식을 표준 UI 선택 항목으로 변환할 수 없습니다. 표현식은 고급 탭에 보관됩니다.'
원인: 표준 조건 빌더의 간소화된 드롭다운 선택기로 매핑할 수 없는 복잡한 CEL 조건 또는 함수를 조건 편집기 (고급 탭)에 입력했습니다.
해결책: 이 메시지는 정보 제공을 위한 알림입니다. 커스텀 CEL 조건이 유효하며 보관됩니다. 조건 편집기 탭 내에서 직접 수정 작업을 계속합니다.