Аутентификация ключа API для Ambassador - PullRequest
1 голос
/ 14 апреля 2019

Я пытаюсь выяснить, как создать простой прокси-сервер, защищенный ключом API, с помощью Ambassador на k8s, но пока не могу найти никаких документов по этому вопросу.

В частности, я просто хочу настроить его так, чтобы он мог принимать запрос с заголовком API-KEY, аутентифицировать его, и если API-KEY действителен для какого-либо клиента, передать его на мой бэкэнд.

1 Ответ

3 голосов
/ 15 апреля 2019

Я предлагаю вам сделать следующее:

  1. Создайте приложение аутентификации: для каждой защищенной конечной точки это приложение будет отвечать за проверку ключа API.

  2. Конфигурирование Ambassador для перенаправления запросов в эту службу: вам просто нужно аннотировать определение службы приложения аутентификации. Пример:

    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: auth-app
      annotations:
        getambassador.io/config: |
          ---
          apiVersion: ambassador/v1
          kind:  AuthService
          name:  authentication
          auth_service: "auth-app:8080"
          allowed_request_headers:
          - "API-KEY"
    spec:
      type: ClusterIP
      selector:
        app: auth-app
      ports:
      - port: 8080
        name: auth-app
        targetPort: auth-app
  1. Настройте конечную точку в auth-app , соответствующую конечной точке приложения, которое вы хотите аутентифицировать. Предположим, у вас есть приложение с таким отображением:
    apiVersion: ambassador/v1
    kind:  Mapping
    name:  myapp-mapping
    prefix: /myapp/
    service: myapp:8000

Тогда вам нужно иметь конечную точку " / myapp / " в auth-app . Там вы прочтете заголовок API-KEY . Если ключ верен, верните HTTP 200 (ОК). После этого посол отправит исходное сообщение на myapp . Если auth-app вернет какую-либо другую вещь, кроме HTTP 200, посол вернет этот ответ клиенту.

  1. Обойти аутентификацию в необходимых приложениях. Например, вам может потребоваться приложение для входа в систему, отвечающее за предоставление API-ключа клиентам. Вы можете обойти аутентификацию для этих приложений, используя bypass_auth: true в отображении:
    apiVersion: ambassador/v1
    kind:  Mapping
    name:  login-mapping
    prefix: /login/
    service: login-app:8080
    bypass_auth: true

Отметьте это , если вы хотите узнать больше об аутентификации в Ambassador

РЕДАКТИРОВАТЬ: Согласно этому ответу это хорошая практика, если вы используете в качестве заголовка Authorization: Bearer {base64-API-KEY}. В Ambassador заголовок Authorization разрешен по умолчанию, поэтому вам не нужно передавать его в поле allow_request_headers .

...