Я установил istio v1.1.1 и у меня проблемы с использованием политики аутентификации Istio.т.е. большинство моих микросервисов должны поддерживать аутентификацию конечного пользователя (токен JWT) и аутентификацию сервис-услуги (через istio mTLS) одновременно.
Я разработал свою Политику аутентификации Istio с аутентификацией как mTLS, так и JWT.на.Я должен установить originIsOptional в true , потому что вызов службы-сервиса имеет только K8S ServiceAccount в качестве идентификатора службы.
Теперь проблема заключается в следующем: если срок действия токена JWT истечет или отсутствует, istio вернет 403-отказ в доступе RBAC, поскольку аутентификация JWT будет пропущена и RBAC вступит в силу.
Если я установлю originIsOptional до false .Истечение срока действия JWT / пропадание вернет ошибку токена 401-JWT, как и ожидалось, но сервис-вызов будет заблокирован, поскольку токен JWT является обязательным.
apiVersion: "authentication.istio.io/v1alpha1"
kind: "Policy"
metadata:
name: "default"
namespace: "ns-fota"
spec:
peers:
1. mtls: {}
origins:
2. jwt:
issuer: "https://47.100.178.136:9444/oauth2/token"
jwksUri: "http://47.100.178.136:9764/oauth2/jwks"
principalBinding: USE_ORIGIN
originIsOptional: true
EOF
Мои вопросы:
Почему сервис-вызов службы (без токена JWT, только K8S ServiceAccount / Istio mTLS) проходит в подключенной конфигурации? PrincipalBinding настроен USE_ORIGIN .Означает ли это, что действительным является только пользователь-участник JWT?
Как поддерживать аутентификацию jwt / mTLS, при этом система может различать отсутствующий токен jwt и сбой Istio RBAC?