Ограничение доступа к админ-консоли#
Ограничение доступа к админ-консоли в Kubernetes/Openshift#
Ограничение доступа к админ-консоли в Kubernetes/Openshift реализуется следующим образом:
Создать сервис для Istio, в котором будут прописаны порты
apiVersion: v1
kind: Service
metadata:
labels:
app: kcse-ingressgateway
istio: kcse-ingressgateway
name: ingressgateway-svc-separate
spec:
ports:
- name: https-<ADMIN_PORT>
port: <ADMIN_PORT>
- name: https-<USER_PORT>
port: <USER_PORT>
selector:
app: kcse-ingressgateway
istio: kcse-ingressgateway
Создать Route (служба, в которой задается имя хоста), по которым будут получать доступ пользователи и администраторы.
apiVersion: route.openshift.io/v1
kind: Route
metadata:
labels:
app: kcse-ingressgateway
istio: kcse-ingressgateway
name: ingressgateway-https-admin
annotations:
haproxy.router.openshift.io/balance: roundrobin
spec:
host: admin-<HOST>
port:
targetPort: https-<ADMIN_PORT>
tls:
termination: passthrough
to:
kind: Service
name: ingressgateway-svc-separate
apiVersion: route.openshift.io/v1
kind: Route
metadata:
labels:
app: kcse-ingressgateway
istio: kcse-ingressgateway
name: ingressgateway-https-user
annotations:
haproxy.router.openshift.io/balance: roundrobin
spec:
host: user-<HOST>
port:
targetPort: https-<USER_PORT>
tls:
termination: passthrough
to:
kind: Service
name: ingressgateway-svc-separate
Создать VirtualService, который представляет собой набор правил маршрутизации трафика при обращении к хосту
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: internal-host-vs-admin
spec:
exportTo:
- .
gateways:
- ingressgateway-gw-separate
hosts:
- admin-<HOST>
http:
- route:
- destination:
host: kcse
port:
number: 8080
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: internal-host-vs-user
spec:
exportTo:
- .
gateways:
- ingressgateway-gw-separate
hosts:
- user-<HOST>
http:
- match:
- uri:
prefix: /admin
- uri:
prefix: /auth/admin
redirect:
authority: admin-<HOST>
- route:
- destination:
host: kcse
port:
number: 8080
Создать Gateway, который описывает балансировщик нагрузки, работающий на границе сетки, принимающий входящие или исходящие соединения HTTP/TCP
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: ingressgateway-gw-separate
spec:
selector:
istio: kcse-ingressgateway
servers:
- port:
name: https-<ADMIN_PORT>
number: <ADMIN_PORT>
protocol: HTTPS
hosts:
- admin-<HOST>
tls:
caCertificates: /etc/istio/ingressgateway-ca-certs/ca-chain.cert.pem
mode: MUTUAL
privateKey: /etc/istio/ingressgateway-certs/tls.key
serverCertificate: /etc/istio/ingressgateway-certs/tls.crt
- port:
name: https-<USER_PORT>
number: <USER_PORT>
protocol: HTTPS
hosts:
- user-<HOST>
tls:
caCertificates: /etc/istio/ingressgateway-ca-certs/ca-chain.cert.pem
mode: SIMPLE
privateKey: /etc/istio/ingressgateway-certs/tls.key
serverCertificate: /etc/istio/ingressgateway-certs/tls.crt
Теперь при входе в панель администратора по хосту пользователя user-<HOST> его будет переадресовывать на хост администратора admin-<HOST>, на который можно будет войти предъявив сертификат.
Запуск в режиме Read-only с блокировкой изменений через административную консоль#
Специальная конфигурация запуска в режиме Read-only с блокировкой изменений через админ-консоль включается переменной окружения: KCSE_UI_READ_ONLY_MODE. Если для переменной задано значение “true”, - консоль администратора после входа пользователя отображается в режиме «только для чтения». В этом случае пользователь может просматривать данные в консоли, но не может их редактировать или удалять.
Описание конфигурационных параметров на странице Настройка конфигурационных параметров
После запуска Pods необходимо проверить работоспособность приложения согласно url, прописанному в Routes для данного приложения.
Откроется консоль администратора в режиме "только для чтения"
Ограничение доступа к админ-консоли при помощи Platform V. IAM Proxy#
Для разграничения доступа к админ-консоли необходимо настроить в Platform V. IAM Proxy ответвления.
- junctionName: Keycloak for Admins
https: True
authorizeByRoleTemplate: "platformauth_admin"
junctionPoint: /auth/admin
indexUrl: /auth/admin/master/console/
applyJctRequestFilter: "common/rds-set-header-host-to-backend.location.conf , common/rds-ssl-sni-on.server.conf , common/rds-block-for-custom-keycloak-admin-api.location.conf"
sslCommonName: "node1.platformauth-devb.sc.dev.mycompany"
transparent: True
serverAddresses: [ "node1.platformauth-devb.sc.dev.mycompany:8444" ]
- junctionName: Keycloak for Users
https: True
junctionPoint: /auth
indexUrl: /auth/realms/PlatformAuth/account/
applyJctRequestFilter: "common/rds-set-header-host-to-backend.location.conf , common/rds-ssl-sni-on.server.conf , common/rds-block-all-keycloak-admin-api.location.conf"
sslCommonName: "platformauth-devb.sc.dev.mycompany"
transparent: True
serverAddresses: [ "platformauth-devb.sc.dev.mycompany:443" ]
В параметре authorizeByRoleTemplate должна быть указана роль, указанная в токене одним из следующим образом:
Как Realm-роль пользователя:
На вкладке "Роли" должна быть создана роль, указанная в параметре
authorizeByRoleTemplate.На вкладке "Клиенты" -> Выбранный клиент -> "Сопоставления" добавить сопоставление "User Realm Role", задав имя переменной в токене.
На вкладке "Пользователи" -> Выбранный пользователь -> "Сопоставление ролей" назначить ее пользователю.
Как роль клиента, который используется на IAM Proxy для авторизации:
На вкладке "Клиенты" -> Выбранный клиент -> "Роли" должна быть создана роль, указанная в параметре
authorizeByRoleTemplate.На вкладке "Клиенты" -> Выбранный клиент -> "Сопоставления" добавить сопоставление "User Client Role", задав имя переменной в токене.
На вкладке "Клиенты" -> Выбранный клиент -> "Роли Service Account" назначить данную роль.
Подробнее о настройке ответвлений можно узнать в документации компонента IAM Proxy (AUTH).
