Как скрыть Django Admin из паблика c на Azure Сервис Kubernetes при сохранении доступа через бэкдор - PullRequest
1 голос
/ 19 марта 2020

Я запускаю приложение Django на Azure Kubernetes Service и в целях безопасности хотел бы сделать следующее:

  • Полностью заблокировать портал администратора из общедоступной c (например, средний Джо не может достигнуть mysite.com/admin)
  • Разрешить доступ через некоторый бэкдор (например, частную сеть, хост перехода и т. Д. c.)

Один сценарий будет запускать две совершенно разные службы: 1) основную часть API приложения, которая является просто основной кодовой базой с отключенным администратором . Это подается публично. и 2) Частный сайт за каким-то брандмауэром, на котором включен администратор . Каждый из них может находиться в отдельном кластере с другим полным доменным именем, но все они подключены к одному и тому же хранилищу данных. Это определенно излишне - должен быть способ сохранить все в кластере.

Я думаю, что мог бы быть способ настроить сетевой уровень Azure, чтобы заблокировать / разрешить трафик c из указанных c IP-диапазоны, и делать это для каждой конечной точки (например, mysite.com/admin против mysite.com/api/1/test). В качестве альтернативы, возможно, это выполнимо на уровне отдельных поддоменов (например, api.mysite.com/anything против admin.mysite.com/anything).

Это также может быть выполнимо на входном уровне Kubernetes, но я не могу понять, как.

Какой самый простой способ удовлетворить 2 требования?

1 Ответ

2 голосов
/ 19 марта 2020

Вы можете управлять ограничением на входном уровне:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/whitelist-source-range: "192.168.0.XXX, 192.175.2.XXX"
  name: staging-ingress
  namespace: default
spec:
  rules:
  - host: test.example.io
    http:
      paths:
      - backend:
          serviceName: service-name
          servicePort: 80
  tls:
  - hosts:
    - test.example.io
    secretName: tls-cert

Вы можете добавить в белый список IP-адрес, чтобы разрешить указанный c путь для решения проблемы с бэкдором. Для других вы можете создать другое правило входа с удалением аннотации для доступа publi c.

Для определенного пути:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/whitelist-source-range: "192.168.0.XXX, 192.175.2.XXX"
  name: staging-ingress
  namespace: default
spec:
  rules:
  - host: test.example.io
    http:
      paths:
      - path : /admin
        backend:
          serviceName: service-name
          servicePort: 80
  tls:
  - hosts:
    - test.example.io
    secretName: tls-cert

test.example.io / admin будет доступно только через источник-диапазона.

...