Secrets manager behavior reference
This page defines how Astralis caches values from a secrets manager, behaves during an outage, reports manager health, and exposes managers through the API and deployment settings.
Secrets manager integrations are part of Astralis Enterprise. For setup, see the secrets managers overview.
Caching and outages
Each Astralis process keeps its own in-memory cache per manager. Nothing read from a manager is written to disk or the database.
| Window | Duration | Behavior |
|---|---|---|
| Fresh | 15 minutes after a successful read | The cached value is used without contacting the manager. |
| Stale | Up to 30 more minutes | If the manager cannot be reached, the last good value is used and the manager reads as Serving cached credentials. |
| Expired | After 45 minutes without a successful read | Integrations reading from the manager fail until it is reachable again. |
| Retry cooldown | 30 seconds after a failed read | Astralis waits before contacting the manager again. |
Failures fall into three classes:
| Class | Examples | Behavior |
|---|---|---|
| Transient | Network timeout, DNS failure, Vault sealed or unavailable | Stale value served within the window. |
| Permanent | Secret deleted, access denied, KMS decryption denied, AppRole rejected, untrusted certificate | Cache cleared; fails immediately. |
| Unusable payload | Not a JSON object, missing a required key | Fails immediately; never served stale. |
When a privacy request step or a connection test fails on a managed integration, Astralis fetches the secret again once and retries, so a rotated credential takes effect without waiting for the cache to expire. Background consent and DataHub tasks retry through a manager outage after 1, 2, and 4 minutes before dropping the work.
Health states
| State | Label | Meaning |
|---|---|---|
never_verified | Never verified | Not checked since it was added, edited, or had its ExternalId rotated. Verify it before pointing an integration at it. |
ok | Healthy | The last check or read succeeded. |
degraded_stale | Serving cached credentials | The manager is unreachable and integrations are using cached values. |
failing | Failing | The last check or read failed. The row shows why. |
A successful Test does not clear a failure recorded while reading a secret; the next successful read does. A failure of the Astralis deployment's own AWS identity is reported as such and never changes a manager's health.
Scheduled health checks
Astralis checks every manager's reachability every 6 hours, starting one minute after the server starts. A check authenticates to the manager and reads no secret.
Tests and checks
| Action | Where | What it proves |
|---|---|---|
| Manager Test / Verify connection | Secrets managers page and form | Configuration is valid and Astralis can authenticate (assume the AWS role, or log in with the AppRole). Does not read a secret. |
| Check | An integration's Credentials drawer | The secret resolves and holds every key the integration needs. Reads past the cache. |
| Test connection | An integration | Three stages: Secrets manager reachable, Secret fetched and validated, Downstream connection. The last is skipped if the secret did not resolve. |
Manager tests and checks are limited to one every 5 seconds per manager.
Payload rules
- The secret is a JSON object (AWS secret string) or a KV object (Vault). AWS binary secrets are refused.
- The keys are the integration type's credential fields, minus settings Astralis keeps for that type. See settings kept in Astralis.
- A key that is empty or
nullcounts as missing. - Extra keys depend on the integration type. Most types ignore them, SaaS integrations pass them to the integration, and email integrations refuse them. Jira ticket integrations refuse OAuth keys and ignore the rest.
- If the secret includes a key Astralis keeps for the type, the value stored in Astralis wins.
- Values from the secret override tokens Astralis refreshed and stored for the integration, such as OAuth access tokens, key by key.
Eligible integration types
By default, every integration type with credential fields can read them from a manager. A self-hosted deployment narrows this with FIDESPLUS__SECRETS_MANAGER__ELIGIBLE_CONNECTION_TYPES, a JSON array of connection types:
| Value | Effect |
|---|---|
| Unset | Every type with credentials is eligible. |
["postgres", "saas"] | Only those types can be linked. SaaS integrations are eligible or not as a whole, under saas. |
[] | No type is eligible: new links are refused and existing links stop resolving. |
Removing a type refuses new links and makes existing links of that type fail. Unknown type names stop the server from starting. Restart the web server and every worker after changing the value.
Deleting a manager
A manager cannot be deleted while any integration reads from it, including integrations in other organizations. The delete dialog lists the integrations in your organization and counts the rest. Point each one at another manager, or switch it to credentials entered in Astralis, then delete.
Deleting removes the manager's configuration from Astralis. Nothing in your secrets manager changes. A connection that already holds a value in memory may finish its current operation.
Organizations
A manager belongs to the organization that created it. A manager created at the root is usable by every organization but changeable only by its owner. Manager keys are unique across all organizations.
API
All endpoints are under /api/v1/plus.
| Method and path | Permission | Purpose |
|---|---|---|
GET /secrets-manager | secrets_manager:read | List managers (paginated) |
GET /secrets-manager-status | secrets_manager:read | {"configured": true | false} |
GET /secrets-manager/{key} | secrets_manager:read | One manager, with its trust policy and dependents |
POST /secrets-manager | secrets_manager:create_or_update | Create a manager |
PATCH /secrets-manager/{key} | secrets_manager:create_or_update | Update a manager. Sending details replaces it whole. |
POST /secrets-manager/{key}/test | secrets_manager:create_or_update | Test authentication |
POST /secrets-manager/{key}/rotate-external-id | secrets_manager:create_or_update | Rotate an AWS manager's ExternalId |
POST /secrets-manager/verify-all | secrets_manager:create_or_update | Test up to 25 managers, never-verified first |
POST /secrets-manager/{key}/check-reference | connection:create_or_update and secrets_manager:read | Check a reference for an integration type |
DELETE /secrets-manager/{key} | secrets_manager:delete | Delete a manager; 409 while integrations read from it |
Callers without secrets_manager:create_or_update, or outside the owning organization, receive managers with details empty and details_redacted: true. Secret values, the Vault secret ID, and the Vault token are never returned. An integration's secrets_manager_reference is returned only to callers with connection:create_or_update.
The payload template for a type is at GET /api/v1/connection_type/{type}/secrets-template and returns 404 until a manager is configured.
Manager details
| Field | AWS Secrets Manager | HashiCorp Vault |
|---|---|---|
type | aws_secrets_manager | hashicorp_vault |
details | region, role_arn, reference_prefix | addr, mount, kv_version (default 2), namespace, auth_mount (default approle), ca_certificate, role_id, reference_prefix |
secrets | None | secret_id |
The ExternalId is generated by Astralis and cannot be set. reference_prefix must end in / or :.
Deployment settings
Self-hosted deployments configure secrets managers with these environment variables, also listed in the configuration reference. An invalid value stops the server from starting.
| Variable | Default | Purpose |
|---|---|---|
FIDESPLUS__SECRETS_MANAGER__AWS_PRINCIPAL_ARN | Unset | The IAM principal the deployment assumes customer roles from, shown as the principal in each AWS manager's trust policy. Unset, the form shows only the ExternalId. Must be an IAM role, user, or account-root ARN; see run your own deployment. |
FIDESPLUS__SECRETS_MANAGER__HEALTH_CHECK_INTERVAL_SECONDS | 21600 | Seconds between scheduled health checks. 0 disables them; otherwise at least 60. |
FIDESPLUS__SECRETS_MANAGER__ELIGIBLE_CONNECTION_TYPES | Unset | See eligible integration types. |
FIDES__SECRETS__AWS_SECRETS_MANAGER__CACHE_TTL_SECONDS | 900 | Fresh window for AWS managers |
FIDES__SECRETS__AWS_SECRETS_MANAGER__CACHE_STALE_TTL_SECONDS | 1800 | Stale window for AWS managers |
FIDES__SECRETS__HASHICORP_VAULT__CACHE_TTL_SECONDS | 900 | Fresh window for Vault managers |
FIDES__SECRETS__HASHICORP_VAULT__CACHE_STALE_TTL_SECONDS | 1800 | Stale window for Vault managers |