Сопоставление исключений Istio не работает для api healthz без принципала jwt

Мой RequestAuthentication - это

apiVersion: security.istio.io/v1beta1
kind: RequestAuthentication
metadata:
  name: testing-dev-authenticator
  namespace: istio-system
spec:
  selector:
    matchLabels:
      istio: ingressgateway
  jwtRules:
  - issuer: "https://www.googleapis.com/service_accounts/v1/jwk/[email protected]"
    jwksUri: "https://securetoken.google.com/<project-name>"

Моя политика авторизации такова

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
 name: test-dev-authorizer-all-svc
 namespace: dev
spec:
 action: ALLOW
 rules:
 - from:
   - source:
       notRequestPrincipals: ["*"]
   to:
   - operation:
       notPaths: ["/message/ping"]

Мое требование: я не хочу, чтобы jwt auth проверял работоспособность (мой случай - / message / ping), но я всегда получаю Ответ выше - RBAC: доступ запрещен


person Jithin Kumar S    schedule 11.01.2021    source источник
comment
Похоже на проблему с вашим приложением, если бы это была проблема с политикой авторизации, вы бы получили ошибку RBAC: access denied вместо upstream connect error or disconnect/reset before headers. Не могли бы вы проверить, работает ли ваше приложение? Работает ли без AuthorizationPolicy? В логах приложений что-нибудь есть?   -  person Jakub    schedule 11.01.2021
comment
да, это была ошибка, исправлено и теперь появляется ошибка RBAC: доступ запрещен. Я отредактирую ответ. Но мне нужно, чтобы все модули, развернутые в пространстве имен dev, прошли проверку подлинности, кроме проверки работоспособности, путь к ней - path: [/ user / ping, / message / ping], но я не могу предоставить оба одновременно, пожалуйста, пожалуйста помощь?   -  person Jithin Kumar S    schedule 11.01.2021


Ответы (1)


Я хотел, чтобы все модули, развернутые в пространстве имен dev, были аутентифицированы, кроме проверки работоспособности, путь к ней - path: [/ user / ping, / message / ping], но я не могу предоставить оба одновременно

Я воспроизвел вашу проблему и думаю, что она работает так, как вы хотели.


Есть мои yamls RequestAuthentication и AuthorizationPolicy.

apiVersion: security.istio.io/v1beta1
kind: RequestAuthentication
metadata:
  name: testing-dev-authenticator
  namespace: istio-system
spec:
  selector:
    matchLabels:
      istio: ingressgateway
  jwtRules:
  - issuer: "[email protected]"
    jwksUri: "https://raw.githubusercontent.com/istio/istio/release-1.8/security/tools/jwt/samples/jwks.json"

---

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: require-jwt
  namespace: istio-system
spec:
  selector:
    matchLabels:
      istio: ingressgateway
  action: ALLOW
  rules:
  - from:
    - source:
        requestPrincipals: ["*"]
    to:
    - operation:
        paths: ["/productpage"]
  - to:
    - operation:
        paths: ["/api/v1/products"]

Вы можете использовать следующее, чтобы исключить путь (например, / api / v1 / products) из JWT, когда / productpage требует JWT и отклоняет все запросы без токена.

Если вы хотите исключить более одного пути, это должно сработать:

paths: ["/api/v1/products","/login"]

Итак, в вашем случае это было бы

paths: ["/user/ping", "/message/ping"] 

Я протестировал вышеуказанную конфигурацию в приложении bookinfo.

Это токен, который я использовал

TOKEN=$(curl https://raw.githubusercontent.com/istio/istio/release-1.8/security/tools/jwt/samples/demo.jwt -s)

Тесты:

api/v1/products
Without token
200
With token
200
------------------------------------------------------------------
/productpage
Without token
403
With token
200

Вы также упомянули, что хотите сделать это в конкретном пространстве имен, тогда вы можете попробовать эти yamls RequestAuthentication и AuthorizationPolicy.

apiVersion: security.istio.io/v1beta1
kind: RequestAuthentication
metadata:
  name: testing-dev-authenticator
  namespace: dev
spec:
  jwtRules:
  - issuer: "[email protected]"
    jwksUri: "https://raw.githubusercontent.com/istio/istio/release-1.8/security/tools/jwt/samples/jwks.json"

---

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
 name: test-dev-only-authorized-api
 namespace: dev
spec:
 action: DENY
 rules:
 - from:
   - source:
        notRequestPrincipals: ["*"]
   to:
   - operation:
       paths: ["/productpage"]

Также на основе приложения bookinfo.

Тесты:

api/v1/products
Without token
200
With token
200
------------------------------------------------------------------
/productpage
Without token
403
With token
200

Дополнительные ресурсы:

person Jakub    schedule 12.01.2021
comment
@Jithin Тебе удалось заставить его работать? - person Wytrzymały Wiktor; 13.01.2021
comment
Спасибо @Jakub !. В документации istio сказано, что это не сработало. Но твой конфиг работает. Документация неверна? Ссылка: istio.io/latest/docs/concepts/security - перейти к параграф Исключение соответствия - person Jithin Kumar S; 20.01.2021
comment
@Jithin Kumar S Счастливо, это работает для вас. Насколько я понимаю, он очень близок ко второму примеру, который я сделал, так что он должен работать. Но на сайте istio есть allow, notpaths и requestprincipals, вы использовали allow с notpaths и notrequestprincipals, это может быть проблемой, но я не тестировал это, поэтому я не уверен. - person Jakub; 20.01.2021
comment
хм, я протестирую это и дам вам знать. в любом случае спасибо Якуб! - person Jithin Kumar S; 21.01.2021