백엔드 서비스 보안

배포된 게이트웨이에 대한 최종 사용자 요청 인증뿐만 아니라 API Gateway와 백엔드 서비스 사이의 액세스 보안도 중요합니다. Cloud Run, Cloud Run 함수, App Engine과 같은 백엔드 관리형 서비스에 대해 공개 액세스를 방지하기 위한 방법은 다음과 같습니다.

  • 백엔드 서비스에 대해 인증된 액세스만 허용합니다.
  • 게이트웨이의 백엔드 호출이 승인되도록 게이트웨이 API 구성과 연결된 서비스 계정에 필요한 권한을 부여합니다.

이 페이지에서는 백엔드 서비스 보안을 위해 필요한 단계에 대해 설명하고 게이트웨이 서비스 계정이 이러한 서비스에 액세스하기 위해 필요한 역할 및 권한에 대해 설명합니다.

Cloud Run

모든 Cloud Run 완전 관리형 서비스는 기본적으로 비공개로 배포됩니다. 즉, 요청에 인증 사용자 인증 정보를 제공하지 않으면 서비스에 액세스할 수 없습니다.

Cloud Run 서비스는 IAM으로 보호됩니다. 기본적으로 run.routes.invoke 권한이 포함된 모든 역할이 Cloud Run 서비스를 호출할 수 있습니다.

추가 사용자에게 액세스를 부여하도록 Cloud Run(완전 관리형) 서비스에서 IAM을 구성할 수 있습니다.

API Gateway의 경우 게이트웨이의 서비스 계정에 적절한 역할 및 권한(roles/run.invoker 역할 또는 run.routes.invoke 권한이 포함된 역할)을 부여하여 Cloud Run 서비스에 대한 액세스를 사용 설정합니다.

개별 서비스에 대한 게이트웨이 액세스는 서비스 수준 IAM을 사용하여 제어하고 프로젝트 내에 있는 모든 서비스에 대한 게이트웨이 액세스는 프로젝트 수준 IAM을 사용하여 제어할 수 있습니다.

Cloud Run 서비스에 대한 게이트웨이 요청이 거부되면 roles/run.invoker 역할이 게이트웨이의 서비스 계정에 부여되었고 게이트웨이의 서비스 계정에 run.routes.invoke 권한이 있는지 확인합니다. 호출자 역할 및 권한에 대한 자세한 내용은 Cloud Run IAM 참조를 확인하세요.

Cloud Run Functions

Cloud Run 함수 백엔드 서비스의 경우 함수 보기, 만들기, 업데이트, 삭제 기능을 제어하기 위해 Identity and Access Management(IAM)이 사용됩니다. IAM은 역할 부여를 통해 API Gateway와 같은 Cloud Run Functions 서비스에 대한 호출자 인증을 적용합니다.

IAM으로 역할 및 권한을 부여하면 다음 두 가지 작업을 제어할 수 있습니다.

  • 개발자 작업: 함수 만들기, 업데이트, 삭제는 물론 함수 액세스 관리
  • 함수 호출: 함수 실행

함수 호출 기능 부여는 HTTP 함수 및 백그라운드 함수에 따라 다릅니다.

API Gateway가 Cloud Run Functions 백엔드 서비스를 호출할 수 있으려면 게이트웨이의 서비스 계정에 roles/cloudfunctions.invoker 역할 또는 cloudfunctions.functions.invoke 권한이 포함된 역할을 부여합니다.

개별 함수에 대한 게이트웨이 액세스는 서비스 수준 IAM을 사용하여 제어하고 프로젝트의 모든 함수에 대한 게이트웨이 액세스는 프로젝트 수준 IAM을 사용하여 제어할 수 있습니다.

Cloud Run 함수 서비스에 대한 게이트웨이 요청이 거부되면 roles/cloudfunctions.invoker 역할이 게이트웨이의 서비스 계정에 부여되었고 게이트웨이의 서비스 계정에 cloudfunctions.functions.invoke 권한이 있는지 확인합니다. 호출자 역할 및 권한에 대한 자세한 내용은 Cloud Functions IAM 참조를 확인하세요.

App Engine

App Engine 앱 보안을 위해 IAP(Identity-Aware Proxy)를 사용하여 요청이 인증되었는지 확인해야 합니다.

App Engine 백엔드 서비스가 배포된 프로젝트에 대해 IAP 사용 설정 단계를 수행합니다. IAP를 사용 설정하면 App Engine 백엔드 애플리케이션에 대한 액세스가 보호됩니다.

API 게이트웨이가 App Engine 백엔드 서비스를 호출할 수 있으려면 IAP 액세스 설정의 단계에 따라 게이트웨이에 연결된 서비스 계정에 IAP-secured Web App User 역할을 부여합니다. 또한 서비스 계정에 다음 권한이 포함된 역할을 부여합니다.

  • appengine.applications.update
  • clientauthconfig.clients.create
  • clientauthconfig.clients.getWithSecret

기타 Google Cloud API

Google Cloud aiplatform.googleapis.com 또는 bigquery.googleapis.com와 같은 API에는 액세스 토큰이 필요하며 API Gateway가 다른 백엔드로 전송하는 ID 토큰을 거부합니다. 게이트웨이가 이러한 API를 호출할 수 있는지 여부는 스트리밍 모드에 따라 다릅니다.

  • 스트리밍 게이트웨이: effectiveStreamingMode가 EFFECTIVE_STREAMING_MODE_ENABLED인 게이트웨이는 호스트가 .googleapis.com 또는 .vertexai.goog로 끝나는 각 백엔드에 대해 게이트웨이의 서비스 계정에 대한 액세스 토큰으로 인증합니다. 액세스 토큰에는 https://www.googleapis.com/auth/cloud-platform 범위만 있으므로 게이트웨이는 다른 OAuth 범위가 필요한 API 메서드를 호출할 수 없습니다.

    동일한 게이트웨이의 다른 백엔드는 계속 ID 토큰을 수신합니다. disable_auth(OpenAPI 2.0) 또는 disableAuth(OpenAPI 3.x)이 설정된 백엔드는 토큰을 수신하지 않습니다. jwt_audience(OpenAPI 2.0) 및 jwtAudience(OpenAPI 3.x) 필드는 이러한 백엔드에 영향을 미치지 않습니다.

    게이트웨이의 서비스 계정에 대상 API에 필요한 IAM 역할(예: Gemini Enterprise Agent Platform(aiplatform.googleapis.com)의 Agent Platform 사용자(roles/aiplatform.user) 역할)을 부여합니다. 아직 액세스 토큰을 전송하지 않는 스트리밍 게이트웨이는 API Gateway가 다음 게이트웨이 업데이트를 출시할 때 액세스 토큰을 전송하기 시작합니다. 즉시 전환하려면 새 API 구성으로 업데이트합니다.

  • 기타 게이트웨이: effectiveStreamingMode가 EFFECTIVE_STREAMING_MODE_DISABLED인 게이트웨이는 Google CloudAPI 호출을 지원하지 않으며 호출이 401 응답 코드와 함께 실패할 수 있습니다.