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
Support Gateway API ListenerSets (XListenerSet) in SMP Envoy Gateway ingress
With NGINX Ingress deprecated in SMP (through 0.45.0, removed as supported at 0.46.0) and Envoy Gateway becoming the supported ingress via the Kubernetes Gateway API, teams that relied on per-team Ingress self-service lose a clean way to manage their own listeners and TLS certificates. The Gateway-native replacement for that pattern is the ListenerSet (XListenerSet, GEP-1713), and it is not currently supported by the SMP-bundled Gateway API stack. Current state On SMP 0.44.x, XListenerSet resources are not reconciled by the bundled ingress. In practice this means all listeners must be defined centrally on the Gateway resource, there is no delegated, namespace-scoped listener or TLS self-service, and teams remain subject to the Gateway's single-resource listener model and its historical 64-listener limit. Desired behavior SMP should allow ListenerSets to attach to Gateways managed by the bundled Envoy Gateway. Specifically: install the experimental-channel Gateway API CRDs (or provide a supported toggle to do so), reconcile XListenerSet such that resources reach Accepted/Programmed, expose the Gateway's allowedListeners namespace scoping through chart configuration, and let HTTPRoute reference listeners defined in attached ListenerSets. Because the resource is currently experimental upstream, feature-gating and a documented migration path to the standard ListenerSet (expected around Gateway API 1.5) would be appropriate. Use cases Platform teams running SMP who want application teams to self-serve their own hostnames, listeners, and TLS certificates on a shared Gateway without granting write access to the central Gateway resource. Multi-tenant clusters that need to distribute listener configuration across namespaces. Environments migrating from NGINX Ingress that need a Gateway-native equivalent of per-team ingress ownership. Deployments approaching or exceeding the 64-listener limit on a single Gateway. Business value Preserves the developer self-service and separation-of-concerns model that NGINX Ingress users depend on, so the forced migration to Envoy Gateway does not become a regression in team autonomy. Keeps infrastructure lean by supporting a shared Gateway rather than one Gateway (and its associated pods) per team, and reduces the risk that customers stall on the 0.46.0 upgrade because the ingress replacement cannot match their existing operational model.
1
·
General Platform Requests
·
in progress
AWS OIDC Plugin Should Support Custom JWT Claims And AWS Session Tags To Enable Migration From The Legacy OIDC Token API
Description Customers using the legacy AWS OIDC Token API can inject custom JWT claims and configure OIDC session tags (oidcSessionTagKeys) to satisfy AWS IAM Trust Policies and Attribute-Based Access Control (ABAC). The recommended migration path is to use the AWS OIDC Plugin, but it currently does not provide equivalent functionality. Today, the plugin receives a JWT that has already been generated by Harness and simply forwards it to AWS STS via AssumeRoleWithWebIdentity. There is no supported way to: Add custom JWT claims before the token is signed. Configure oidcSessionTagKeys. Include AWS-compatible session tag claims in the generated token. We also investigated using the AWS OIDC connector with the session tag feature enabled and using tje connector-generated OIDC token directly (<+connectorInputs.get(<+infra.connectorRef>).oidcToken>) and manually calling AssumeRoleWithWebIdentity, but that token likewise does not include customer-defined claims or session-tag information. Why this matters Many customers rely on custom claims and session tags to: Satisfy AWS IAM Trust Policies. Implement AWS Attribute-Based Access Control (ABAC). Restrict access based on pipeline, environment, or other deployment context. Without feature parity, customers cannot migrate from the legacy API to the recommended AWS OIDC Plugin without redesigning their existing AWS IAM architecture. Requested enhancement Provide migration parity by allowing customers to configure: Custom JWT claims. oidcSessionTagKeys. AWS-compatible session-tag claims before the JWT is signed by Harness.
0
·
General Platform Requests
Load More