Версия программы: ================= openbao-2.4.4-alt1 Стенды с ошибкой, обновлен. до Sisyphus: ======================================== Alt Server 11.1 Прекондишен: ============ 1. Настроить Keycloak для oidc аутентификации с тест-пользователями: admin-user, которую получает admin роль после логина 2. Настроить Openbao кластер из трёх нод: bao-1, bao-2, bao-3 3. Включить метод аутентификации OIDC в Openbao кластере: # bao auth enable oidc 4. Создать конфиг с дефолтной ролью default_role=oidc-login (предполагается, что вход в Openbao будет осуществляться без указания роли): # bao write auth/oidc/config \ oidc_discovery_url="https://<Keycloak IP>:8443/realms/test-bao" \ oidc_client_id="bao-client" \ oidc_client_secret="<Client Secret>" \ #Указать Client Secret полученный клиентом в Keycloak oidc_discovery_ca_pem="$(cat /tmp/keycloak.crt)" \ default_role=oidc-login 5. Создать файл с настройками oidc-login.json для создания дефолтной роли: # cat > oidc-login.json << 'EOF' { "role_type": "oidc", "allowed_redirect_uris": [ "https://bao.altdomain.ru:8200/ui/vault/auth/oidc/oidc/callback", "https://bao.altdomain.ru:8200/v1/auth/oidc/callback", "https://bao-1.altdomain.ru:8200/ui/vault/auth/oidc/oidc/callback", "https://bao-2.altdomain.ru:8200/ui/vault/auth/oidc/oidc/callback", "https://bao-3.altdomain.ru:8200/ui/vault/auth/oidc/oidc/callback", "http://localhost:8250/oidc/callback" ], "bound_audiences": [ "bao-client" ], "groups_claim": "/resource_access/bao-client/roles", "token_policies": [ "default" ], "token_max_ttl": "8h", "max_age": 0, "token_type": "default", "ttl": "30m", "user_claim": "sub" } EOF 6. Создать дефолтную роль oidc-login: # bao write auth/oidc/role/oidc-login -<oidc-login.json 7. Создать политику policy-admin # bao policy write policy-admin - <<EOF path "kv/*" { capabilities = ["create", "read", "update", "delete", "list", "sudo"] } path "sys/*" { capabilities = ["create", "read", "update", "delete", "list", "sudo"] } path "auth/*" { capabilities = ["create", "read", "update", "delete", "list", "sudo"] } path "kv/delete/*" { capabilities = ["update"] } path "kv/destroy/*" { capabilities = ["update"] } path "kv/undelete/*" { capabilities = ["update"] } EOF 8. Создать группу: admin: # bao write identity/group name="admin" policies="policy-admin" type="external" 9. Создать алиасы для группы admin (имя алиасов должно соответствовать имени роли в Keycloak): # ACCESSOR=$(bao auth list -format=json | jq -r '.["oidc/"].accessor') # bao write identity/group-alias name="admin" mount_accessor="$ACCESSOR" canonical_id=$(bao read -field=id identity/group/name/admin) 10. Включить KV v2: # bao secrets enable -path=kv kv-v2 11. Записать секрет в kv для группы qa: # bao kv put kv/qa/testdata username="test" password="test" Шаги, приводящие к ошибке: ========================== 1. На клиенте зайти в Openbao UI пользователем admin-user -> Три горизонтальные точки напротив secret engine kv/ -> Disable -> Disable 2. Проверить пользователем admin-user на openbao клиенте, что директория kv/ была удалена $ export VAULT_ADDR=https://bao.altdomain.ru:8200 $ export VAULT_SKIP_VERIFY=1 $ bao login -method=oidc $ bao kv list kv/ Ожидаемый результат: ==================== Корректная ошибка при просмотре отсутствующей директории Фактический результат: ====================== При просмотре списка данных отсутствующей директории выдается некорректная ошибка: Error making API request. URL: GET https://bao-1.altdomain.ru:8200/v1/sys/internal/ui/mounts/kv Code: 403. Errors: * preflight capability check returned 403, please ensure client's policies grant access to path "kv/" У пользователя admin-user есть доступ к директории "kv/" (См. прекондишен). При этом если до удаления просмотреть список данных отсутствующей директории или отсутствующий секрет, то выдаются следующие ошибки: $ bao kv get kv/qa/qa No value found at kv/data/qa/qa $ bao kv list kv/qa/qa/ No value found at kv/metadata/qa/qa
Проверил воспроизведение ошибки. Тоже получил некорректную ошибку. Создал тикет в upstream - https://github.com/openbao/openbao/issues/2404