Secrets Handling (Release Orchestrator)

Last updated: 2026-05-30

This document describes how the Stella Ops Release Orchestrator handles secret material — connector configuration, deployment-target credentials, and vault-resolved values — at rest, in transit, and in operation. It is the authoritative reference for engineers and operators wiring connectors and deployment targets.

Reconciled against src/ReleaseOrchestrator on 2026-05-30. The original draft stated that “secrets are stored in Authority and referenced via secretRef”; this is not how the Release Orchestrator works. Authority issues OAuth/OIDC tokens and scopes only — it does not hold connector or deployment-target secrets. The mechanisms actually implemented are described below.

Principles

Orchestrator-specific rules (DOCS-ORCH-34-002)

Secret references on deployment targets

TargetConnectionConfig subtypes carry typed *SecretRef fields rather than inline credentials (StellaOps.ReleaseOrchestrator.Environment.Models.TargetConnectionConfig):

Target typeSecretRef fields
docker_host / compose_hostCaCertSecretRef, ClientCertSecretRef, ClientKeySecretRef
ssh_hostPrivateKeySecretRef, PasswordSecretRef
winrm_hostPasswordSecretRef
ecs_serviceAccessKeyIdSecretRef, SecretAccessKeySecretRef
nomad_jobTokenSecretRef
ansible_hostPrivateKeySecretRef, VaultPasswordSecretRef, BecomePasswordSecretRef

SecretRef values are resolved by SecretRefResolver (StellaOps.ReleaseOrchestrator.Deployment.Executor), which understands three schemes:

Any other prefix (or a bare string) resolves to null. Resolution is wired through per-transport interfaces (ISshSecretResolver, IWinRmSecretResolver, IEcsSecretResolver, INomadSecretResolver, IAnsibleSecretResolver).

NOT PRODUCTION-HARDENED. The default implementations (DefaultSshSecretResolver, DefaultAnsibleSecretResolver, etc.) delegate to SecretRefResolver and are documented in source as “for non-prod and CI secret refs. Production deployments are expected to replace this with a platform-secret-store backed resolver.” A platform/vault-backed resolver is a roadmap item — these defaults do not provide vaulting or auditing on their own.

Secrets for connector plugins

Connector plugins receive an ISecretResolver on their ConnectorContext (StellaOps.ReleaseOrchestrator.Plugin.Models.ConnectorModels). The production implementation is TenantSecretResolver (ITenantSecretResolver):

Note: workflow step plugins (StepExecutionContext) do not receive an ISecretResolver. Only connector plugins (ConnectorContext) do. A step that needs a secret obtains it indirectly (e.g. via a connector or a resolved target config), not via a secretRef field on the step context.

Redaction

Authorization scopes

Secret-adjacent orchestrator actions are gated by these canonical scopes (StellaOps.Auth.Abstractions.StellaOpsScopes):

Audit checklist