Troubleshooting Web Access
The pages a browser gets from ISG when a web console cannot be opened or a request is not let through, quoted verbatim (the English text; the Hungarian one follows the browser's language), grouped by when they appear. Each refusal is also an audit line with its reason code — the line, not the page, says why. Search for the text on your screen.
Before the application opens
"You do not have access to this application through ISG."
- The user is in none of the application's
allow_groups, is on a reserved name, or — for anidentity: credentialapplication — nocredentialsentry matches the user's groups. The audit line isAPP_ACCESS_DENIEDwithreasonnot_in_group,reserved_usernameorno_credential. Check the user's groups in the directory and the application's lists; there is no default account.
"The sign-in link is invalid or has already been used. Open the application again."
- The one-time hand-off code expired (it is valid for 60 seconds), was used already, or was redeemed in a
different browser than the one that started the sign-in (
reasonhandoff_invalidorhandoff_unbound). Opening the application again from My applications starts a new hand-off. If it keeps happening, check that the browser keeps cookies for the application's host name between the redirects.
"An administrator locked this access (your account or the application)."
- A lock is in place for the user or the application (
reasonlocked);isg lock listshows it, with its reason and end. Lifting it isisg lock rm.
"The ISG license does not allow new Web Access sessions. Ask your administrator."
- The license in force does not allow a new Web Access session for this user; open sessions are not affected.
isg licenseshows what is in force.
"Approval required" / "Waiting for approval" / "The request was denied"
The application asks for a four-eyes approval (require_approval). The user picks a duration and sends the request;
an approver decides on the web UI's approvals page. "Waiting" refreshes by itself; a pending request expires after
approval_timeout_seconds. "Denied by …" quotes the approver's reason. With approval_mode: self the page is
"Justification required" instead: the justification has to meet approval_reason_min_len and
approval_reason_pattern.
"No application of this name is configured on this gateway."
404 on the web UI's hand-off: the application in the link does not exist on this broker — usually an apps.yaml
that differs between the brokers, or a dynamic application that was deleted. A host name the listener does not know
at all gets a bare 421.
"The directory is currently unavailable. Try again later."
- The directory could not be asked for the user's groups; Web Access does not let a request through on a guess.
The
ldap_bindrow ofisg system checknames the cause.
While the application is open
"This operation is denied by an ISG rule: …"
- A
denyrule ofhttp_rulesmatched the request (APP_REQUEST_DENIED, with the rule); the application never saw it and the session stays. The text after the colon is the rule's ownreason; the audit line names the rule.
"This request is not among the application's allowed requests (allow-list mode)."
- The application is in
http_app_modesmodeallow, and noallowrule matched (rulehttp_mode:allow). Run the application inallow_auditfor a while: theAPP_REQUEST_WOULD_DENYlines list what the allow rules miss.
"This operation needs a fresh verification. Open this address in the browser, verify, then repeat the operation: …"
403 for a request that is not a page load (a form post, an API call), with the address also in the X-ISG-Step-Up
header: a step_up rule wants the second factor again. Open the address, confirm the code, then repeat the
operation. A page load goes to the confirmation page by itself.
"An administrator closed this Web Access session. Open the application again; …"
- The session was closed from the web UI or with
isg sessions close. Opening the application again starts a new session; an application with approval needs a new request.
"The application's session had expired; ISG signed in again. Send the request again."
409, for a kind: form account. The console's own session had ended; ISG signed in again, repeated a GET or
HEAD by itself, but does not repeat a modifying request behind the user's back. Sending it again works. If this
appears at regular intervals (every 10 minutes on Grafana), the console was not signing out but rotating its token:
add the string its 401 body carries to logged_out.unless_body_contains (see
preparing a web console).
"ISG could not sign in to the application with the brokered account. Tell your administrator; the reason is in the broker's log."
502, for a kind: form account. The recipe's sign-in did not succeed; APP_UPSTREAM_LOGIN_FAILED names why:
status (the last step's status is not in success.status), success_cookie (the named cookie was not set),
success_redirect, extract (a token rule found nothing — the login page changed), timeout, transport (the
upstream is not reachable from the broker), secret (the OpenBao entry lacks username or password). Signing
in by hand with the same account on the console's own page tells a wrong password from a wrong recipe.
"Temporarily unavailable"
503, with one of these texts — in every case the request was not let through, because Web Access fails closed:
- "The application's credential cannot be read from the ISG secret store right now, …" — OpenBao is not reachable,
sealed, or the broker's token cannot read the path. The
Web Access credentialsrow ofisg system checknames the account and the HTTP status (a 403 there is the token's policy). - "The ISG policy file cannot be loaded right now, …" —
policy.yamldoes not load on this broker; thepolicy.yamlrow says why. Astep_uprule on a broker older than v0.548.0 is the known case. - "ISG cannot record requests right now, …" — the transcript cannot be written: the record store or the state root.
The console shows its own error
The page is the console's, not ISG's (it has the console's look). The request reached the console with the identity
ISG added: check what the console thinks of that identity — the account's rights for identity: credential, the
role_map for identity: jwt. The session's transcript (web UI, Sessions) shows each request's status as the
console answered it.
isg system check rows
Web Access listener
not listening on … — the listener did not start (the port is taken, or the certificate does not load).
not covered: … — a host (or the dynamic apps domain's wildcard) is missing from the certificate's SANs.
rejected at … — a certificate reload was refused and the previous certificate is still served.
Web Access credentials
N of M account(s) unreadable: <app>/<account>: … — those accounts' secrets cannot be read; a request through them
would get the "credential cannot be read" page. not measured: apps.yaml does not load points at the apps.yaml row.