я могу использовать входной контроллер nginx oauth2_proxy в kubernetes с активной директорией Azure без файлов cookie - PullRequest
0 голосов
/ 07 ноября 2019

Я в процессе перехода с веб-службы Azure на Azure Kubernetes для размещения API. У меня есть решение, работающее с nginx и oauth2_proxy и Azure Active Directory. Однако решение требует cookie для работы. Поскольку это API, а внешняя безопасность будет управляться AWS API Gateway с настраиваемым авторизатором. Я хотел бы, чтобы шлюз API аутентифицировался только с использованием токена-носителя и не требовал cookie-файла.

У меня работает решение, и я до сих пор тестировал почтальона. В почтальоне у меня есть токен на предъявителя, но я не могу найти способ доступа без cookie.
Мое приложение в настоящее время работает через шлюз aws api и службу приложений Azure с активным каталогом Azure. В этом случае пользовательский авторизатор шлюза aws api не требует файла cookie.

У меня есть следующая конфигурация

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: oauth2-proxy
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
    - host: mydomain.com
      http:
        paths:
          - path: /oauth2
            backend:
              serviceName: oauth2-proxy
              servicePort: 4180
  tls:
  - hosts:
    - mydomain.com
    secretName: tls-secret

------
# oauth2_proxy.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: oauth2-proxy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: oauth2-proxy
  template:
    metadata:
      labels:
        app: oauth2-proxy
    spec:
      containers:
      - env:
          - name: OAUTH2_PROXY_PROVIDER
            value: azure
          - name: OAUTH2_PROXY_AZURE_TENANT
            value: mytennantid
          - name: OAUTH2_PROXY_CLIENT_ID
            value: my clientid
          - name: OAUTH2_PROXY_CLIENT_SECRET
            value: my client secret
          - name: OAUTH2_PROXY_COOKIE_SECRET
            value: my cookie secret
          - name: OAUTH2_PROXY_HTTP_ADDRESS
            value: "0.0.0.0:4180"
          - name: OAUTH2_PROXY_UPSTREAM
            value: "file:///dev/null"
        image: machinedata/oauth2_proxy:latest
        imagePullPolicy: IfNotPresent
        name: oauth2-proxy
        ports:
        - containerPort: 4180
          protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  labels:
    k8s-app: oauth2-proxy
  name: oauth2-proxy
spec:
  ports:
  - name: http
    port: 4180
    protocol: TCP
    targetPort: 4180
  selector:
    app: oauth2-proxy 
-----
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    certmanager.k8s.io/cluster-issuer: letsencrypt-prod
    nginx.ingress.kubernetes.io/auth-url: "https://$host/oauth2/auth"
    nginx.ingress.kubernetes.io/auth-signin: "https://$host/oauth2/start?rd=$escaped_request_uri"
spec:
  tls:
  - hosts:
    - mydomain.com
    secretName: tls-secret
  rules:
  - host: mydomain.com
    http:
      paths:
      - backend:
          serviceName: mayapp
          servicePort: 80

Я хотел бы изменить эту конфигурацию, чтобы файл cookie больше не требовался. Если это невозможно, есть ли другой способ достичь того же результата?

1 Ответ

1 голос
/ 07 ноября 2019

Просто оставьте часть oauth на kubernetes и заставьте API Gateway проверять запросы, у него есть возможность делать именно то, что вам нужно. Вы можете защитить свои kubernetes, чтобы принимать запросы только от шлюза API, поэтому вам не нужно защищать свою конечную точку от других вызовов.

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