=== Admin endpoints and Admin Console {project_name} exposes the administrative REST API and the web console on the same port as non-administrative usage by default. Do not expose administrative endpoints externally if external access is not necessary. If you need to expose administrative endpoints externally, you can expose them directly in {project_name} or use a proxy. To expose endpoints by using a proxy, consult the documentation for the proxy. You need to control access to requests to the `{kc_admins_path}` endpoint. Two options are available in {project_name} to expose endpoints directly, IP restriction and separate ports. When the Admin Console becomes inaccessible on the frontend URL of {project_name}, configure a fixed admin URL in the default hostname provider. ==== IP restriction You can restrict access to `{kc_admins_path}` to only specific IP addresses. For example, restrict access to `{kc_admins_path}` to IP addresses in the range `10.0.0.1` to `10.0.0.255`. [source,xml,subs="attributes+"] ---- ... ... ... ... ---- You can also restrict access to specific IP addresses by using these CLI commands.: [source,bash,subs="attributes+"] ---- /subsystem=undertow/configuration=filter/expression-filter=ipAccess:add(,expression="path-prefix[{kc_admins_path}] -> ip-access-control(acl={'10.0.0.0/24 allow'})") /subsystem=undertow/server=default-server/host=default-host/filter-ref=ipAccess:add() ---- [NOTE] ==== For IP restriction using a proxy, configure the proxy to ensure {project_name} receives the client IP address and not the proxy IP address. ==== ==== Port restriction You can expose `{kc_admins_path}` to a different unexposed port. For example, expose `{kc_admins_path}` on port `8444` and prevent access to the default port `8443`. [source,xml,subs="attributes+"] ---- ... ... ... ... ... ... ... ---- You can expose `{kc_admins_path}` on port `8444` and prevent access to the default port `8443` by using CLI commands: [source,bash,subs="attributes+"] ---- /socket-binding-group=standard-sockets/socket-binding=https-admin/:add(port=8444) /subsystem=undertow/server=default-server/https-listener=https-admin:add(socket-binding=https-admin, security-realm=ApplicationRealm, enable-http2=true) /subsystem=undertow/configuration=filter/expression-filter=portAccess:add(,expression="path-prefix('{kc_admins_path}') and not equals(%p, 8444) -> response-code(403)") /subsystem=undertow/server=default-server/host=default-host/filter-ref=portAccess:add() ----