* Add secrets module * Address Greptile feedback for secrets module * Handle unavailable secrets in provider adapter * Address path combine review comments * Address additional Greptile secrets review * Address final Greptile secrets feedback * Handle secrets test payload failures * address greptile feedback on secrets rotation * fix secret recreation concurrency * address greptile secrets followups * address greptile secrets reliability feedback * align secret store capabilities
4.8 KiB
4.8 KiB
Data Model: Secrets Module
Secret
Logical named secret referenced by workflows and modules.
TechnicalName: immutable unique name used by references and exports.DisplayName: optional user-facing label.Description: optional safe metadata.Type: secret type identifier.Scope: optional classification used by pickers and consumers.Tags: optional safe labels.StoreName: selected store identifier.Status: active, retired, expired, revoked, or deleted.TenantId,Owner,CreatedAt,UpdatedAt: operational metadata.LatestVersionNumber: current active version number.
Validation:
TechnicalNameis required, trimmed, case-normalized for uniqueness, and immutable after creation.- Metadata must not contain raw secret values.
- Only one latest active version may exist for a technical name.
SecretVersion
Versioned value or external-reference payload for a secret.
SecretTechnicalName: parent technical name.Version: monotonically increasing version number.Status: active, retired, expired, or revoked.ProtectedPayload: provider-private encrypted value or lookup metadata.PayloadContentType: store/type-specific payload descriptor.ExpiresAt: optional expiration time.CreatedAt,UpdatedAt,RetiredAt,RevokedAt: lifecycle timestamps.
State transitions:
- Create: no version -> version 1 active latest.
- Rotate/update: current active latest -> retired, new version -> active latest.
- Expire: active -> expired.
- Revoke: active or retired -> revoked.
- Delete: logical secret becomes unavailable; provider decides whether versions are hard-deleted or tombstoned.
SecretReference
Serializable value stored in workflow definitions and module settings.
TechnicalName: immutable secret technical name.RequiredType: optional expected secret type.RequiredScope: optional expected scope.
Resolution:
- Resolve by
TechnicalName. - Return the latest active version only.
- Fail for missing, expired, revoked, deleted, incompatible type, incompatible scope, or unavailable store.
SecretTypeDescriptor
Registered metadata for a secret type.
Type: stable type name.DisplayName: safe user-facing label.Description: safe help text.SupportedStoreCapabilities: required read/write/list/export/test capabilities.EditorContract: Studio editor descriptor and validation metadata.CanGenerate: whether the type can generate payloads server-side.CanExportEncrypted: whether encrypted export is supported.
Built-in v1 types:
Text: standard string value.RsaKey: generated or provided RSA key material.X509CertificateReference: certificate reference metadata, not private certificate material.
SecretStoreDescriptor
Registered metadata for a store implementation.
Name: stable store identifier.DisplayName: safe user-facing label.Description: safe help text.Capabilities: read, write, list, delete, rotate, test, encrypted export.SupportedTypes: secret types the store can handle.IsDefault: whether new secrets use this store when no explicit store is selected.
V1 stores:
ElsaEncrypted: writable Elsa-managed encrypted store.Configuration: read-only deployment configuration store.
SecretPayload
Store-owned payload attached to a version.
StoreName: store that owns the payload.Type: secret type.ProtectedData: encrypted value or provider-private lookup metadata.Metadata: safe store/type metadata for diagnostics and pickers.
Rules:
- General metadata APIs never return
ProtectedData. - Provider-private metadata is not exposed outside store-specific boundaries.
- Cleartext is not persisted in workflow definitions, module settings, logs, audit events, or general API responses.
SecretImportItem
Safe import/export package representation.
TechnicalName: target secret name.Type,Scope,Description: safe metadata.StoreName: requested target store.ReferenceOnly: whether no value is included.EncryptedPayload: optional payload encrypted for the import target.ConflictBehavior: create-new, update/rotate, skip, or unspecified.
Rules:
- Same-name conflicts fail when
ConflictBehavioris unspecified. - Encrypted payload import requires matching decryption material.
- Reference-only import creates or validates metadata without importing a value.
SecretAuditEvent
Security event emitted for privileged operations.
Action: create, update, rotate, revoke, delete, test, runtime-use, encrypted-export, import, failed-privileged-operation.TechnicalName: affected secret.Actor: user or system identity.Timestamp: event time.Reason: optional user-provided reason.Result: success or failure.
Rules:
- Audit events never include raw secret values, encrypted payloads, or provider-private metadata.