> ## Documentation Index
> Fetch the complete documentation index at: https://help.dsalta.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Harness

> CI/CD platform — users & access

<Tabs>
  <Tab title="Overview">
    Connect Harness with a personal API token to sync account users and projects, and run access reviews. Read-only.

    <Info>
      **Read-only access.** DSALTA only reads data from this integration. It never creates, modifies, or deletes anything in your environment, and every remediation step is performed by your team directly in the third-party product.
    </Info>

    <Info>
      **What you'll see.** The Access page lists every **user** of your Harness account with their name, email and the names of the roles Harness reports for them, whatever scope those assignments are at, or **Member** when none. A user Harness reports as **locked** or **disabled** is shown as **Inactive**, with that state noted beside the role, and users managed through SCIM are marked **(SCIM)**. Harness does report per-user two-factor authentication, so the **MFA** column shows **Yes** or **No**, and **Unknown** for a user whose two-factor state Harness omits. The MFA check counts an omitted state as not enabled. Harness reports no join date, so each row is stamped with the date of the sync.
    </Info>

    <Note>
      DSALTA collects this integration's data when you connect it — you can refresh it at any time with **Sync from integrations** on the **Integrations** page. The compliance checks below re-run once a day at 02:00 America/New\_York.
    </Note>

    ## What DSALTA reads

    DSALTA reads the Harness account user roster — names, emails, role assignments, locked and disabled state, SCIM management and two-factor state — which appears on your **Access** page; and your Harness **projects**, which appear on your **Inventory** page with their organization and enabled modules. Pipelines and executions are not read.

    It calls these Harness endpoints on `app.harness.io`, always with the account identifier taken from your token:

    * `/ng/api/user/currentUser` (used to validate the token)
    * `/ng/api/user/aggregate` (a POST that Harness uses to list users with their roles)
    * `/ng/api/projects`

    Every request is a read of your account's configuration. DSALTA has no code path that creates, modifies, or deletes anything in your Harness environment.

    ## Troubleshooting

    <AccordionGroup>
      <Accordion title="The connection is rejected">
        The token must be in the four-part form `pat.<accountId>.<keyId>.<secret>` — DSALTA reads the account identifier from the second segment, so a truncated token is rejected. Expired tokens fail the same way: create a new token and connect again.
      </Accordion>

      <Accordion title="The Access page shows fewer users than the console">
        A personal token inherits the permissions of the user who created it. Create it as a user whose account-level role can view users, then disconnect and connect again. Note that disconnecting permanently deletes the data already collected from Harness.
      </Accordion>
    </AccordionGroup>

    <AccordionGroup>
      <Accordion title="How do I check whether the connection is healthy?">
        Open **Integrations** in the DSALTA sidebar, stay on the **Connected** tab, and click **Manage** on the integration's card. Open the **Status** tab: it shows either **Connected and working properly** or **Connection issues detected**.

        Use the **Status** tab, not **Overview** — Overview always reports **Connected** regardless of the real state.
      </Accordion>

      <Accordion title="A check shows Failed and nothing changed on my side">
        On an integration-powered check, **Failed** normally means DSALTA was blocked rather than that you are non-compliant. Open the test, go to **Source Data**, and read the result code: **403** is a missing permission, **428** is a setting DSALTA still needs, **500** is a failure on DSALTA's side.

        A real compliance gap shows **207** and leaves the test looking **Completed**. See [Understanding Test Results](/guides/compliance/test-results).
      </Accordion>

      <Accordion title="Data looks out of date">
        Compliance checks re-run once a day at 02:00 America/New\_York. To refresh sooner, open **Integrations → Connected** and click **Sync from integrations** at the top right — it refreshes every connected integration at once.
      </Accordion>

      <Accordion title="How do I repair a broken connection?">
        There is no Reconnect, Repair or Refresh Token button. The only repair available is to disconnect and connect again.

        <Warning>
          **Disconnecting is destructive and cannot be undone.** DSALTA removes the access records, inventory, vulnerabilities, code changes, incidents and device records collected from this integration, and deletes the test results tied to the connection. Export anything you still need as audit evidence first — see [Integration errors](/troubleshooting/integration-errors).
        </Warning>
      </Accordion>

      <Accordion title="Configure scope will not let me change anything">
        That is expected. **Configure scope** is read-only — it shows what DSALTA is permitted to read, and has no Save action. To change what DSALTA can see, change the permissions on the credential in the third-party product, then disconnect and connect again.
      </Accordion>
    </AccordionGroup>
  </Tab>

  <Tab title="How to connect">
    A Harness personal API token. The account is identified from the token automatically. Read-only.

    **Before you begin**

    * A Harness account, and a user in it whose role can view users and projects at account scope — the token acts as that user.

    You will need:

    | Field         | Where to find it                                      | Example                                        |
    | ------------- | ----------------------------------------------------- | ---------------------------------------------- |
    | **API Token** | Your user profile → **My API Keys → API Key → Token** | `pat.<accountId>.<keyId>.<secret>`, shown once |

    <Steps>
      <Step title="Start in DSALTA">
        Open **Integrations** in the DSALTA sidebar, find **Harness**, and click **Connect** to open the connect panel.
      </Step>

      <Step title="Open your profile's API keys">
        In [app.harness.io](https://app.harness.io), click your avatar at the bottom left to open your user profile, and find the **My API Keys** section.
      </Step>

      <Step title="Create an API key and a token">
        Select **API Key**, name it, then select **Token** under the new key and name that too. Pick an expiration — 30, 90 or 180 days, a custom date, or **No expiration** — and copy the token. It looks like `pat.<accountId>.<keyId>.<secret>`, and Harness states it "is only displayed once".

        <Info>
          If you set an expiration, the DSALTA connection fails when the token expires until you create a new token and reconnect. Choose a duration that matches how often you are prepared to rotate it, or **No expiration** if your policy allows it.
        </Info>
      </Step>

      <Step title="Connect Harness">
        Return to the connect panel, paste the token, and click **Connect**. The account is identified from the token automatically.
      </Step>
    </Steps>

    <Check>
      DSALTA validates the token when you click **Connect**, by reading the token's own user record. On success the integration moves to the **Connected** tab, and **Manage → Status** reads **Connected and working properly**. Checks begin reporting after the first sync.
    </Check>

    <Warning>
      **If the connection is rejected.** A truncated or expired token, or a token that is not in the personal `pat.` form.

      The on-screen message is generic — see [Connection error messages](/troubleshooting/connection-error-messages).
    </Warning>
  </Tab>

  <Tab title="Automated checks">
    Each check below re-runs once a day, at 02:00 America/New\_York, while this integration is connected. Click any check for step-by-step remediation guidance.

    | Check                                                                                                                  | Severity | What it verifies                                                                   |
    | ---------------------------------------------------------------------------------------------------------------------- | -------- | ---------------------------------------------------------------------------------- |
    | [User access to Critical System should be valid](/integrations/harness/user-access-to-critical-system-should-be-valid) | Info     | Checks that everyone with Harness access is an active employee on the People page. |
    | [Offboarded users should not have active access](/integrations/harness/offboarded-users-should-not-have-active-access) | High     | Checks that offboarded employees no longer have active Harness access.             |
    | [MFA should be enabled for all users](/integrations/harness/mfa-enabled-for-all-users)                                 | High     | Checks that every active Harness user has two-factor authentication enabled.       |
  </Tab>

  <Tab title="Useful links">
    | Topic       | Link                                                                                                                               |
    | ----------- | ---------------------------------------------------------------------------------------------------------------------------------- |
    | Setup       | [Manage API keys](https://developer.harness.io/harness-ai/use-harness-platform/automation/api/add-and-manage-api-keys)             |
    | Remediation | [Manage users](https://developer.harness.io/harness-ai/use-harness-platform/platform-access-control/add-users)                     |
    | Remediation | [Two-factor authentication](https://developer.harness.io/harness-ai/use-harness-platform/authentication/two-factor-authentication) |
    | General     | [Harness](https://app.harness.io)                                                                                                  |
    | DSALTA      | [Connection error messages](/troubleshooting/connection-error-messages)                                                            |
  </Tab>
</Tabs>
