Проверка подлинности Istio JWT пропускает трафик без токена - PullRequest
1 голос
/ 19 марта 2019

Справочная информация:

Был похожий вопрос: Здесь , но он не предложил решение моей проблемы.

У меня естьразвернул приложение, которое работает, как ожидается, на моем кластере Istio.Я хотел включить аутентификацию JWT, поэтому адаптировал инструкции Here к моему сценарию использования.

ingressgateway:

Сначала я применил следующую политику к istio-ingressgateway.Это сработало, и любой трафик, отправленный без токена JWT, был заблокирован.

kubectl apply -n istio-system -f mypolicy.yaml
apiVersion: authentication.istio.io/v1alpha1
kind: Policy
metadata:
  name: core-api-policy
  namespace: istio-system
spec:
  targets:
  - name: istio-ingressgateway
    ports:
    - number: 80
  origins:
  - jwt:
      issuer: "https://cognito-idp.ap-northeast-1.amazonaws.com/ap-northeast-1_pa9vj7sbL"
      jwksUri: "https://cognito-idp.ap-northeast-1.amazonaws.com/ap-northeast-1_pa9vj7sbL/.well-known/jwks.json"
  principalBinding: USE_ORIGIN

Как только это сработало, я удалил эту политику и установил новую политику для своей службы.

kubectl delete -n istio-system -f mypolicy.yaml

service / core-api-service:

После редактирования вышеуказанной политики, изменив пространство имен и цель, как показано ниже, я повторно применил политику к правильному пространству имен.

Policy:

kubectl apply -n solarmori -f mypolicy.yaml
apiVersion: authentication.istio.io/v1alpha1
kind: Policy
metadata:
  name: core-api-policy
  namespace: solarmori
spec:
  targets:
  - name: core-api-service
    ports:
    - number: 80
  origins:
  - jwt:
      issuer: "https://cognito-idp.ap-northeast-1.amazonaws.com/ap-northeast-1_pa9vj7sbL"
      jwksUri: "https://cognito-idp.ap-northeast-1.amazonaws.com/ap-northeast-1_pa9vj7sbL/.well-known/jwks.json"
  principalBinding: USE_ORIGIN

Служба:

apiVersion: v1
kind: Service
metadata:
  name: core-api-service
spec:
  type: LoadBalancer
  ports:
  - port: 80
    name: api-svc-port
    targetPort: api-app-port
  selector:
    app: core-api-app

Результат этого действия не изменился при обработке трафика.Я все еще был в состоянии обратиться к своему сервису, хотя я не предоставлял JWT.

Я проверил istio-прокси моего развертывания сервиса, и в журналах не было создано local_jwks, как описано Здесь .

[procyclinsur@P-428 istio]$ kubectl logs -n solarmori core-api-app-5dd9666777-qhf5v -c istio-proxy | grep local_jwks
[procyclinsur@P-428 istio]$

Если кто-нибудь знает, где я иду не так, я был бы очень признателен за любую помощь.

1 Ответ

3 голосов
/ 19 марта 2019

Чтобы Сервис был частью сервисной сетки Istio, вам необходимо выполнить некоторые требования, указанные в официальных документах .

В вашем случае имя сервисного порта необходимо обновить до: <protocol>[-<suffix>] с <protocol> как:

  • КПГРЫ
  • HTTP
  • http2
  • * 1016 протокол HTTPS *
  • Монго
  • MySQL
  • Redis
  • 1024 * TCP *
  • 1026 * TLS *
  • 1028 * УДП *

В этот момент запросы, пересылаемые в службу, будут проходить через сетку службы; В настоящее время запросы обрабатываются сетями Kubernetes.

...