Сначала на стороне keycloak нужно создать клиента. И обязательно создать маппер, который собственно за маппит ваши роли на верхней уровень, например roles. JSON должен быть примерно таким:
"roles": [
"<role1>",
"<role2>",
],
Допустим у нас будет две роли, admins, viewers. В kafka-ui.yaml нужно добавить следующее:
auth:
type: OAUTH2
oauth2:
client:
keycloak:
clientId: <clientId>
clientSecret: <clientSecret>
scope: openid
client-name: keycloak
provider: keycloak
redirect-url: https://<kafka_ui_domain>/login/oauth2/code/keycloak
authorization-grant-type: authorization_code
issuer-uri: https://<keycloak_domain>/realms/<realm_name>
user-name-attribute: preferred_username
custom-params:
type: oauth
roles-field: roles
Это касательно интеграции с keycloak. Поле roles-field как раз отвечает за получение из токена ролей и да, оно не умеет брать их из вложенной структуры вида
resource_access.<client_id>.roles. Поэтому мы создали маппер выше.Далее подключаем там же маппинг ролей уже на нашей стороне:
rbac:
roles:
- name: "admins"
clusters:
- <cluster_name_1>
- <cluster_name_2>
subjects:
- provider: oauth
type: role
value: "admins" ## Имя роли в KK
permissions:
- resource: applicationconfig
actions: all
- resource: clusterconfig
actions: all
- resource: topic
value: ".*"
actions: all
- resource: consumer
value: ".*"
actions: all
- resource: schema
value: ".*"
actions: all
- resource: connect
value: ".*"
actions: all
- resource: ksql
actions: all
- resource: acl
actions: all
- resource: audit
actions: all
- name: "viewers"
clusters:
- <cluster_name_1>
- <cluster_name_2>
subjects:
- provider: oauth
type: role
value: "viewers" ## Имя роли в KK
permissions:
- resource: clusterconfig
actions: [ "view" ]
- resource: topic
value: ".*"
actions:
- VIEW
- MESSAGES_READ
- resource: consumer
value: ".*"
actions: [ view ]
- resource: schema
value: ".*"
actions: [ view ]
- resource: connect
value: ".*"
actions: [ view ]
- resource: acl
actions: [ view ]
Любой залогиненый в KK пользователь получит пустой дашборд без возможности что-либо сделать. Пользователи добавленные в соответствующие группы в КК получат тот доступ, который мы указали в kafka-ui выше.
#kafka