What this check does
DSALTA lists the users of your Harness account (POST /ng/api/user/aggregate), keeps those who are neither locked nor disabled, and reads each one’s two-factor flag. Any active user whose flag is not set fails the check, and users for whom Harness reports no value count as not enabled rather than being skipped.
This check also runs on 19 other integrations — see MFA should be enabled for all users for the full list.
Passes when: Every active Harness user has two-factor authentication enabled.
This check reads the live user list on every run, not the Access page. Locked and disabled users are not evaluated. If Harness returns no active users at all, the run ends in an error rather than a pass, so a broken token is never mistaken for full coverage.
Why this matters
Every account on the organization’s CI/CD platform must be protected with multi-factor authentication. A Harness user can trigger pipelines and read the connectors and secrets those pipelines use, so a password alone on any user is a path into production deployments.How to fix
Enforce two-factor authentication in Harness- Sign in to app.harness.io as an account administrator, and enable two-factor authentication on your own profile first — Harness prompts you to protect your own login before it lets you enforce it.
- Open Account Settings → Authentication, toggle Enforce Two Factor Authentication on, and select Confirm. Every user is then required to set it up at their next sign-in.
- Ask each flagged user to enrol now rather than waiting: they click their user profile icon at the bottom left, toggle Two-Factor Authentication on, and scan the QR code in the Enable Two-Factor Authentication dialog with an authenticator app.
- Re-run this check from Data Library → Tests and read the list of users still without two-factor on the Source Data tab.
- Lock or remove any user who will not enrol and no longer needs Harness access, from Account Settings → Access Control.
Frequently asked questions
How often does this check run?
How often does this check run?
Once a day, at 02:00 America/New_York, while the integration is connected. A run is skipped entirely if the integration is not in a connected state, or if the test has been deactivated.To see a fix reflected sooner, open the test from Data Library → Tests and click Run in the Run Test row. You need Full Access to run a test on demand.
What does the status actually tell me?
What does the status actually tell me?
The Status column answers “did the check run?”, not “did I pass”. Completed means DSALTA reached your system and finished evaluating — a check that ran and found a problem is still Completed.To see what it found, open the test and read the result code on the Source Data tab. 200 means nothing to fix; 204 means the check did not apply to your environment; 207 means it ran and found a compliance gap you need to act on. See Understanding test results.
The check shows Failed. Does that mean I am non-compliant?
The check shows Failed. Does that mean I am non-compliant?
Usually not. On an integration-powered check, Failed means DSALTA was blocked and could not evaluate it — result code 403 (a missing permission) or 428 (a setting DSALTA still needs from you). Code 500 means the run failed on DSALTA’s side.A genuine compliance gap does not turn the list red — it runs to completion and shows 207.
What if this check does not apply to us?
What if this check does not apply to us?
Deactivate it: open the test from Data Library → Tests, then use the ⋮ menu at the top right of the panel and choose Deactivate Test. It applies immediately, with no confirmation step.Write your justification in the Comments tab before you deactivate. Once deactivated, every other tab is grayed out, so Comments is the only place an auditor can read why — see Test detail.
Does DSALTA change my configuration?
Does DSALTA change my configuration?
No. DSALTA only reads. It never creates, modifies, or deletes resources, and every remediation step is performed by your team directly in the third-party product.
.png?fit=max&auto=format&n=tsMQJyneJ1xquFUo&q=85&s=4d401cc03b547d99b6f75a6bd170c334)