Připojení k Elasticsearch a Kibana¶
Toto je průvodce konfigurací SeaCat Auth jako proxy pro uživatele a role Kibana. Protože Kibana není kompatibilní s OAuth a podporuje pouze základní autentizaci, je integrace do prostředí Single Sign-On vyžaduje zvláštní přístup. Komponenta SeaCat Auth Batman (Basic Auth Token MANager) je navržena přesně pro tento úkol - "překládá" Seacat session cookies na základní autentizační hlavičky a synchronizuje uživatele Kibana/Elasticsearch s přihlašovacími údaji SeaCat Auth a jejich přístupovými právy.
Jak to funguje?¶
Tok pro použití Batman auth je téměř stejný jako tok cookie auth,
jediným rozdílem je typ introspekce, který se používá.
Místo koncového bodu PUT /nginx/introspect/cookie
(který vyměňuje Seacat klientské cookie za ID token),
Batman auth používá PUT /nginx/introspect/batman
(který vyměňuje Seacat klientské cookie za základní autentizační hlavičku).
Příklad konfigurace¶
Nastavme autorizaci Seacat Batman pro naši aplikaci Kibana. Musíme mít aplikace Elasticsearch a Kibana spuštěné, stejně jako funkční instanci SeaCat Auth s Nginx reverzní proxy. Budeme muset nakonfigurovat tyto tři komponenty:
- Aktualizovat konfiguraci SeaCat Auth o sekci
[batman:elk]
, aby mohla používat Elasticsearch API pro synchronizaci uživatelů a správu jejich autorizace. - Vytvořit a nakonfigurovat Kibana klienta. Tento objekt klienta reprezentuje a identifikuje Kibana v komunikaci se SeaCat Auth.
- Připravit potřebné serverové lokace v konfiguraci Nginx.
Konfigurace SeaCat Auth¶
Vytvořte sekci ELK Batman a zadejte základní URL Elasticsearch a API přihlašovací údaje, např.
[batman:elk]
url=http://localhost:9200
username=admin
password=elasticpassword
Konfigurace klienta¶
Použijte API klienta SeaCat Auth (nebo Seacat Admin UI) k registraci Kibana jako klienta.
Tělo požadavku musí obsahovat čitelný client_name
, pole redirect_uris
obsahující URL webového rozhraní Kibana
a cookie_entry_uri
pro vaše hostname (tuto lokaci definujeme v konfiguraci Nginx níže).
Doporučujeme také nastavit redirect_uri_validation_method
na prefix_match
, pokud chcete povolit okamžité přesměrování
na podcesty Kibana.
V našem případě můžeme poslat následující požadavek (nezapomeňte použít vaše skutečné hostname místo example.com
!):
POST /client
{
"client_name": "Kibana",
"redirect_uri_validation_method": "prefix_match",
"redirect_uris": [
"https://example.com/kibana"
],
"cookie_entry_uri": "https://example.com/seacat_auth/cookie"
}
Server odpoví s ID přiděleným našemu klientovi a dalšími atributy:
{
"client_id": "RZhlE-D4yuJxoKitYVL4dg",
"client_id_issued_at": 1687170414,
"application_type": "web",
...,
"cookie_name": "SeaCatSCI_QLFLEAU4D726UPA3"
}
V dalším kroku použijeme client_id
a client_cookie
.
Konfigurace Nginx¶
Minimální konfigurace vyžaduje definici následujících tří lokalit v nginx:
- Lokalita klientské stránky: Ochráněná veřejná lokalita s webovou aplikací Kibana.
- Introspekce klienta: Interní koncový bod používaný direktivou nginx
auth_request
. - Vstupní bod pro cookies klienta: Veřejný koncový bod, který vydává Seacat klientské cookie na konci úspěšného toku autorizace.
Lokalita klientské stránky¶
location /kibana/ {
# Kibana upstream
proxy_pass http://kibana_api;
# Auth introspekční koncový bod
auth_request /_kibana_introspection;
# Předat Batman hlavičku získanou z introspekce SeaCat Auth do Kibana
auth_request_set $auth_header $upstream_http_authorization;
proxy_set_header Authorization $auth_header;
# V případě, že introspekce zjistí neplatnou autorizaci, přesměrovat na OAuth autorizační koncový bod
# !! Použijte skutečné client_id vašeho klienta a skutečné hostname vašeho webu !!
error_page 401 https://example.com/auth/api/openidconnect/authorize?response_type=code&scope=cookie%20batman&client_id=RZhlE-D4yuJxoKitYVL4dg&redirect_uri=https://example.com$request_uri;
# Hlavičky požadované Kibana
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
Introspekce klienta¶
location = /_kibana_introspection {
internal;
# Seacat Auth Batman introspekční upstream
# !! Použijte skutečné client_id vašeho klienta !!
proxy_method POST;
proxy_pass http://seacat_auth_api/nginx/introspect/batman?client_id=RZhlE-D4yuJxoKitYVL4dg;
proxy_set_header X-Request-URI "$request_uri";
proxy_ignore_headers Cache-Control Expires Set-Cookie;
# Cache odpovědi introspekce
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_cache kibana_auth;
# !! Vyplňte skutečné cookie_name vašeho klienta !!
proxy_cache_key $cookie_SeaCatSCI_QLFLEAU4D726UPA3;
proxy_cache_lock on;
proxy_cache_valid 200 10s;
}
Vstupní bod pro cookies¶
Musí být umístěn na stejném hostname jako chráněná lokalita klienta. Měl by být vystaven jeden vstupní bod pro cookies na hostname, sdílený všemi klienty založenými na cookies na tomto hostname.
location = /seacat_auth/cookie {
# Seacat Auth cookie vstupní upstream
proxy_method POST;
proxy_pass http://seacat_auth_api/cookie/entry;
# Přenést OAuth autorizační kód z dotazu do těla požadavku
# !! Použijte skutečné client_id vašeho klienta !!
proxy_set_header Content-Type "application/x-www-form-urlencoded";
proxy_set_body $args;
}