авторизация пространства имен с oauth2 - PullRequest
0 голосов
/ 17 января 2020

У меня есть следующий сценарий:

enter image description here

Пользователь 1 будет иметь доступ к службам только в namespace1, но не в namespace2. Я собираюсь использовать OAuth2 в качестве сервера идентификации. Вопрос в том, как настроить входной контроллер, чтобы только user1 был авторизован для доступа к сервисам в namespace1.

Когда user2 пытается получить доступ к сервисам в namespace1, тогда он отклонит запрос.

Любое другое решение?

Ответы [ 2 ]

2 голосов
/ 17 января 2020

Вам нужно сделать это в самом приложении, используя запрос аудитории от токена JWT, предоставленного провайдером oauth.

Если вы не хотите делать это в приложении и Хорошо, если усложнить услугу me sh, вы можете использовать услугу me sh, например istio, для ее выполнения. Вот do c для istio .

2 голосов
/ 17 января 2020

Вы не можете сделать это на уровне Ingress Controller. Это можно сделать по правилам RBA C.

Примерно так:

kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  namespace: namespace1
  name: deployment-manager
rules:
- apiGroups: ["", "extensions", "apps"]
  resources: ["deployments", "replicasets", "pods"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: deployment-manager-binding
  namespace: namespace1
subjects:
- kind: User
  name: user1
  apiGroup: ""
roleRef:
  kind: Role
  name: deployment-manager
  apiGroup: ""

На уровне Ingress Controller (и в зависимости от Ingress Controller) вы можете отклонять запросы на основе хоста, пути; пользователь пытается получить доступ, заголовки и другие атрибуты, но не на основе личности пользователя.

Обратите внимание, что сам Ingress Controller будет работать в пространстве имен, поэтому вашему пользователю необходимо сначала обратиться к это (после аутентификации и авторизации), а затем будет отклонено, что на самом деле не звучит правильно.

...