A secrets manager protects every other credential, but the token an application uses to reach it is itself a secret, and when that token leaks the attacker gets the whole vault it can read. Doppler service tokens, 1Password service account tokens and Infisical machine identity credentials are the "secret zero" of many modern stacks: they sit in CI variables, Kubernetes secrets, .env files and container environments, often with no expiry and broad read access. This guide explains how each product models machine access, which token types exist and what they can reach, the options for scoping, expiry and network restriction, how leaked tokens are detected, and a hardening baseline. It is for platform, DevOps and security engineers who run these tools. For the wider discipline see the Secrets Management Guide and the Secrets Zero Problem Guide.
Key takeaways
- Use the machine identity type, not a person's token. Doppler personal and CLI tokens carry their creator's permissions and write access; use service tokens or service accounts. Infisical has deprecated service tokens in favour of machine identities.
- Scope is decided at creation. A 1Password service account's vaults and permissions cannot be extended after creation, and a Doppler service token is bound to one config; design narrow tokens per workload and environment.
- Defaults are permissive. Infisical Universal Auth client secrets never expire and accept any source IP by default; 1Password and Doppler tokens have no expiry unless you set one.
- Federate where you can. Doppler service account identities and Infisical's cloud and OIDC auth methods swap a stored secret for a short-lived token proved by the platform's own identity.
- Detection is uneven. Doppler tokens have distinct prefixes and GitHub partner coverage with validity checks; 1Password service account tokens are detected by GitHub only in private repositories with Advanced Security; Infisical has no GitHub pattern at all.
How identity and access work in Doppler, 1Password and Infisical
| Aspect | Doppler | 1Password | Infisical |
|---|---|---|---|
| Machine identity types | Service token (one config); service account (multiple projects, roles); service account identity (OIDC, short-lived) | Service account; Connect server (self-hosted, separate model) | Machine identity (project or organisation level) with auth methods; legacy service tokens deprecated |
| Token format | dp.st. service, dp.sa. service account, dp.said. identity, plus dp.pt., dp.ct., dp.scim., dp.audit. | ops_ followed by a base64url serialised JWT | Universal Auth client ID and client secret exchanged for an access token; legacy service tokens start st. |
| What the token holds | Bearer credential for API access | Account Unlock Key, SRP value and keyset, so it can decrypt vault data; generated on the device | Client secret used to obtain access tokens |
| Default access | Service token read-only, write optional | READ or WRITE per vault chosen at creation | Role per identity: built-in Viewer, Member or custom |
| Expiry | Optional; CLI --max-age for ephemeral tokens | Optional, for example --expires-in 24h | Client secret TTL default 0 (never); access token TTL and max TTL configurable |
| Network restriction | Not covered here | Not covered here | Trusted IPs for client secret and access token (paid tier) |
The 1Password design point deserves emphasis: because the service account token contains key material, possession of the token is enough to decrypt the vaults it was granted. 1Password generates it on the creating device and never sends it to its servers, so storage and protection are entirely the customer's responsibility.
Admin roles and privileged access
- Doppler: creating service accounts needs the Admin role or the Manage Service Accounts permission, and service accounts require a Team or Enterprise plan. New service accounts start with no workplace role; grant project access per project and environment from the project's Members tab. Treat Admin and Manage Service Accounts as privileged roles and review them.
- 1Password: an administrator must give a user permission to create and manage service accounts. The creator can only grant access to vaults they can access themselves, and a vault can be configured to refuse service accounts entirely; switching this off removes access for existing service accounts. Service accounts cannot reach Personal, Private, Employee or the default Shared vault, cannot create other service accounts and cannot manage users.
- Infisical: organisation identities are created centrally and added to projects; project identities live in one project. Whoever can create identities or attach auth methods can mint credentials, so restrict the organisation admin role and use custom roles for machine identities.
- Human tokens are privileged too: Doppler personal (
dp.pt.) and CLI (dp.ct.) tokens act with the full permissions of the person who created them. Doppler's own documentation advises against using them in live environments.
Keep a vault or project dedicated to production machine secrets, so a token for a staging workload cannot read production. See the OWASP NHI Top 10 NHI8 Environment Isolation Guide.
Integrations, API tokens and service accounts
Choosing the right credential
| Situation | Doppler | 1Password | Infisical |
|---|---|---|---|
| One app, one environment, read only | Service token on that config, read-only, with expiry | Service account with READ on one vault | Machine identity with Viewer-style custom role on one project and environment |
| CI pipeline on GitHub or GitLab | Service account identity via OIDC (doppler oidc login or the secrets fetch action) | Service account token in the CI secret store, short expiry, rotated | OIDC or platform auth method where available; Universal Auth with short TTLs otherwise |
| Kubernetes workloads | Kubernetes Operator, with OIDC where supported | Service account token in a Kubernetes secret, or Connect server | Kubernetes auth method |
| Cloud workloads (AWS) | OIDC via AWS IAM outbound identity federation | Service account token | AWS auth method |
| Writes or rotation automation | Service account with a write role scoped to one project | Separate service account with WRITE on one vault | Separate identity with a write role; never reuse the read identity |
Scoping and lifetime settings
- Doppler service tokens: one per config and consumer; set an expiry; for jobs, create ephemeral tokens with
--max-ageso they delete themselves. Revoking is immediate, but Doppler warns that the CLI's encrypted fallback file on disk can still expose the last fetched secrets, so clear fallback files on decommissioned hosts. - Doppler service account identities: require audience and subject claims, add claims such as GitLab's
environment, and avoid wildcards. The short-lived token returned byhttps://api.doppler.com/v3/auth/oidcshould not be persisted. - 1Password service accounts: plan vault grants carefully because they cannot be added later; create a new service account rather than widening an old one. Set
--expires-inand expose the token only asOP_SERVICE_ACCOUNT_TOKENin the process that needs it. Rate limits apply per token (on Business, 10,000 reads and 1,000 writes per hour) and per account per day (50,000 requests on Business), which also limits how fast a stolen token can be used for bulk export. - Infisical Universal Auth: change the defaults. Set a client secret TTL and a maximum number of uses, set an access token TTL and max TTL suited to the workload (the docs list a 30 day max TTL default), and set trusted IPs for both client secret and access token instead of
0.0.0.0/0. Migrate any remaining service tokens, which Infisical says will be removed in a future release.
Every product here can answer the secret zero problem the same way: let the workload prove who it is with an identity it already has (an OIDC token from the CI platform, a Kubernetes service account, a cloud role) instead of a stored secret. See the Workload Identity Federation Guide.
Logging and detection
Leak detection coverage
| Scanner | Doppler | 1Password service account token | Infisical |
|---|---|---|---|
| GitHub secret scanning | Six types (service, service account, personal, CLI, SCIM, audit): partner programme, push protection and validity checks | 1password_service_account_token: private repositories with GitHub Advanced Security, push protection, no validity check, not in the partner programme | No pattern |
| Gitleaks default rules | doppler-api-token matches personal tokens (dp.pt.) only | 1password-service-account-token (and 1password-secret-key for account Secret Keys) | No rule |
| TruffleHog | All Doppler prefixes, verified against /v3/me | Not checked here | Legacy st. service tokens, with verification |
Coverage was checked on 27 October 2026 against GitHub's pattern data, the Gitleaks default configuration and TruffleHog's detectors. Two practical consequences follow. First, a Doppler service token (dp.st.) committed to a repository scanned only by default Gitleaks will not be flagged; add a custom rule for all the documented prefixes. Second, Infisical Universal Auth client secrets have no distinctive format in these tools, so protect them with short TTLs, use limits and IP restrictions rather than relying on scanning. The 230 Million AWS Cloud Environments Campaign 2024 shows where these tokens leak in practice: publicly reachable .env files holding long-lived keys and API tokens.
What to monitor
- Token creation and deletion events in each product's activity or audit log, especially new tokens on production configs or vaults.
- Use from unexpected networks: source IPs outside your CI and runtime ranges.
- Volume anomalies: a read token suddenly listing every secret, or 1Password rate limit errors from a token that normally makes a few calls.
- Human tokens in automation: personal or CLI token use from servers.
- Stale credentials: tokens unused for 90 days.
Metrics
- Share of machine access using federated or short-lived credentials.
- Long-lived tokens with no expiry (target: trending to zero).
- Tokens with access to more than one environment.
- Mean time to revoke after a leak alert.
- Infisical identities still on default trusted IPs.
Hardening baseline
- Inventory: list every service token, service account and machine identity, with owner, workload, scope, expiry, creation date and last use. See the Service Account Inventory Template.
- Remove human tokens from automation: replace Doppler personal and CLI tokens on servers and CI with service tokens or service accounts.
- Federate CI first: pilot OIDC for one GitHub or GitLab pipeline (Doppler service account identities, or an equivalent Infisical auth method), confirm builds still fetch secrets, then delete the stored token. Keep the old token, with a short expiry, until the pipeline has run successfully for a release cycle.
- Narrow the rest: one credential per workload and environment, read-only unless writes are required, with expiry set.
- Restrict networks: use Infisical trusted IPs and, for all three, keep the secrets manager reachable only from the networks that need it where your deployment allows.
- Protect the token where it lives: CI secret stores with masking, Kubernetes secrets with RBAC limited to the consuming service account, no tokens in images, repositories or
.envfiles served by web servers. - Detect: enable push protection and add custom rules for
dp.st.,dp.sa.andops_where your scanner lacks them. - Rotate on a schedule and on events: roll Doppler service account tokens, rotate 1Password tokens and Infisical client secrets, and rehearse revocation so you know which workloads break.
A small team can complete steps 1, 2, 4 and 7 in a day. Larger organisations should standardise one pattern per platform (for example, OIDC for CI, Kubernetes auth for clusters) and block creation of non-expiring tokens through policy and review.
Framework mapping
| Control | NIST SP 800-53 Rev. 5 | NIST CSF 2.0 | OWASP Non-Human Identities Top 10 |
|---|---|---|---|
| Machine identities instead of personal tokens | IA-9, AC-2 | PR.AA-01 | NHI5 Overprivileged NHI |
| Expiry, rotation and revocation | IA-5 | PR.AA-01 | NHI7 Long-Lived Secrets |
| Scope per workload and environment | AC-6 | PR.AA-05 | NHI8 Environment Isolation |
| One credential per workload, never shared across apps | IA-9 | PR.AA-01 | NHI9 NHI Reuse |
| Leak scanning | SI-4 | DE.CM-09 | NHI2 Secret Leakage |
| Token use monitoring | AU-6, AU-12 | DE.CM-03 | NHI4 Insecure Authentication |
Reuse is the quiet failure here: when one Doppler service token or 1Password service account serves several applications, nobody can revoke it without breaking all of them, so it never gets revoked. See the OWASP NHI Top 10 NHI9 NHI Reuse Guide. The matching ATT&CK techniques are T1552.001 Credentials In Files, T1552.007 Container API and T1078 Valid Accounts.
Common misconfigurations
- A personal token in production: it works, so it stays, and when its owner leaves or is phished the attacker inherits their write access.
- One token for every environment: a staging leak exposes production secrets.
- Infisical defaults left on: client secrets that never expire, unlimited uses and
0.0.0.0/0trusted IPs. - Widening by sharing: because 1Password service account vault access cannot be extended, teams reuse an older broad service account instead of creating a narrow new one.
- Scanner gaps assumed away: relying on default Gitleaks rules that do not match Doppler service tokens or any Infisical credential.
- Revocation without cleanup: revoking a Doppler token but leaving the CLI fallback file, or leaving the old token in CI variables, images and backups.
Practitioner checklist
- Inventory every Doppler, 1Password and Infisical machine credential with owner, scope, expiry and last use.
- Replace personal and CLI tokens in automation with service tokens, service accounts or machine identities.
- Move CI and cloud workloads to OIDC or platform auth methods and delete the stored tokens.
- Issue one credential per workload and environment, read-only by default, always with an expiry.
- Change Infisical Universal Auth defaults: client secret TTL, use limits, token TTLs and trusted IPs.
- Keep production secrets in vaults or configs that non-production credentials cannot reach.
- Add scanner rules for
dp.st.,dp.sa.andops_and enable push protection. - Alert on token creation, use from unknown networks and unusual read volume.
- Rehearse revocation, including fallback files and copies in CI, images and backups.
Standards and references
- Doppler Docs: Service Tokens
- Doppler Docs: Auth Token Formats
- Doppler Docs: Service Account Identities
- 1Password Developer: Service account security
- 1Password Developer: Service account rate limits
- Infisical Docs: Machine Identities
- Infisical Docs: Universal Auth
- GitHub Docs: Supported secret scanning patterns
Related NHI Mgmt Group resources: Secrets Management Guide · Secrets Zero Problem Guide · HashiCorp Vault Guide · Cloud Secrets Managers Guide · Kubernetes Secrets Security Guide