Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 74746e409b | |||
| 70aed035a5 | |||
| 0264a62b22 | |||
| c212537163 |
@@ -0,0 +1,39 @@
|
|||||||
|
---
|
||||||
|
layout: default
|
||||||
|
title: Secrets Vault
|
||||||
|
nav_order: 6
|
||||||
|
---
|
||||||
|
|
||||||
|
# Secrets Vault
|
||||||
|
|
||||||
|
SSO Manager integrates natively with **OpenBao** (a Vault fork) to securely manage and store sensitive data, configuration, and API keys.
|
||||||
|
|
||||||
|
The Vault proxy endpoint is exposed directly through SSO Manager at `/api/vault/v1/`, which safely authenticates and authorizes requests before forwarding them to the internal OpenBao container.
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
The secrets engine uses a persistent file backend (`/var/lib/docker/volumes/theta-env_openbao-data/_data`) to ensure high availability and durability.
|
||||||
|
|
||||||
|
When the environment is initialized via `setup.sh`, OpenBao is automatically unsealed and seeded with a root token that the application uses for authentication. The root token is kept securely inside the container environment.
|
||||||
|
|
||||||
|
## Accessing the Vault
|
||||||
|
|
||||||
|
The SSO Manager Vault can be accessed in two ways:
|
||||||
|
|
||||||
|
1. **Via the SSO Manager UI**: Go to the **Admin Configuration** page (`/conf`) to edit the application's configuration secrets directly.
|
||||||
|
2. **Via the REST API**: Send requests to `/api/vault/v1/...` with your SSO Manager session or API Token.
|
||||||
|
|
||||||
|
### API Example
|
||||||
|
|
||||||
|
To read secrets from the default key-value store, issue a `GET` request to:
|
||||||
|
`/api/vault/v1/secret/data/sso-manager/conf`
|
||||||
|
|
||||||
|
Only administrators with `app_sso_admin` or `admin` permissions can query the vault endpoints.
|
||||||
|
|
||||||
|
## Namespaces and Paths
|
||||||
|
|
||||||
|
Currently, secrets are maintained at `/v1/secret/data/sso-manager/conf` using the `kv-v2` backend. When configurations are edited via the admin UI, SSO Manager performs a deep-merge so that partial updates don't overwrite unrelated keys (such as SMTP vs OAuth configurations).
|
||||||
|
|
||||||
|
## Plugin Integration
|
||||||
|
|
||||||
|
When building custom Agents or integrations, they can utilize the local Vault to retrieve API tokens instead of hardcoding them. Always use the `/api/vault` proxy to ensure permissions are consistently enforced.
|
||||||
Binary file not shown.
@@ -3,7 +3,9 @@
|
|||||||
<div class="container mt-4">
|
<div class="container mt-4">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<ul class="nav nav-tabs mb-3 card-header-tabs" id="directoryTabs" role="tablist">
|
<div class="card shadow">
|
||||||
|
<div class="card-header">
|
||||||
|
<ul class="nav nav-tabs card-header-tabs" id="directoryTabs" role="tablist">
|
||||||
<li class="nav-item" role="presentation">
|
<li class="nav-item" role="presentation">
|
||||||
<button class="nav-link active" id="directory-tab" data-bs-toggle="tab" data-bs-target="#directory-tab-pane" type="button" role="tab" aria-controls="directory-tab-pane" aria-selected="true">
|
<button class="nav-link active" id="directory-tab" data-bs-toggle="tab" data-bs-target="#directory-tab-pane" type="button" role="tab" aria-controls="directory-tab-pane" aria-selected="true">
|
||||||
<i class="fa-solid fa-server"></i> Directory
|
<i class="fa-solid fa-server"></i> Directory
|
||||||
@@ -20,9 +22,11 @@
|
|||||||
</button>
|
</button>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="card-body p-0">
|
||||||
<div class="tab-content" id="directoryTabsContent">
|
<div class="tab-content" id="directoryTabsContent">
|
||||||
<div class="tab-pane fade show active" id="directory-tab-pane" role="tabpanel" aria-labelledby="directory-tab">
|
<div class="tab-pane fade show active" id="directory-tab-pane" role="tabpanel" aria-labelledby="directory-tab">
|
||||||
<div class="card shadow border-top-0">
|
<div class="border-0">
|
||||||
<div class="card-header d-flex flex-wrap justify-content-between align-items-center gap-2">
|
<div class="card-header d-flex flex-wrap justify-content-between align-items-center gap-2">
|
||||||
<div>
|
<div>
|
||||||
<i class="fa-solid fa-server"></i> Directory Management
|
<i class="fa-solid fa-server"></i> Directory Management
|
||||||
@@ -97,7 +101,7 @@
|
|||||||
|
|
||||||
<!-- Discovery Tab Pane -->
|
<!-- Discovery Tab Pane -->
|
||||||
<div class="tab-pane fade" id="discovery-tab-pane" role="tabpanel" aria-labelledby="discovery-tab">
|
<div class="tab-pane fade" id="discovery-tab-pane" role="tabpanel" aria-labelledby="discovery-tab">
|
||||||
<div class="card shadow border-top-0">
|
<div class="border-0">
|
||||||
<div class="card-header d-flex flex-wrap justify-content-between align-items-center gap-2">
|
<div class="card-header d-flex flex-wrap justify-content-between align-items-center gap-2">
|
||||||
<div>
|
<div>
|
||||||
<i class="fa-solid fa-network-wired"></i> Network Discovery Dashboard
|
<i class="fa-solid fa-network-wired"></i> Network Discovery Dashboard
|
||||||
@@ -188,7 +192,7 @@
|
|||||||
|
|
||||||
<!-- Agents Tab Pane -->
|
<!-- Agents Tab Pane -->
|
||||||
<div class="tab-pane fade" id="plugins-tab-pane" role="tabpanel" aria-labelledby="plugins-tab">
|
<div class="tab-pane fade" id="plugins-tab-pane" role="tabpanel" aria-labelledby="plugins-tab">
|
||||||
<div class="card shadow border-top-0">
|
<div class="border-0">
|
||||||
<div class="card-header d-flex flex-wrap justify-content-between align-items-center gap-2">
|
<div class="card-header d-flex flex-wrap justify-content-between align-items-center gap-2">
|
||||||
<div>
|
<div>
|
||||||
<i class="fa-solid fa-robot"></i> Agents & Scheduler
|
<i class="fa-solid fa-robot"></i> Agents & Scheduler
|
||||||
@@ -237,6 +241,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
app.auth.forceLogin(['app_sso_admin', 'app_sso_directory_admin', 'admin']);
|
app.auth.forceLogin(['app_sso_admin', 'app_sso_directory_admin', 'admin']);
|
||||||
|
|||||||
Reference in New Issue
Block a user