How LiteLLM integrates with HashiCorp Vault and cloud secret managers
LiteLLM reads provider API keys from, and writes virtual keys to, HashiCorp Vault, AWS, Azure, Google or CyberArk secret stores through its secret manager settings. This is the supported method for keeping that material out of the gateway's configuration, and the secret manager integrations require an Enterprise license. Many teams running a self-hosted gateway today keep provider keys in environment variables or config files on the proxy host. Anyone with shell access to that host can read them, backups and deployment tooling copy them, and rotation means editing files and restarting the service. Moving that material into a store your security team already governs gives you one place to audit access and rotate values.
Four settings control the integration. key_management_system selects the backend. store_virtual_keys controls whether the gateway also writes the virtual keys it issues to that store. A prefix sets the naming for stored virtual keys, which lets you separate them from other secrets in a shared vault. access_mode sets what the gateway may do: read_only is the default and lets it fetch secrets only, write_only permits writes only, and read_and_write allows both. Choose the mode for each class of key before deployment. Then confirm with the LiteLLM documentation for your release exactly what each mode covers for your chosen backend, and make sure the access your vault policy grants matches the mode you pick.
The Enterprise requirement applies to the secret manager integrations themselves, so settle the license before you design around a backend. Ask the vendor to confirm which backends your agreement includes and whether the entitlement covers reading provider keys, writing virtual keys, or both. Backend choice usually follows where your other secrets already live: a Vault cluster your platform team operates, a cloud account your workloads already use, or CyberArk where privileged credentials are managed. The gateway also needs its own credential to reach the store. LiteLLM's production guidance says LITELLM_MASTER_KEY, which must start with sk-, belongs in a secret manager, so plan where that bootstrap credential lives before you move anything else.
For HashiCorp Vault, LiteLLM authenticates with AppRole, which is the recommended method, or with a TLS certificate or a token. If you run Vault Enterprise, namespaces are supported for login and secret operations, so confirm the namespace path in your configuration during testing. Plan how the AppRole secret ID reaches the gateway host and how it rotates, because that identifier unlocks every provider key the gateway reads. Team-level secret manager settings let each team bring its own key management configuration, which applies when virtual keys are created for that team. Use this where teams need separate stores or access boundaries, and verify in testing that a key issued for one team cannot be read through another team's configuration.
What you need in place before configuring the secret manager link
Six prerequisites shape how the secret manager link is built. Some are software versions and licenses, some are infrastructure your team controls, and one is the master key that protects everything else. Confirm each item before you change any secret manager setting, so the configuration can be tested end to end.
Target LiteLLM release line
Choose a stable minor version from the LiteLLM GitHub releases page and pin it in your deployment. LiteLLM maintains support for the four most recent stable minor versions for both open source and Enterprise deployments, so plan upgrades before your line leaves that window. The latest release listed at the time of writing was v1.105.1, published October 14, 2026, but confirm the current release before you start. Record the chosen version in your change records, because secret manager settings can change between releases.
PostgreSQL for virtual keys
Virtual keys need a PostgreSQL database, and LiteLLM names PostgreSQL as its primary supported database. Stored virtual keys, per-key and per-team budgets, and model restrictions all depend on it, so the database must be available before the proxy can issue keys to teams. Confirm the database service you will run, its high availability design, and its backup and restore process, because a database outage stops key creation and budget enforcement.
Redis 7.0 or newer for multiple instances
Redis is not required for a single proxy instance, but LiteLLM's production guidance requires Redis 7.0 or newer once more than one proxy instance runs. Redis holds the shared rate limits, router state and cache, so without it, TPM and RPM limits and cooldown state would not agree across instances. Confirm the Redis version, where it runs, and that every proxy pod can reach it on the network.
Enterprise license for secret manager integrations
Reading provider API keys from an external secret store and writing virtual keys to one is an Enterprise feature. LiteLLM is dual licensed, so the enterprise/ directory is covered by its own license file, separate from the MIT license that applies to the rest of the code. Ask the vendor to confirm that your license covers each secret manager you plan to use and the team-level settings you need. Have legal review those terms before the integration design is final.
Vault or cloud account and network path
Prepare the Vault cluster or cloud account before configuring LiteLLM. For Vault, that means an AppRole or token identity with read access to the paths LiteLLM uses, plus a Vault Enterprise namespace if your deployment uses one. Confirm that every proxy pod can reach the secret store endpoint through your firewall and DNS, and that the proxy trusts the TLS certificate chain. Plan certificate rotation and the CA bundle location now, before the first certificate expires.
LITELLM_MASTER_KEY in a secret manager
The master key is the root credential for the proxy's admin functions, and its value must start with sk-. LiteLLM recommends holding it in a secret manager. Decide how the proxy receives it at startup, through your orchestrator's secret integration or another controlled path, and confirm the value never appears in logs, container images or configuration files. Plan who may read it, how it is rotated, and how the store that holds it is protected, because this key can change every virtual key.
Choosing read-only, write-only or read-and-write access for each secret store
The access mode decides whether LiteLLM may read secrets from a store, write secrets into it, or both. LiteLLM's secret manager settings include access_mode with three values: read_only, which is the default, write_only, and read_and_write. Pick the mode for each store separately, because a single Vault mount, AWS Secrets Manager prefix, Azure Key Vault or Google Secret Manager project may hold provider keys that the gateway only needs to read, while another location receives virtual keys that the gateway creates. Treat the mode as the first control on what the gateway can do to your secrets, before any role or policy you add on the store side.
Provider API keys for OpenAI, Anthropic, Bedrock, Azure or other upstream services are normally created by your platform or security team and then consumed by the gateway at startup or when a model is called. For these, read_only is the right mode. The gateway has no reason to change a provider credential, and a read-only setting means a compromised or misconfigured proxy cannot overwrite or delete the keys that every team depends on. Confirm with your own runbook how a provider key is rotated, because rotation usually happens outside the gateway, and the gateway should pick up the new value through its normal read path.
Virtual keys are the opposite case. When LiteLLM issues a new virtual key and store_virtual_keys is enabled, the gateway must write that key into the configured store under the configured prefix. Write_only fits a location where the gateway should only deposit new keys and never read back what is already there, which limits exposure if the proxy is compromised. Read_and_write is needed when the gateway must also read a stored virtual key later, for example to confirm it exists or to reuse it. Choose the narrower mode that still lets the workflow run, and test the key lifecycle, including creation and any later lookup, against a non-production store before you grant the mode in production.
The store-side role should match the mode. For HashiCorp Vault, AppRole policies can be limited to the read capability on the provider-key path and the create or update capability on the virtual-key path. AWS, Azure, Google and CyberArk offer equivalent per-secret or per-path permissions, and you should confirm the exact permission names with each vendor's documentation rather than copying a policy from elsewhere. Grant only the operations the mode requires, and avoid broad roles that also allow listing, deleting or changing access policies, because those operations are not part of the gateway's job and would enlarge the blast radius of a leaked credential.
Document the chosen mode for every store and every team in a single table that your security team signs off. Team-level secret manager settings can point a team's virtual keys to a different store, so each team entry needs its own access_mode and prefix review. Schedule a periodic check that compares the mode in the gateway configuration with the role actually bound in each store, because drift between the two is a common source of unexpected write access or failed key creation. Ask your implementation partner or internal team to show the test evidence for each mode before go-live.
Configuring LiteLLM to read and write secrets in Vault step by step
This sequence moves a self-hosted LiteLLM gateway from environment-variable secrets to HashiCorp Vault in controlled stages, so each change can be tested before the next one starts. The platform team works with Vault administrators, and the finished gateway reads provider keys and writes virtual keys to Vault under a defined prefix.
Enable the Enterprise secret manager feature
Confirm that your LiteLLM deployment is licensed for Enterprise, because secret manager integration, including HashiCorp Vault, is an Enterprise feature. Ask your LiteLLM account contact to confirm the license covers this feature on the release line you run, and check the Enterprise documentation for the exact enablement setting. Then restart the proxy in a non-production environment and confirm it starts without errors. Done means the proxy runs with the feature turned on and no secret manager is configured yet, so behavior has not changed.
Create a Vault AppRole for LiteLLM
Ask your Vault administrator to create a dedicated AppRole for the gateway. AppRole is the recommended login method for LiteLLM, and it gives the proxy its own role ID and secret ID instead of a shared human token. Scope the attached policy to the paths LiteLLM needs: read access to provider key paths and read and write access to the virtual key prefix. Store the role ID and secret ID in your existing secret delivery process, not in the repository. Done means a test login with the AppRole returns a token whose policy allows only the intended paths.
Set the Vault address and namespace
Configure the Vault server address and the AppRole credentials in the LiteLLM secret manager settings, using the key names in the LiteLLM Vault documentation for your version. If you run Vault Enterprise, also set the namespace used for login and secret operations. Confirm that the address uses TLS and that the proxy host trusts the Vault certificate chain. Done means the proxy can authenticate to Vault from its own environment, which you can check by reviewing the proxy startup output or a health check, depending on what your version reports.
Define the key management system, prefix and storage
Set the key_management_system value to HashiCorp Vault, then set store_virtual_keys and the prefix that LiteLLM uses for stored virtual keys. Keep the prefix specific to this gateway and environment, so that another gateway or team cannot collide with its paths. Leave access_mode at its default for now, which is read_only, so the proxy reads secrets but does not write them. Done means the configuration loads and the proxy still serves requests using the environment variables you have not yet removed.
Set access mode for the first rollout
LiteLLM supports three access modes: read_only (the default), write_only, and read_and_write. For the first rollout, keep read_only so the gateway pulls provider keys from Vault while virtual key writes stay under your control. Record the chosen mode in your change record and explain it to the Vault administrator, because write modes change what the gateway can do in Vault. Move to read_and_write only after the virtual key storage step below passes. Done means the change record shows the mode, the reason for it, and who approved it.
Move one provider key and test it
Choose one non-critical provider key, store it in Vault under the path your configuration expects, and remove the matching environment variable from a staging instance. Restart the proxy, then send a test request through that provider using a test virtual key. The check is that the request succeeds while the environment variable is absent, which shows the key came from Vault. Repeat the test with the environment variable present but a deliberately wrong value only if your team wants to prove precedence. Done means the request succeeds without the environment variable and the test is recorded.
Move virtual key storage to Vault
After the provider key test passes, move the remaining provider keys in batches, then change access_mode to read_and_write so the gateway can write new virtual keys to Vault under the prefix. Create a test virtual key, confirm it appears under the expected prefix in Vault, and confirm a request made with that key succeeds. Confirm with your team how to verify team-level key management settings, because teams can carry their own configuration when creating keys. Done means a new virtual key exists in Vault, works in a request, and the gateway no longer depends on environment variables for these secrets.
Which secrets and settings map to which store
This table maps each secret and setting in a LiteLLM deployment to its source, its destination, the setting that controls it and the team that owns it. Read each row as a decision point, since the gateway reads provider keys and writes virtual keys only where access_mode and store_virtual_keys allow it. Confirm exact paths, names and policies in your own Vault or cloud account before you configure anything.
| Item | Source and destination | Controlling LiteLLM setting | Owner |
|---|---|---|---|
| Provider API keys | Source: your secret store. Destination: read by LiteLLM at runtime. | key_management_system, with access_mode set to read_only | Platform team, with each provider account owner |
| LiteLLM master key | Source: generated and held in your secret store. Destination: injected into the proxy process, starting with sk-. | LITELLM_MASTER_KEY environment variable | Security team holds it, platform team rotates it |
| Virtual keys for users and teams | Source: created in the gateway and recorded in PostgreSQL. Destination: written to the secret store when enabled. | store_virtual_keys, access_mode (write_only or read_and_write), team-level secret manager settings | Gateway admins for user keys, team owners for team keys |
| Prefix for stored virtual keys | Source: a naming standard you define. Destination: applied to each virtual key entry in the secret store. | The stored-key prefix setting (confirm exact name in LiteLLM docs) | Platform team, agreed with security for path policies |
| Vault login credential | Source: AppRole, TLS certificate or token issued by a Vault administrator. Destination: LiteLLM proxy configuration. | HashiCorp Vault authentication settings, plus namespace if using Vault Enterprise | Vault administrators issue, platform team deploys |
| Cloud credential for AWS, Azure or Google | Source: a cloud identity with access to the secret service. Destination: the LiteLLM process or its workload identity. | key_management_system, plus the cloud's standard auth method (confirm in your account) | Cloud team |
Per-team secret manager settings and who owns each virtual key
Team-level secret manager settings let each team bring its own key management configuration, and LiteLLM applies that configuration when it creates virtual keys tied to the team. The decision you face is whether all teams share one secret store or each team gets its own. Per-team settings make the second option possible, but they do not make it the right choice by default. Before you write any team configuration, decide where the provider API keys and virtual keys for each team will live, who can read them, and who can change the settings that point LiteLLM at them.
One shared store versus per-team stores. A single shared store, such as one HashiCorp Vault mount or one AWS Secret Manager account and region, is simpler to back up, audit and rotate, and it keeps one set of access policies to review. Per-team stores give a team separate access boundaries and separate rotation schedules, which can matter when a team is a regulated business unit or a tenant with its own contractual obligations. The cost is more policies, more backends to monitor and more places a misconfigured setting can send a key. Many organizations pick one shared store for most teams and reserve separate stores for the few teams with a hard isolation requirement.
Naming and prefix discipline. Team settings rely on the prefix that LiteLLM uses for stored virtual keys and on the paths or names of the secrets it reads. Agree on a naming scheme before the first team is onboarded, for example one that embeds the team identifier and the environment, and enforce it in a review step rather than by convention. Confirm whether two teams can ever resolve to the same prefix, and whether a team's settings can point at another team's path. Overlapping prefixes are the most common way a key ends up visible to the wrong group, so test this with a non-production key before rollout.
Who owns what. Platform admins own the gateway, the default key management system, the backend credentials LiteLLM uses to authenticate (for Vault, the AppRole or other method chosen for the proxy), and the access mode for each backend. Team admins own the choice of model, budgets and the team's own key lifecycle inside the boundary the platform has approved. Write this split down as a responsibility matrix, and make sure team admins cannot change the secret manager fields that point to a store outside their approved set. Also decide who approves a new team configuration and who can revoke a virtual key when a person leaves.
What to confirm in your LiteLLM version. Team-level secret manager settings are an Enterprise capability in the secret manager documentation, so confirm your license covers them. Then verify, in your own deployment and on the version you run, how team settings interact with the global settings: whether a team configuration fully replaces the default, whether access_mode applies per team, how an unset team field falls back, and whether the prefix is applied as you expect. Check the current LiteLLM secret managers documentation and release notes for your version, and record the results as a test case. Do not assume behavior carries over from another release line.
Hardening the connection between LiteLLM and the secret store
Moving provider keys and virtual keys out of environment variables only helps if the connection to the secret store is itself locked down. The cards below cover the credentials LiteLLM uses to log in, the trust it places in the Vault endpoint, the permissions it holds, and the records each side keeps. Check each item against your own Vault or cloud configuration before go-live.
AppRole credential handling
LiteLLM authenticates to HashiCorp Vault with AppRole, the method its documentation recommends. The gateway holds a role ID and a secret ID, so the secret ID is the credential that needs a delivery path and a rotation plan. Decide how the secret ID reaches the proxy host or pod without appearing in images, shell history or plain environment files. Agree with your Vault team how often secret IDs are regenerated and how old ones are revoked, then test that rotation on a staging gateway before production.
TLS verification for Vault connections
Configure the gateway to trust the internal certificate authority that signed your Vault listener certificate, and confirm that certificate verification stays enabled in every environment. If your team uses TLS certificate authentication instead of AppRole, the client certificate and its private key need the same controlled storage, rotation and expiry tracking as any other login credential. Where Vault Enterprise namespaces are in use, check the namespace paths used for login and for secret operations, since a wrong path can fail in ways that look like authentication errors.
Least-privilege policies per access mode
The access_mode setting decides what the gateway may do with the store. read_only is the default, while write_only and read_and_write allow writes such as storing virtual keys. Write one Vault policy for each mode and each team path, granting only the read or create and update capabilities that mode needs. A read-only gateway should have no delete or list rights on paths it never uses, and the policies should be reviewed whenever a team's secret manager settings change.
Master key in a secret manager
LiteLLM recommends keeping LITELLM_MASTER_KEY in a secret manager, and the value must start with sk-. The master key administers the proxy, so treat it as more privileged than any virtual key. Decide which system holds it, who can read it, and how it reaches the process at startup. Confirm that it does not end up in Helm values, container images or CI logs, and plan how it is rotated, including how running pods pick up the new value.
IP allowlisting and RBAC controls
IP allowlisting and organization or team RBAC are Enterprise features in LiteLLM. Restrict which networks can reach the admin surface, and limit who can change secret manager settings such as key_management_system, access_mode and per-team configurations. These settings control where provider keys are read from and where virtual keys are written, so they should belong to a small, named group. Ask your LiteLLM licensing contact to confirm which of these controls your license includes before you design around them.
Audit logs on both sides
Match secret reads and writes in the LiteLLM audit trail, which is an Enterprise feature, to the matching entries in the secret store's own audit log, using the key name and timestamp. Confirm that the store's audit logging captures operations made under the gateway's Vault identity, and that both sets of logs are forwarded to a system your security team reviews. A practical test is to create and then rotate a test virtual key and check that both logs record each step.
Testing that keys load from the store and nothing leaks back to the environment
The test plan should prove three things before the gateway serves production traffic: provider keys load from the secret store after a restart, virtual keys are written to the store under the expected prefix, and the gateway fails visibly when the store cannot be reached. Run every check against the same key_management_system, access_mode and team-level settings that production will use, not against a simplified development configuration. Before the first run, write down the expected result for each provider, each team and each secret path, including which AppRole or policy applies. Confirm in the LiteLLM secret manager documentation for your release which settings are read once at startup and which are read on each request, because that determines what a restart test actually proves.
For the restart test, remove the provider keys from the deployment, restart the proxy pods, and send a test request through a route for each provider. Each request should succeed, and the gateway logs should show that the key came from the configured store. Repeat this for every team that has its own key management configuration, since a team-level setting that fails silently would leave that team's traffic depending on a different source. For the virtual key test, create a key for a team through the admin UI or API, then read the store directly with a separate operator identity. Confirm that the entry exists under the configured prefix, sits in the path belonging to that team, and that the gateway's access_mode permits the write you expect. If access_mode is read_only, confirm that the gateway cannot create entries at all.
For the failure test, revoke the AppRole secret ID or disable the policy that the gateway uses, then force a fresh read by restarting a pod or waiting for the next lookup, depending on your design. Send requests and record the exact error text, the HTTP status returned to clients, and whether your alerting fires. The expected outcome is a clear authentication error from the store path, with no fallback to a cached or plaintext value that nobody intended to keep. Restore the AppRole and confirm that the gateway recovers without a manual redeploy. If recovery requires a restart, document that as an operational step in the runbook. Ask your team to name who receives the alert and who has the authority to restore access.
After the functional tests, scan for leftover plaintext. Check the environment of running pods, the container specs and Helm values in Git, CI job logs, and the gateway's own logs, including any request or debug logging that could echo a key. Use a secret scanner with patterns for each provider's key format and for your virtual key prefix, and treat any hit as a finding to fix before go-live. Rotation tests should run in a non-production gateway first. Rotate one provider key and one virtual key there, confirm that the old value stops working, and confirm that the new value loads the way your design intends, whether that is by restart or by a cache refresh. Confirm the cache behavior for your version before scheduling the same rotation in production.
Why LiteLLM cannot read or write secrets from Vault
This table maps the failures teams most often hit when LiteLLM reads provider keys or writes virtual keys to HashiCorp Vault or a cloud secret manager. Each row pairs a symptom with its likely cause, the fix to try first, and the audit trail entry that confirms the diagnosis. Work through the rows in the order the request fails: trust and network first, then authentication, then access mode, paths, permissions and team settings.
| Symptom | Likely cause | Fix | Check in the audit log |
|---|---|---|---|
| AppRole login rejected | Role ID or secret ID is wrong, expired, already used or not bound to the gateway's policy or CIDR range | Verify the role ID and a freshly issued secret ID reach the gateway, then check token policy and CIDR bindings | Vault audit entries for auth/approle/login showing the error and the role name requested |
| Namespace mismatch on Vault Enterprise | Login or secret path is set outside the namespace where the AppRole and secrets engine exist | Set the namespace in LiteLLM to match the Vault namespace that holds the role and engine | Namespace field and request path in the Vault audit entry, with a 403 on login or read |
| TLS certificate not trusted | Vault uses a private CA missing from the gateway's trust store, or the certificate name does not match the Vault address | Add the CA bundle to the gateway image or host trust store and use the hostname in the certificate | Gateway startup or proxy logs show certificate verification errors; no matching Vault audit entry exists because the request never arrived |
| Write blocked by access_mode | access_mode is still read_only (the default) while store_virtual_keys needs to write keys | Set access_mode to write_only or read_and_write for the scope that needs it, and keep read access as narrow as possible | Create or update operations absent from the Vault audit log, or denied; confirm the policy grants create and update on the prefix path |
| Keys missed because the prefix is wrong | Configured prefix differs from the stored path, such as a missing slash, extra environment suffix or changed naming | Align the prefix in LiteLLM with the stored path, then list paths to confirm the key names | List or read requests against paths that return not found, compared with the paths that were written |
| Cloud role lacks read or write permission | IAM role, managed identity or service account is missing get, put or new-version permission on the secret, or encrypt and decrypt on the KMS key | Grant only the actions the chosen access mode needs, scoped to named secrets and keys; confirm the same on AWS, Azure or Google | AWS CloudTrail, Azure Activity log or Google Cloud Audit Logs showing AccessDenied or PERMISSION_DENIED with the principal and action |
| Team settings not applied to new keys | Team-level key management is missing on the team that owns the virtual key, so the global configuration handles the write | Set the secret manager configuration on each team, create a test key for that team, and confirm where it was stored | Gateway admin records for the team and key creation, and cloud or Vault writes landing at the global path instead of the team path |
| Provider key fails to load at startup | Reference points to a secret name or version the gateway identity cannot read, often from a typo or an old version number | Check the secret name and version, then confirm the gateway identity has read permission on that exact secret | Read requests for the expected path in the Vault or cloud audit log, with any denial logged at the time the gateway started |
Questions buyers ask before hiring help with the Vault or cloud secret integration
How much does a Vault or cloud secret manager integration cost?
The price follows from a written scope, and the drivers below decide where the quote lands. The main drivers are the number of provider keys to move, the number of teams that need their own key configuration, the store type (HashiCorp Vault, AWS, Azure, Google or CyberArk each have different authentication and policy models), how mature your existing Vault setup is, how rotation is designed, and whether you hold an Enterprise license, because LiteLLM's secret manager integrations are an Enterprise feature. Cost has three parts: design and build effort paid to the implementer, your LiteLLM license, and your secret store's own charges. The build is one-time, while the license, your store charges and any optional support retainer recur. Ask the quote to show each of these as separate lines.
How long does it take to connect LiteLLM to Vault?
Duration depends on the same drivers as cost, so ask for a timeline stated in the written scope rather than a generic estimate. A typical sequence is confirming the store and authentication design, building a test gateway, configuring read access for provider keys, testing failover and rotation, and then moving production traffic inside an agreed change window. Access approvals inside your organization often set the pace more than the configuration itself, so request them early. Ask the provider to name which phases depend on your team's responses and how long each review cycle is expected to take.
What do we need to provide before the integration work starts?
Plan to provide four things: access to the Vault or cloud accounts involved, a test gateway that mirrors production, change windows for cutover, and a named owner who makes decisions and signs off on changes. Access should be scoped to setup tasks, with the implementer receiving only the permissions needed to configure policies, roles and test secrets. The test gateway should run the same LiteLLM version and database layout as production, which means PostgreSQL and, once more than one proxy instance runs, Redis 7.0 or newer. You should also confirm network paths and TLS certificates between the gateway and the secret store.
Can our internal team set up the Vault integration alone?
Yes, if your team already has the skills in the areas below and holds an Enterprise license. Your team needs working knowledge of Vault policies, auth methods and namespaces if you use Vault Enterprise, and enough LiteLLM operating experience to run the proxy with PostgreSQL and Redis. The areas most often underestimated are authentication design, least-privilege policy scoping and rotation. Many teams split the work: internal staff own the store and approvals, while an outside implementer designs the integration and runs acceptance tests. Be honest with yourself about who will carry the runbook after launch.
Which Vault authentication method should LiteLLM use?
LiteLLM's documentation recommends AppRole for HashiCorp Vault, and it also supports TLS certificate and token authentication. With AppRole, the gateway logs in with a role ID and a secret ID, so the design question is how the secret ID is delivered, stored and rotated. Bind the role to a policy that allows only the paths the gateway needs, and keep the secret ID out of environment files and container images. If you use Vault Enterprise namespaces, confirm that the login and secret paths are set to the right namespace in the test gateway before production. Check the current LiteLLM Vault documentation for the exact settings in your release.
What does read_only access mode mean for virtual keys?
The read_only mode is the default. In this mode LiteLLM reads provider API keys and other secrets from the store but does not write anything back. The write_only and read_and_write modes allow LiteLLM to store virtual keys in the secret manager, and the store_virtual_keys setting and the prefix for stored keys control where those keys land. A common starting point is read_only for provider keys, with write access enabled only for the teams and prefixes that need stored virtual keys. Test each mode on the test gateway, and confirm that write permissions are limited to the intended path.
What should we ask for in a written quote?
Ask the quote to list the scope in concrete terms: each secret store and its authentication method, the number of provider keys and teams in scope, the access modes per store, the rotation design, the test environments, the cutover support, the documentation and handover items, and any acceptance criteria. Also ask it to state assumptions about your Enterprise license, your change windows and your named owner, and to list what is excluded. Separate one-time build work from optional recurring support, and ask what happens if scope changes during the work. DeployOpen works on fixed-scope engagements, with scope, deliverables and timelines agreed in writing before work starts.
Who owns the secrets after handover?
Your organization owns the secret stores, the secrets in them and the access policies that govern them. The implementer should hand over the configuration, the policies and roles, a rotation runbook, and the test results from acceptance. Ask who holds administrative access to the Vault or cloud accounts after the engagement ends, and confirm that the named owner can revoke the gateway's access quickly. If you want ongoing help with upgrades, rotation reviews or incident support, that can be arranged as a retainer, and it is a separate line in the quote.
How DeployOpen scopes, delivers and supports the LiteLLM secret integration
DeployOpen approaches LiteLLM secret management as a defined piece of gateway work, tied to your own secret stores and your team structure. We plan the access mode, authentication method and per-team settings before any configuration changes, then deliver them inside the infrastructure you control.
How we scope
- The written scope names which secret stores are in use, such as HashiCorp Vault, AWS, Azure, Google or CyberArk.
- We record which secrets LiteLLM reads, such as provider API keys, and which it writes, such as virtual keys.
- The scope sets the access mode per store: read_only, write_only or read_and_write, with the reason for each.
How we build
- We configure key_management_system, store_virtual_keys and the stored key prefix against your secret store naming conventions.
- For HashiCorp Vault, we set up AppRole, TLS certificate or token authentication, and Vault Enterprise namespaces if you use them.
- We test secret reads, virtual key writes and access denial for each team before the gateway handles production traffic.
How we hand over
- You receive the configuration, the secret path layout and a record of which identities can read or write each secret.
- The runbook covers rotating provider keys, rotating Vault credentials and recovering from a secret store outage.
- Team-level secret manager settings are documented per team, so each team's virtual keys follow its own configuration.
How we support
- Ongoing support and upgrades are available as a retainer, which covers secret integration changes after go-live.
- Changes to the LiteLLM release line, such as moving to a newer supported minor version, are planned and tested in your environment.
- Ask any vendor or DeployOpen for written confirmation of which secret manager features apply to your edition, since some are Enterprise features.

