redact-secret · Report
Service account token
glsa_ prefixed service account token.
Research record
2 events in the review history: 1 observed, 1 reviewed. Latest: observed on 2026-09-23 by automation, project maintainer. Project-maintained review is not independent validation. The family record at this release.
Format
What it looks like
- Descriptive pattern
^glsa_[A-Za-z0-9]{32}_[0-9A-Fa-f]{8}$
Parts are shown as recorded. Evidence classes belong to the facts below; no class is assigned to a part.
Format facts
Provider documented ·
provider-source· current · observed 2026-09-23glsa service-account token prefix: Grafana states that service account tokens carry a glsa prefix; the delimiter, segment lengths, alphabet and checksum placement remain tool-corroborated
- grafana.com/blog/new-in-grafana-9-1-service-accounts-are-now-ga/provider-documentation · last read 2026-09-23 · latest outcome read · supports Grafana states that service account tokens carry a glsa prefix; the delimiter, segment lengths, alphabet and checksum placement remain tool-corroborated
Tool corroborated ·
tool-corroboration· current · observed 2026-09-23Pinned scanner rules are consistent with the contract grammar (2 artifacts: gitleaks 8.30.1; trufflehog 3.97.4).
- gitleaks/gitleaks @ v8.30.1: config/gitleaks.tomlscanner-rule-source · last read 2026-10-04 · latest outcome read · supports gitleaks 8.30.1: gitleaks.toml
- trufflesecurity/trufflehog @ v3.97.4: pkg/detectors/grafanaserviceaccount/grafanaserviceaccount.goscanner-rule-source · last read 2026-09-23 · latest outcome read · supports trufflehog 3.97.4: grafanaserviceaccount/grafanaserviceaccount
Provider documented ·
dossier-research· current · observed 2026-09-23Legacy dossier research (verdict ready, tier T1) cited 2 sources; the dossier does not attribute sources to individual properties.
- redact-secret/redact-secret @ 8b6a5fde52ecb4dfce13f09c7a947062d21483c7: docs/audits/evidence/642/README.mdproject-research-note · last read 2026-09-23 · latest outcome read · supports Final research evidence recorded by the legacy dossier
- grafana.com/blog/new-in-grafana-9-1-service-accounts-are-now-ga/provider-documentation · last read 2026-09-23 · latest outcome read · supports Cited by the legacy dossier research for this family
Open questions
No open question is recorded for this revision.
Benchmark dossier notes
- Shape
- literal
glsa_, 32 alphanumeric characters, a second_, then an 8-character hexadecimal checksum, 46 characters in all. - Basis
- T1 for the prefix and the existence of a checksum: Grafana's 9.1 service-accounts announcement says tokens can be identified by a "glsa" prefix and that a checksum was added. It gives no length. The two
_separators, the 32/8 split and the checksum alphabet come from gitleaks 8.30.1, with trufflehog's Grafana detector agreeing on theglsa_shape. - Contract in core
- detector-families.md.
In this benchmark
- Fixtures
- 36
- Left readable
- 0
- Redacted too much
- 0
- False alarms
- 0
36 fixtures: 17 expect a redaction, 19 must stay quiet. See every row
| Evidence level | Fixtures | Left readable | Too much | False alarms |
|---|---|---|---|---|
| T1Provider-documented | 17 | 0 | 0 | 0 |
| T2Tool-corroborated | 15 | 0 | 0 | 0 |
| T3Project policy | 4 | 0 | 0 | 0 |
Every scanner on the same fixtures
In run order. Counts are what each scanner recorded on this family's fixtures, whichever rules it has; a scanner with no rule for the family has nothing to report on it.
| Scanner | Fixtures | Left readable | Too much | False alarms |
|---|---|---|---|---|
| flare-redactRuntime library · 1.6.1 · Published npm package · secrets-only (pii, generic_assignment disabled) · JavaScript engineNo rule maps to it | 36 | 15 | 1 | 0 |
| gitleaksRepository scanner · 8.30.1 · Directory scan · default rules1 rule targets it | 36 | 0 | 0 | 0 |
| redact-secretProduct measured here · 0.1.0-beta.14 · Published npm package · default detectors1 detector mapped | 36 | 0 | 0 | 0 |
| trufflehogRepository scanner · 3.97.4 · Filesystem scan · verification disabled1 rule targets it | 36 | 17 | 0 | 0 |
Benchmark dossier questions
- Open caveat
- Provider text gives only the glsa prefix and that a checksum exists; separators, segment widths and the checksum alphabet are tool-corroborated (T2).
Looks like it, but isn't
- Collisions
- the legacy API key is a base64-encoded JSON object and is a different credential.
Scanner rules for this family
| Scanner | Rule | What the rule matches |
|---|---|---|
| gitleaks · rules 8.30.1 | grafana-service-account-token | glsa_ + 32 characters + _ + 8 hex |
| trufflehog · rules 3.97.4 | grafanaserviceaccount | glsa_ + 41 characters |
No rule maps to this family in flare-redact, openredaction.
Fixtures in this family
| Fixture | Kind and evidence | redact-secret |
|---|---|---|
grafana-service-account-token-bomgrafana · multibyte-text-offsets | Must redactT1 · Provider-documented | Redacted |
grafana-service-account-token-checksum-segment-baregrafana · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
grafana-service-account-token-checksum-segment-quotedgrafana · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
grafana-service-account-token-checksum-segment-unicode-crlfgrafana · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
grafana-service-account-token-compose-renderer-envgrafana · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
grafana-service-account-token-env-service-account-tokengrafana · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
grafana-service-account-token-github-actions-dashboardsgrafana · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
grafana-service-account-token-http-api-bearergrafana · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
grafana-service-account-token-jsongrafana · structured-text-value | Must redactT1 · Provider-documented | Redacted |
grafana-service-account-token-markdowngrafana · markdown-and-comment-value | Must redactT1 · Provider-documented | Redacted |
grafana-service-account-token-no-final-newlinegrafana · value-at-input-edges | Must redactT1 · Provider-documented | Redacted |
grafana-service-account-token-pythongrafana · source-code-string-literal | Must redactT1 · Provider-documented | Redacted |
grafana-service-account-token-python-requests-clientgrafana · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
grafana-service-account-token-single-quotesgrafana · quoted-value-extent | Must redactT1 · Provider-documented | Redacted |
grafana-service-account-token-terraform-providergrafana · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
grafana-service-account-token-tomlgrafana · structured-text-value | Must redactT1 · Provider-documented | Redacted |
grafana-service-account-token-yamlgrafana · structured-text-value | Must redactT1 · Provider-documented | Redacted |
grafana-service-account-token-audit-token-hash-encoded-valuegrafana · benign-encoded-value | Must not flagT2 · Tool-corroborated | Quiet |
grafana-service-account-token-bom-twingrafana · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
grafana-service-account-token-checksum-segment-bare-twingrafana · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
grafana-service-account-token-checksum-segment-quoted-twingrafana · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
grafana-service-account-token-checksum-segment-unicode-crlf-twingrafana · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
grafana-service-account-token-json-twingrafana · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
grafana-service-account-token-label-prosegrafana · benign-lookalike | Must not flagT3 · Project policy | Quiet |
grafana-service-account-token-markdown-twingrafana · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
grafana-service-account-token-maskgrafana · benign-lookalike | Must not flagT3 · Project policy | Quiet |
grafana-service-account-token-missing-separatorgrafana · benign-lookalike | Must not flagT2 · Tool-corroborated | Quiet |
grafana-service-account-token-no-final-newline-twingrafana · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
grafana-service-account-token-python-twingrafana · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
grafana-service-account-token-referencegrafana · benign-lookalike | Must not flagT3 · Project policy | Quiet |
grafana-service-account-token-rotation-note-prosegrafana · prose-mention | Must not flagT3 · Project policy | Quiet |
grafana-service-account-token-service-account-listing-public-idgrafana · public-identifier | Must not flagT2 · Tool-corroborated | Quiet |
grafana-service-account-token-short-checksumgrafana · benign-lookalike | Must not flagT2 · Tool-corroborated | Quiet |
grafana-service-account-token-single-quotes-twingrafana · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
grafana-service-account-token-toml-twingrafana · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
grafana-service-account-token-yaml-twingrafana · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
Sources
Documentation and code
- grafana.com/blog/new-in-grafana-9-1-service-accounts-are-now-ga/
Research log
- redact-secret/redact-secret#305Research issue
- redact-secret/redact-secret#642Research issue
- Final evidence, pinned to a commit/redact-secret/redact-secret/blob/8b6a5fde52ecb4dfce13f09c7a947062d21483c7/docs/audits/evidence/642/README.md