Skip to content

feat(credentials): saved AWS and Databricks credentials with keyless OIDC - #9763

Draft
waleedlatif1 wants to merge 4 commits into
stagingfrom
feat/oidc-credentials
Draft

waleedlatif1 wants to merge 4 commits into
stagingfrom
feat/oidc-credentials

Conversation

@waleedlatif1

Copy link
Copy Markdown
Collaborator

What

Every AWS block (19) and the Databricks block can now use a saved credential. The inline key fields stay where they are.

Credentials can be keyless: Sim runs its own OIDC issuer (/oidc/workload), so a credential can assume a customer's AWS role, or federate into a Databricks service principal, without storing any secret.

Provider Modes
AWS Keyless IAM role (AssumeRoleWithWebIdentity) · access keys that assume a role (optional external ID) · access keys
Databricks Keyless service principal (RFC 8693 token federation) · service principal OAuth secret (M2M) · PAT

Existing workflows don't change

  • A credential is optional. With none selected, the key fields show, validate, serialize and execute exactly as before. serializer/saved-credentials.test.ts pins this for all 21 blocks.
  • No mode dropdown. A dropdown's default gets written back the moment a block opens in the editor, which would flip existing blocks.
  • Without an executor-authorized credential, the AWS operation wrapper hands the family handler the identical request object. awsClientCredentials returns the same { accessKeyId, secretAccessKey }.
  • S3 get_object inline signatures and presigned URLs are byte-identical to staging (golden test). The session-token header signature matches AWS SDK SigV4.
  • Tool credential binding now honors oauth.required: false. No existing tool uses that value, so only the new hybrid tools are affected.
  • Without WORKLOAD_IDENTITY_SIGNING_KEY, the issuer returns 404 and the keyless option shows an error. Keys and secrets still work.

Security

  • The credential reference reaches AWS operations through trusted operation context, never through tool input. The operation re-checks owner scope. Keys and session tokens are resolved server-side on each call.
  • OIDC subjects are scoped to a single credential. Each is signed (HMAC) for the user and workspace that prepared it, so a member can't attach a subject they've seen in a trust policy to a credential of their own.
  • Tokens last 5 minutes, carry an audience per relying party, and never reach outputs or the model. The key ID is the JWK thumbprint; WORKLOAD_IDENTITY_PREVIOUS_KEY keeps the old key published during rotation.

Deploy notes

  • Generate WORKLOAD_IDENTITY_SIGNING_KEY (RSA PKCS#8 PEM) for each environment. Trigger workers need it too.
  • The issuer URL defaults to <NEXT_PUBLIC_APP_URL>/oidc/workload. Customer trust policies pin it, so set WORKLOAD_IDENTITY_ISSUER explicitly before anyone relies on it.

Known limits

  • CloudWatch log-group and log-stream pickers still load with inline keys. With a saved credential, use the manual name field.
  • Keyless modes cover workspace credentials. Organization credentials offer the key and secret modes.
  • v2/CLI direct tool execution still requires the inline key params (no change from today).

Tests

New suites cover the issuer (JWKS verification, audience, rotation, unconfigured), subject proofs (tamper, other user, other workspace, expiry), the AWS operation seam, the 21-block hybrid serializer contract, S3 signing goldens, the hybrid binding, and the Databricks helpers. Each new guard was reverted once to watch its test go red.

…OIDC

Adds an optional saved credential to every AWS block and the Databricks
block, alongside the existing inline key fields, plus Sim's own
workload-identity (OIDC) issuer so a credential can assume a customer's
AWS role or federate into a Databricks service principal without any
stored secret.

Existing workflows are unchanged: the inline fields stay, show, and
validate exactly as before until someone selects a saved credential.

- Issuer at /oidc/workload (discovery + JWKS), signing key from
  WORKLOAD_IDENTITY_SIGNING_KEY; 404 and keyless option off when unset
- Credential-scoped subjects, HMAC-bound to the preparing user and
  workspace, so a member cannot reuse another credential's subject
- aws-service-account: access keys, keys + AssumeRole (external ID), or
  keyless AssumeRoleWithWebIdentity; resolved server-side per call
- databricks-service-account: PAT, service principal M2M secret, or
  keyless RFC 8693 token federation
- AWS families accept the executor-authorized credential through trusted
  operation context; clients add the session token only for that pair
- S3 get_object signs x-amz-security-token for temporary credentials;
  inline signatures are byte-identical to before
- Tool credential binding honors optional (required: false) policies
@vercel

vercel Bot commented Nov 7, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated
docs Skipped Skipped Nov 7, 2026 2:44am UTC

Request Review

# Conflicts:
#	apps/sim/tools/generated/tool-metadata.ts
#	packages/deployment-config/src/integration-metadata.ts
…ntials

- Models can no longer inject a credential selector (or the token, session
  token, or host derived from one) into a hybrid tool call, which would
  have swapped an agent tool's inline keys for another workspace credential
- Databricks connections own the workspace host (authoritative `domain`)
- Drop the advanced credential-ID input: with a single picker, "is a
  credential selected" can no longer disagree with the active canonical mode
- OIDC subject proofs are bound to their provider
- Databricks token and identity fetches refuse redirects
- Correct the AWS module doc on presigned URLs carrying a session token

This branch was previously deployed

1 inactive deployment
Preview — e04dfa35 Deployed Nov 7, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant