Конечные точки Google Cloud не ограничивают доступ к моему API - PullRequest
1 голос
/ 03 февраля 2020

Я следил за конечными точками облака Google с помощью учебника движка Google Kubernetes здесь: https://cloud.google.com/endpoints/docs/openapi/get-started-kubernetes-engine, используя мое собственное docker изображение. Часть Kubernetes работает нормально, и я могу получить доступ к своим услугам через IP-адрес loadbalancer.

Однако, когда я пытаюсь разместить свой сервис за облачными конечными точками, чтобы защитить его, конечная точка остается общедоступной c, и к ней можно получить доступ без ключа API. Вот мой openapi.yaml, развернутый с gcloud endpoints services deploy openapi.yaml:

swagger: "2.0"
info:
  description: "A test."
  title: "API test"
  version: "1.0.0"
host: "<test-api.endpoints.MY-PROJECT-ID.cloud.goog>"
x-google-endpoints:
- name: "<test-api.endpoints.MY-PROJECT-ID.cloud.goog>"
  target: "<MY LOADBALANCER IP>"
#require an API key to access project
security:
  - api_key: []
paths:
  /:
    get:
      summary: Return django REST default page
      description: test
      operationId: test
      responses:
        "200":
          description: OK
securityDefinitions:
  # This section configures basic authentication with an API key.
  api_key:
    type: "apiKey"
    name: "key"
    in: "query" 

Когда я пытаюсь получить доступ к своему сервису через значение для host (скрыто, потому что оно все еще открыто), оно все еще открыто и не требует ключа API. В журналах оконечных точек облака тоже ничего не отображается. Насколько я понимаю, одной конфигурации openapi.yaml должно быть достаточно для ограничения доступа?

1 Ответ

0 голосов
/ 03 февраля 2020

После этой страницы (https://swagger.io/docs/specification/2-0/authentication/api-keys/) ваша безопасность неуместна. Он должен выглядеть следующим образом:

swagger: "2.0"
info:
  description: "A test."
  title: "API test"
  version: "1.0.0"
host: "<test-api.endpoints.MY-PROJECT-ID.cloud.goog>"
x-google-endpoints:
- name: "<test-api.endpoints.MY-PROJECT-ID.cloud.goog>"
  target: "<MY LOADBALANCER IP>"
#require an API key to access project
paths:
  /:
    get:
      security:
        - api_key: []
      summary: Return django REST default page
      description: test
      operationId: test
      responses:
        "200":
          description: OK
securityDefinitions:
  # This section configures basic authentication with an API key.
  api_key:
    type: "apiKey"
    name: "key"
    in: "query" 

Редактировать:

Если вам нужен ключ API в заголовке, вам нужно изменить определение, но вы можете оставьте охрану в месте, которое вы заявили:

swagger: "2.0"
info:
  description: "A test."
  title: "API test"
  version: "1.0.0"
host: "<test-api.endpoints.MY-PROJECT-ID.cloud.goog>"
x-google-endpoints:
- name: "<test-api.endpoints.MY-PROJECT-ID.cloud.goog>"
  target: "<MY LOADBALANCER IP>"
#require an API key to access project
security:
  - api_key: []
paths:
  /:
    get:
      summary: Return django REST default page
      description: test
      operationId: test
      responses:
        "200":
          description: OK
securityDefinitions:
  # This section configures basic authentication with an API key.
  api_key:
    type: "apiKey"
    name: "key"
    in: "header" 

Я не понял, какую версию вы предпочитаете, поэтому я настроил обе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...