У меня есть сервер apollo / graphql, расположенный за шлюзом GCP API. Google утверждает, что для защиты конечных точек требуется спецификация OpenAPI: https://cloud.google.com/api-gateway/docs/get-started-cloud-run#creating_an_api_config
Но как именно это будет выглядеть для защиты одной конечной точки graphql? Кроме того, в качестве побочного вопроса необходимо ли создавать новый API-шлюз для каждой службы Cloud Run / App Engine?
Заранее спасибо.





Вот репо, который демонстрирует, чего вы хотите достичь. Это GCP API Gateway, выходящий на GraphQL API в Cloud Run, защищенный с помощью Identity-Aware Proxy. Вот конфигурация API по ссылке:
api-spec.yaml
swagger: '2.0'
info:
title: gcp-demo-api
description: Sample GraphQL API on API Gateway with a Cloud Run backend
version: 1.0.0
schemes:
- https
produces:
- application/json
paths:
/:
post:
summary: GraphQL endpoint
operationId: gql
x-google-backend:
address: https://PROJECT_AND_RANDOM_STRING.a.run.app/graphql # App URL/endpoint
jwt_audience: LONG_RANDOM_STRING.apps.googleusercontent.com # IAP client ID
responses:
'200':
description: A successful response
schema:
type: object
Чтобы ответить на ваш побочный вопрос, важно понимать, что делает API-шлюз. Шлюз API - это то, что стоит между вашими пользовательскими запросами и вашей коллекцией серверных сервисов, поэтому все запросы API проходят через него.
Следовательно, вам не нужно создавать новый шлюз API для каждой службы. В API Gateway можно обслуживать несколько сервисов, таких как Cloud Run, App Engine, Cloud Functions и т. д., Указав внутренний адрес на каждой конечной точке. Вот ссылка на сайт, который дополнительно объясняет концепцию.