Авторизация Keycloak


Astra Monitoring использует Keycloak в качестве основного средства аутентификации и авторизации пользователей. Это решение предоставляет:

  • Централизованное управление пользователями и ролями

  • Поддержку многофакторной аутентификации (MFA)

  • Интеграцию с внешними Identity Provider (LDAP, Active Directory, SAML 2.0)

  • Гибкую систему ролевой модели доступа

Установка по умолчанию

При развертывании системы Keycloak автоматически:

  1. Устанавливается как часть Docker-комплекса

  2. Настраивается с базовой конфигурацией

  3. Создается административный пользователь с credentials, указанными при установке

Важно

После первой установки необходимо выполнить дополнительные настройки для обеспечения безопасности и корректной работы.

При обращении к URL AdminUI пользователь автоматически пробрасывается на сервис Keycloak, где он должен выполнить вход. В случае настроенной интеграции с каталогом пользователей LDAP, пользователь должен использовать свои персональные УЗ.

AM login screen


По умолчанию, в Платформе создаётся локальный (с точки зрения Keycloak) пользователь admin-internal с паролем, заданным при установке (через указание пароля admin_ui.password или через указание имени секрета admin_ui.secretName).

Для смены пароля в Keycloak:

  1. Необходимо перейти по адресу в зависимости от типа установки:

    • kubernetes - http(s)://astra-monitoring.server/oidc/

    • docker-compose - http(s)://astra-monitoring.server:8081/

  2. После открытия окна с Keycloak выбрать «Administration Console»

  3. Ввести логин и пароль (по умолчанию admin:password)

  4. Если необходимо сменить:

    • логин и пароль пользователя для входа в Keycloak, то выбрать в верхнем левом углу realm «master» → Перейти на вкладку «Users» → Кликнуть по «Username=admin» → Перейти на вкладку «Credentials» → Нажать «Reset password» → Далее сбросить пароль на новый → можно осуществлять вход в Keycloak по новому паролю

    • логин и пароль для входа в Admin UI, то выбрать в верхнем левом углу realm «astra-monitoring» → Перейти на вкладку «Users» → Кликнуть по «Username=admin-internal» → Перейти на вкладку «Credentials» → Нажать «Reset password» → Далее сбросить пароль на новый → можно осуществлять вход в Admin UI по новому паролю

  5. Если необходимо создать:

    • новый логин и пароль пользователя для входа в Keycloak, то выбрать в верхнем левом углу realm «master» → Перейти на вкладку «Users» → Нажать «Add user» → Заполнить поле «Username» → Нажать кнопку «Create» → Перейти на вкладку «Credentials» → Нажать «Set password» → Создать пароль и сохранить его → Перейти на вкладку «Role mapping» → Нажать «Assign role» и выбрать «admin» и «default-roles-master» (можно выбрать те роли, которые необходимы) → можно осуществлять вход в Keycloak по новому логину и паролю

    • новый логин и пароль для входа в Admin UI, то выбрать в верхнем левом углу realm «astra-monitoring» → Перейти на вкладку «Users» → Нажать «Add user» → Заполнить поле «Username» → Нажать кнопку «Create» → Перейти на вкладку «Credentials» → Нажать «Set password» → Создать пароль и сохранить его → можно осуществлять вход в Admin UI по новому логину и паролю

Для увеличения времени действия сессии в Keycloak:

  1. Перейти на адрес keycloak

  2. Изменить параметры в разделе /admin/master/console/#/astra-monitoring/realm-settings/sessions:

    • SSO Session Idle (12 часов)

    • SSO Session Max (12 часов)

  3. Изменить параметры в разделе admin/master/console/#/astra-monitoring/realm-settings/tokens:

    • Access Token Lifespan (12 часов)

    • Access Token Lifespan For Implicit Flow (12 часов)

    • Client Login Timeout (5 минут)

AM Keycloak screen

AM Realm screen

Настройка интеграции с LDAP


Интеграцию Keycloak с LDAP каталогом пользователей (ALD Pro, FreeIPA, MS AD) можно настроить двумя способами:

1. Настроить самостоятельно через интерфейс Keycloak, согласно официальной инструкции.

2. При установке Платформы

Добавить в файл keycloak/realm-astra-monitoring.json.tmpl секцию components, предварительно заполнив нужными параметрами.

keycloak/realm-astra-monitoring.json.tmpl
"components": {    
  "org.keycloak.storage.UserStorageProvider": [
    {
      "id": "3e385a5b-86f0-4557-ae9f-554ab7e075f9",
      "name": "ldap",
      "providerId": "ldap",
      "subComponents": {
        "org.keycloak.storage.ldap.mappers.LDAPStorageMapper": [
          {
            "id": "b5585ad1-9d33-4dc5-8640-9c1d13300263",
            "name": "creation date",
            "providerId": "user-attribute-ldap-mapper",
            "subComponents": {},
            "config": {
              "ldap.attribute": [
                "whenCreated"
              ],
              "is.mandatory.in.ldap": [
                "false"
              ],
              "always.read.value.from.ldap": [
                "true"
              ],
              "read.only": [
                "true"
              ],
              "user.model.attribute": [
                "createTimestamp"
              ]
            }
          },
          {
            "id": "c6f67e38-875e-492c-a155-d201eb505d63",
            "name": "username",
            "providerId": "user-attribute-ldap-mapper",
            "subComponents": {},
            "config": {
              "ldap.attribute": [
                "uid"
              ],
              "is.mandatory.in.ldap": [
                "true"
              ],
              "read.only": [
                "true"
              ],
              "always.read.value.from.ldap": [
                "false"
              ],
              "user.model.attribute": [
                "username"
              ]
            }
          },
          {
            "id": "8014836c-575e-495a-87a1-242c4d2a7e15",
            "name": "email",
            "providerId": "user-attribute-ldap-mapper",
            "subComponents": {},
            "config": {
              "ldap.attribute": [
                "mail"
              ],
              "is.mandatory.in.ldap": [
                "false"
              ],
              "always.read.value.from.ldap": [
                "false"
              ],
              "read.only": [
                "true"
              ],
              "user.model.attribute": [
                "email"
              ]
            }
          },
          {
            "id": "8a42bf1c-fd91-4993-b484-0369456816c7",
            "name": "modify date",
            "providerId": "user-attribute-ldap-mapper",
            "subComponents": {},
            "config": {
              "ldap.attribute": [
                "whenChanged"
              ],
              "is.mandatory.in.ldap": [
                "false"
              ],
              "always.read.value.from.ldap": [
                "true"
              ],
              "read.only": [
                "true"
              ],
              "user.model.attribute": [
                "modifyTimestamp"
              ]
            }
          },
          {
            "id": "924f1c72-2e07-4a3b-b7bd-0e83dc5d95b7",
            "name": "first name",
            "providerId": "user-attribute-ldap-mapper",
            "subComponents": {},
            "config": {
              "ldap.attribute": [
                "cn"
              ],
              "is.mandatory.in.ldap": [
                "true"
              ],
              "read.only": [
                "true"
              ],
              "always.read.value.from.ldap": [
                "true"
              ],
              "user.model.attribute": [
                "firstName"
              ]
            }
          },
          {
            "id": "8fc95ee3-4e8d-47b5-9381-295aad0422ac",
            "name": "last name",
            "providerId": "user-attribute-ldap-mapper",
            "subComponents": {},
            "config": {
              "ldap.attribute": [
                "sn"
              ],
              "is.mandatory.in.ldap": [
                "true"
              ],
              "read.only": [
                "true"
              ],
              "always.read.value.from.ldap": [
                "true"
              ],
              "user.model.attribute": [
                "lastName"
              ]
            }
          },
          {
            "id": "84a1db56-33ca-430a-b6d3-a4cd689a67fd",
            "name": "MSAD account controls",
            "providerId": "msad-user-account-control-mapper",
            "subComponents": {},
            "config": {}
          }
        ]
      },
      "config": {
        "pagination": [
          "false"
        ],
        "fullSyncPeriod": [
          "-1"
        ],
        "startTls": [
          "false"
        ],
        "connectionPooling": [
          "false"
        ],
        "usersDn": [
          "cn=users,cn=accounts,dc=example,dc=loc"
        ],
        "cachePolicy": [
          "DEFAULT"
        ],
        "useKerberosForPasswordAuthentication": [
          "false"
        ],
        "importEnabled": [
          "true"
        ],
        "enabled": [
          "true"
        ],
        "changedSyncPeriod": [
          "-1"
        ],
        "usernameLDAPAttribute": [
          "uid"
        ],
        "bindCredential": [
          ""
        ],
        "bindDn": [
          ""
        ],              
        "vendor": [
          "ad"
        ],
        "uuidLDAPAttribute": [
          "uid"
        ],
        "connectionUrl": [
          ""
        ],
        "allowKerberosAuthentication": [
          "false"
        ],
        "syncRegistrations": [
          "false"
        ],
        "authType": [
          "simple"
        ],
        "krbPrincipalAttribute": [
          "userPrincipalName"
        ],
        "searchScope": [
          "2"
        ],
        "useTruststoreSpi": [
          "always"
        ],
        "usePasswordModifyExtendedOp": [
          "false"
        ],
        "trustEmail": [
          "false"
        ],
        "userObjectClasses": [
          "inetOrgPerson, organizationalPerson"
        ],
        "rdnLDAPAttribute": [
          "uid"
        ],
        "editMode": [
          "READ_ONLY"
        ],
        "validatePasswordPolicy": [
          "false"
        ]
      }
    }
  ]
}

Для применения изменений необходимо удалить каталог keycloak/data/pgdata, где хранится стейт Keycloak.

Добавить параметры подключения в values.yaml

values.yaml
keycloak:
  ldap:
    connectionUrl: ldap://ipaserver:389
    bindDn: "uid=integration,cn=users,cn=accounts,dc=example,dc=loc"
    usersDn: "cn=users,cn=accounts,dc=example,dc=loc"
    usernameLDAPAttribute: "uid"

Для применения изменений необходимо удалить deployments и pvc, относящиеся к keycloak.