Workload identities

A workload identity lets an automated workload, such as a CI/CD pipeline, cloud service, or script, authenticate to BeyondTrust without a stored secret or API key.

Instead of issuing the workload a long-lived credential, you register the workload's existing OpenID Connect (OIDC) identity provider, such as GitHub Actions or Microsoft Entra ID, as a trusted issuer. At runtime, the workload presents the short-lived OIDC token it already receives from its own platform. BeyondTrust exchanges that token for a scoped BeyondTrust access token, but only if the token's claims match every condition you registered.

Benefits

  • No shared secrets: There is nothing to store in a pipeline, rotate on a schedule, or revoke when someone leaves. Trust is based on the identity provider, not on a copied credential.
  • Least privilege per workload: Each workload identity is limited to the sites you choose. On each site, you pick the products it can access, its access level, and the claim conditions it must meet. For example, you can allow only the main branch of a single repository.
  • Standards-based: Workload identities use OIDC token federation, the same model GitHub Actions and Microsoft Entra ID use for keyless cloud access.

Requirements

  • You must have the Organization Admin role to view, register, or delete workload identities.
  • You can only view and select sites that you administer.

Key terms

The table describes the terms used in this topic.

TermDescription
Workload identityA registered trust relationship between an external OIDC issuer and one or more of your sites.
Identity provider typeThe type of external issuer: GitHub Actions, Azure Entra ID, or Custom IDP.
Issuer URLThe iss value in the identity provider's tokens, for example https://token.actions.githubusercontent.com. Must use HTTPS.
Service nameA name for the workload identity. The workload sends this value in the X-BT-Service-Name header when it requests a token.
Claim conditionsRules that BeyondTrust checks against the claims in the workload's token. A token is accepted only if it matches all conditions, for example repository = my-org/my-repo and ref = refs/heads/main.
Product scopesThe BeyondTrust products the workload identity can access on a site. You set these for each site, and each site needs at least one.
Access levelStandard access or Administrator access. You set this for each site.
Identity IDA unique ID that BeyondTrust generates when you register the workload identity. It becomes the subject (sub) of the access token the workload receives. A workload identity has one ID, no matter how many sites it's bound to.
SitesThe BeyondTrust sites the workload identity is bound to. The workload can only access these sites, using the products and access level set for each one.

How workload identities work

  1. Register the workload identity. An organization administrator registers the external issuer, chooses one or more sites, selects the products and access level for each site, and defines the claim conditions a valid token must meet. You only do this once per workload.
  2. The workload gets a token from its own platform. At runtime, the workload's platform, such as GitHub Actions, issues it a short-lived OIDC token.
  3. The workload calls BeyondTrust. The workload sends its OIDC token and its service name, in the X-BT-Service-Name header, to BeyondTrust.
  4. BeyondTrust exchanges the token. BeyondTrust checks the token against the matching workload identity. To pass, the token must come from a trusted issuer, match the site, and meet every claim condition. If the token passes, the workload receives a scoped BeyondTrust access token. If any condition fails, the request is denied.

Supported identity providers

The registration form changes based on the identity provider type you select.

GitHub Actions

  • The issuer URL is set automatically to https://token.actions.githubusercontent.com. You cannot change the URL.
  • Select a Repository (owner/repo), and then choose how to limit which workflows can authenticate:
    • Branch: Only workflows running on a specific branch, such as main
    • Environment: Only workflows running in a specific GitHub environment, such as production
    • Any: No branch or environment limit
  • Optionally, add the GitHub Organization ID and Repository ID. These numeric IDs don't change if the organization or repository is renamed, so matching stays reliable.
  • A sub condition is required and must start with repo:<owner>/<repo>.
  • Additional claim conditions can use only these GitHub claims: sub, repository, repository_owner, ref, job_workflow_ref, workflow_ref, environment, event_name, and actor.

Azure Entra ID

  • The issuer URL must use the format https://login.microsoftonline.com/<tenant-id>/v2.0.
  • Enter the Service Principal OID which is a globally unique identifier (GUID). This becomes the required sub condition.

Custom IDP

  • Use this option for any other OIDC-compliant identity provider.
  • Enter the issuer URL which must use HTTPS, and define the claim conditions. The form starts with a sub condition.
  • At least one condition must have a specific value. A condition that uses only * is not accepted on its own.

View workload identities

  1. From the console sidebar, go to Security > Workload Identities.

  2. Review the list of registered workload identities. The list shows the following columns:

    • ID
    • Service Name
    • Issuer URL
    • Identity Provider
    • Sites: Shows up to two site names, followed by +N if there are more
    • Registered Scopes: The products the workload identity can access across all of its sites
    • Conditions: Shows up to three claim names, followed by +N if there are more, or None if there are no conditions
  3. To narrow the list, use the All Sites and All Providers filters.

  4. To see all details for a workload identity, expand its row. The details include each site with its products, the description, and the full claim conditions.

In the details view, a condition set to only * shows as Any (no constraint) with a warning icon. A value that ends in * shows a wildcard badge.

Register a workload identity

  1. From the console sidebar, go to Security > Workload Identities.

  2. Click Register New Workload Identity.

  3. Select an Identity Provider Type. The form displays after you select a type.

  4. Enter a Service Name, such as secrets-deploy or ci-pipeline. The workload sends this value in the X-BT-Service-Name header.

  5. Enter or confirm the Issuer URL. For GitHub Actions, this is filled in for you.

  6. Complete the provider-specific fields:

    • GitHub Actions: Select the repository and the branch, environment, or Any.
    • Azure Entra ID: Enter the Service Principal OID.
    • Custom IDP: Enter your claim conditions.
  7. (Optional) Add more claim conditions under Additional Claim Conditions. For each condition, enter the claim name and a comma-separated list of allowed values. To add another row, click Add condition.

  8. Under Site access, add a site for each site the workload needs to reach. For each site, complete the following:

    • Products: Select the products the workload can access on this site. The list shows only the products available on that site.
    • Access level: Select Standard access or Administrator access. Administrator access gives the workload administrator access to that site.

    You must add at least one site, and select at least one product for each site.

  9. (Optional) Enter a Description.

  10. Click Register Workload Identity.

A confirmation message shows the details of the new workload identity. Click Register another to add another workload identity, or click Done.

To cancel registration, click Discard. If you have unsaved changes, you are prompted to confirm.

Test your claim conditions

For GitHub Actions and Custom IDP, the registration form includes a Token preview panel. Use it to confirm your conditions are correct before your workload tries to authenticate.

  • Sample payload: Shows an example decoded token that meets all the conditions you entered. Click Copy JSON to copy it.
  • Validate a token: Paste a real token from your workload, and then click Validate token. The result for each condition is one of the following:
    • Matched: The claim is present and its value matches.
    • Present but no match: The claim is present, but its value doesn't match.
    • Not present: The claim isn't in the token.

You can also generate a sample passing or failing token to see how validation works.

Change a workload identity

You can't edit a workload identity in the console. To change it, including adding or removing a site, delete the workload identity and register a new one.

Important

Deleting a workload identity removes its access on every site immediately. Plan the change so your workload isn't interrupted.

Delete a workload identity

  1. From the console sidebar, go to Security > Workload Identities.
  2. Find the workload identity, and then click Delete.
  3. In the Remove Workload Identity dialog, confirm the deletion.

Important

Any services using the workload identity lose access on every site it's bound to, immediately. This can't be undone.

Validation rules

BeyondTrust checks the rules listed in the table when you register a workload identity.

FieldRule
Issuer URLMust be a full https:// URL.
Service nameUp to 64 characters. Letters, numbers, periods (.), underscores (_), and hyphens (-) only.
SitesAt least one site is required. You can't add the same site twice.
Product scopesAt least one is required for each site.
Claim condition values (all providers)Can't be empty. Up to 256 characters. Can include one *, only as the last character.
GitHub Actionssub condition is required and must start with repo:<owner>/<repo>. Only supported GitHub claims are allowed. Values can contain letters, numbers, and : / - _ . * @.
Azure Entra IDIssuer URL must use the format https://login.microsoftonline.com/<tenant-id>/v2.0. A sub condition (the Service Principal OID) is required.
Custom IDPAt least one condition must have a specific value, not only *.
UniquenessThe service name must be unique within each site you choose. Service names aren't case-sensitive. The registration is rejected if any of the sites already has a workload identity with the same service name.
SitesEvery site must belong to your organization.

There is no limit to the number of workload identities you can register for a site or organization.

Troubleshooting

The workload is denied when it requests a token

This is usually caused by a claim condition that doesn't match. Get a real token from the workload, and then use Validate a token in the Token preview panel to see which condition failed.

I can't see the Workload Identities page

Confirm that you have the Organization Admin role. If you still can't see the page, contact BeyondTrust Technical Support.

I need to change the issuer URL or service name

These fields can't be changed. Delete the workload identity and register a new one. Access is removed as soon as you delete the workload identity.

I need to add or remove a site

In the console, delete the workload identity and register it again with the sites you need. Access is removed on every site as soon as you delete it, so plan for a short interruption.

Authentication stopped working after a GitHub repository was renamed

Add the numeric GitHub Organization ID and Repository ID to the workload identity. These IDs don't change when a repository or organization is renamed.


©2003-2026 BeyondTrust Corporation. All Rights Reserved. Other trademarks identified on this page are owned by their respective owners. BeyondTrust is not a chartered bank or trust company, or depository institution. It is not authorized to accept deposits or trust accounts and is not licensed or regulated by any state or federal banking authority.