Log in to your harness - The Modern Software Delivery Platform® account to give feedback

Feature Requests

Anonymous

Feature Requests for Harness. Select 'Category' based on the module you are requesting the feature for.
Per-step federated identity across all step types, with scoped ephemeral credentials
Extend HarnessID so that every pipeline step receives its own uniquely-claimed, short-lived JWT, and provide a supported mechanism to inject that JWT into a credential-minting service that exchanges it for an ephemeral, least-privilege credential scoped to exactly what that step needs (e.g., a Kubernetes token valid only for a single namespace, for the duration of the step). Problem Statement Insufficient process isolation on the delegate Harness delegates today execute pipeline steps within a shared execution context. Steps running natively on a delegate execute as separate JVM threads inside the same process, so serial and parallel executions share process state. Any misconfiguration, vulnerability, or inappropriate use of local resources can affect the security of other pipeline executions and deployments running on the same delegate. This risk is amplified by Harness capabilities that permit developer-authored inline code (shell/script steps) to run inside the delegate's context. Abuse of these features creates a credible privilege-escalation and confused-deputy path. Credentials are broader than the task requires Because credentials are resolved at the connector/delegate level rather than the step level, a step inherits the full entitlement of the connector or delegate identity — not the entitlement the individual task actually needs. A drift-detection step and a production-apply step reusing the same connector present identical identities to the cloud provider, so the trust policy must be written to the widest common denominator. Fragmented OIDC today Per the current design, OIDC is implemented per connector (AWS, GCP, Azure, Vault each with their own code path, token shape, and signing key), is unsupported for several connector types, and has no path at all outside a connector — meaning custom shell and container steps fall back to long-lived static secrets, defeating the purpose of federation. Requested Capability Per-step identity by default — Every step execution is issued its own JWT from HarnessID, with a distinct sub derived from account / org / project / pipeline / stage / step / execution ID. No two steps share a token. Configurable claims and subject template — Support subjectTemplate and customClaims declared at pipeline, stage, and step level, with closer-to-step precedence. Base claims (account, org, project, pipeline, execution) must be platform-stamped and non-overridable. Native (connector-less) identity — Allow YAML to declare named identities that surface as environment variables inside the step container, so custom shell/container steps can federate without a connector and without stored secrets. Token exchange for ephemeral scoped credentials — Provide a documented, supported flow to present the step JWT to a minting service (Kubernetes API, HashiCorp Vault, AWS STS, GCP STS, Azure AD) and receive a credential scoped to exactly that step's target — e.g., a namespace-bound Kubernetes ServiceAccount token, TTL bounded by step duration. Scope and suppression controls — scope: STEP must guarantee the token is present only in the declaring step's container environment, never pod-wide. disabled: true must suppress an inherited identity so, for example, third-party scan steps never see a Vault token. Mint-time abuse prevention — HarnessID must structurally validate the requested sub against the workload token's execution context to close cross-project/cross-account impersonation, and must strip and audit any attempt to set reserved claims via customClaims. Step-level containerization — Complete and make generally available the roadmap item to execute all delegate-native steps in ephemeral, isolated containers, so the identity boundary and the process boundary align. Steps in the same stage may share a context only where entitlement requirements are identical; separate pipelines must never share one. Unified audit trail — A single audit stream across all connectors and native identities, recording the requested subject, resolved claims, audience, and any validation failure with a claim diff. Optional Enhancement (Future Consideration) Multiple identities per step — Support a map of named identities per step, each with its own audience, subject, and claims, so a single step could authenticate to Kubernetes, Vault, and a registry with three independent, separately-scoped tokens. This is not required for the initial delivery; a single scoped identity per step satisfies the security finding. We would like this on the roadmap for future multi-cloud and multi-target step patterns Concrete Target Scenario A deployment stage targeting namespace payments-prod: 1) Step run_migrations is issued a JWT with sub = account:abc:pipeline:deploy:stage:deploy_prod_eu:step:run_migrations. 2) That JWT is presented to the cluster's OIDC-federated token minting endpoint. 3) The cluster returns a token bound to a RoleBinding permitting only apps/deployments and batch/jobs in payments-prod, with a TTL of 10 minutes. 4) The next step, rolling_deploy, receives a different JWT and a different minted credential with a different RoleBinding. 5) Neither token exists after the step container exits, and neither is visible to the other step or to any other pipeline on the delegate.
0
·
General Platform Requests
Allow Rerun from Last Failed Stage with Original Pipeline Definition
Problem When using "Rerun from Last Failed Stage" in Harness CD pipelines, the system fetches the latest pipeline YAML from the configured branch rather than using the original pipeline version that was used during the failed execution. This creates non-deterministic behavior and false failures in incident recovery scenarios. Current Behavior: Run pipeline with YAML commit aa → Test passes, Prod fails Pipeline updated to commit bb (adds new outputs/variables) "Rerun from Last Failed Stage" on original execution → Harness uses commit bb Result: Output/context mismatch causes false failures Desired Behavior: "Rerun from Last Failed Stage" should use the original pipeline commit (aa) from the failed execution Ensures deterministic reruns and maintains pipeline context consistency Use Case This is critical for: Incident Recovery: Production support teams need reliable reruns without pipeline drift Debugging: Isolating whether failures are stage-related or due to pipeline changes Confidence: Reduced false positives when resuming failed stages Related Context There is an existing "Rerun Pipeline with Original Pipeline Definition" setting (Account Settings → Default Settings → Pipeline), but: It reruns the entire pipeline from the start, not from the failed stage This defeats the purpose of "Last Failed Stage" rerun for long-running multi-stage pipelines We need both capabilities: stage-level resumption + original definition pinning Impact Non-deterministic pipeline behavior False failures due to pipeline definition drift Reduced reliability of rerun feature for production support workflows Prior context: https://support.harness.io/hc/en-us/requests/121843
0
·
Continuous Delivery &…
GitOps: self-service unlock and visibility for stuck "Git Restraint" locks on MergePR/UpdateReleaseRepo steps
GitOps MergePR and UpdateReleaseRepo steps serialize Git operations per connector token using an internal "Git Restraint" lock (limit 1, FIFO) to avoid secondary rate limits on the Git provider. If the lock-holding step's completion event is ever lost, the lock never releases and has no recovery path short of the TTL (6 months). Every subsequent step against that token queues and eventually times out ( MARK_EXPIRED ) with no indication in the step logs of what it's actually waiting on. Today, unblocking requires a support escalation and a manual database fix by Harness engineering. What we'd like A self-service way for account/project admins to view and release a stuck Git Restraint lock (API and/or UI action) instead of relying on Harness engineering to clear it from the database. A "Git Restraint" command unit surfaced in the MergePR step's execution log, analogous to what UpdateReleaseRepo already shows, so a queued/blocked step clearly reports that it's waiting on the lock (and ideally which execution holds it) rather than showing no logs at all until it expires. Why it matters Right now a stuck lock is invisible to the customer until every Merge PR step using that connector token starts timing out, and the only way out is a support ticket plus a manual backend intervention. Self-service visibility and release would let teams unblock themselves in minutes instead of hours, and would surface the disableGitRestraint workaround as an informed choice rather than something support has to explain after the fact. Example We hit this on a production account: a Merge PR step's lock-release event was silently dropped during a brief consumer-lag incident, leaving the lock ACTIVE for ~17.5 hours. Every Merge PR step across the account using that connector token queued behind it and expired at the 10-minute step timeout with zero log output, until Harness on-call manually deleted the lock document from the database. Today's workaround (and why it's not enough) disableGitRestraint step parameter skips the lock entirely, but that reintroduces the risk of secondary Git provider rate limiting it exists to prevent. The only other option today is filing a support ticket and waiting for Harness engineering to manually clear the lock from the database, which is exactly what extended the incident above to ~17.5 hours.
0
·
Continuous Delivery &…
Expose API Lifecycle and Domain in IDP Catalog HQL
Problem: We are building an API Governance Dashboard using Harness HD Dashboards and need to filter and report APIs based on their lifecycle and domain. These fields are available in the API catalog entity YAML under spec: apiVersion: backstage.io/v1alpha1 kind: API metadata: name: example-api spec: type: openapi lifecycle: production domain: domain:cards owner: group:account/card_services_team However, the l:idp:catalog entity currently exposes only the following fields for HQL queries: kind name type owner tags identifier entity_ref created_at last_updated_at The nested spec.lifecycle and spec.domain values are ingested into the catalog but are not available as queryable fields. We also noticed that idp:api contains a lifecycle field in its schema, but the field currently does not return any data. Requested Enhancement: Expose the following fields as top-level queryable fields on l:idp:catalog: lifecycle — sourced from spec.lifecycle domain — sourced from spec.domain Alternative: Populate the idp:api entity with the corresponding catalog data so that the existing lifecycle field can be queried and a domain field can also be exposed. Business Need: This capability is required to build an API Governance Dashboard that can: Filter APIs by lifecycle — production, experimental, deprecated Filter APIs by domain — cards, payments, accounts, etc. Identify APIs that are missing lifecycle or domain metadata Track API governance and metadata compliance across the organization Expected Outcome: API lifecycle and domain information should be available as HQL-queryable fields in Harness HD Dashboards, allowing customers to build governance dashboards without maintaining a separate data source or duplicating catalog metadata.
0
·
Internal Developer Portal
Load More