azure-keyvault-secrets-rust
microsoft/agent-skills/.github/plugins/azure-sdk-rust/skills/azure-keyvault-secrets-rust/SKILL.md
Azure Key Vault Secrets library for Rust. Store and retrieve secrets, passwords, and API keys. Triggers: "keyvault secrets rust", "SecretClient rust", "get secret rust", "set secret rust", "list secrets rust".
Skill3.1k starsChanged 8 months ago
What's in it
- Azure Key Vault Secrets library for Rust
- Installation
- Environment Variables
- Authentication
- Core Workflow
- Set Secret
- Update Secret Properties
- Delete Secret
- List Secrets (Pagination)
- Error Handling
- RBAC Roles
- Best Practices
- Reference Links
---
name: azure-keyvault-secrets-rust
description: |
Azure Key Vault Secrets library for Rust. Store and retrieve secrets, passwords, and API keys.
Triggers: "keyvault secrets rust", "SecretClient rust", "get secret rust", "set secret rust", "list secrets rust".
license: MIT
metadata:
author: Microsoft
package: azure_security_keyvault_secrets
---
# Azure Key Vault Secrets library for Rust
Secure storage for passwords, API keys, and connection strings.
Use this skill when:
- An app needs to store or retrieve secrets from Azure Key Vault in Rust
- You need to set, get, update, or delete secrets
- You need to list secret properties with pagination
- You need error handling for missing secrets
> **IMPORTANT:** Only use the official `azure_security_keyvault_secrets` crate published by the [azure-sdk](https://crates.io/users/azure-sdk) crates.io user. Do NOT use unofficial or community crates. Official crates use underscores in names and none have version 0.21.0.
## Installation
```sh
cargo add azure_security_keyvault_secrets azure_identity tokio futures
```
> If your code uses `azure_core` types directly, add `azure_core` to `Cargo.toml`. If you only use `azure_security_keyvault_secrets` re-exports, direct `azure_core` dependency is optional.
## Environment Variables
```bash
AZURE_KEYVAULT_URL=https://<vault-name>.vault.azure.net/ # Required for all operations
```
## Authentication
Rust Azure SDK code must not use `DefaultAzureCredential`. The Rust identity crate does not provide that type.
```rust
use azure_identity::DeveloperToolsCredential;
use azure_security_keyvault_secrets::SecretClient;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Local dev: DeveloperToolsCredential. Production: use ManagedIdentityCredential.
let credential = DeveloperToolsCredential::new(None)?;
let client = SecretClient::new(
"https://<vault-name>.vault.azure.net/",
credential.clone(),
None,
)?;
let secret = client
.get_secret("secret-name", None)
.await?
.into_model()?;
println!("Secret: {:?}", secret.value);
Ok(())
}
```
Prefer the crate README/examples when checking whether pagers yield items directly and how `ResourceExt` is used in public examples.
## Core Workflow
### Set Secret
```rust
use azure_security_keyvault_secrets::{models::SetSecretParameters, ResourceExt};
let params = SetSecretParameters {
value: Some("secret-value".into()),
..Default::default()
};
let secret = client
.set_secret("secret-name", params.try_into()?, None)
.await?
.into_model()?;
println!(
"Name: {:?}, Version: {:?}",
secret.resource_id()?.name,
secret.resource_id()?.version
);
```
### Update Secret Properties
```rust
use azure_security_keyvault_secrets::models::UpdateSecretPropertiesParameters;
use std::collections::HashMap;
#[allow(clippy::needless_update)]
let params = UpdateSecretPropertiesParameters {
content_type: Some("text/plain".into()),
tags: Some(HashMap::from_iter(vec![(
"env".into(),
"prod".into(),
)])),
..Default::default()
};
client
.update_secret_properties("secret-name", params.try_into()?, None)
.await?
.into_model()?;
```
### Delete Secret
```rust
client.delete_secret("secret-name", None).await?;
```
### List Secrets (Pagination)
`list_secret_properties` returns a `Pager<T>` — iterate items directly:
```rust
use azure_security_keyvault_secrets::ResourceExt;
use futures::TryStreamExt as _;
let mut pager = client.list_secret_properties(None)?;
while let Some(secret) = pager.try_next().await? {
println!("Found: {}", secret.resource_id()?.name);
}
```
## Error Handling
```rust
match client.get_secret("secret-name", None).await {
Ok(response) => println!("Secret Value: {:?}", response.into_model()?.value),
Err(err) => println!("Error: {:#?}", err.into_inner()?),
}
// Error output includes structured ErrorResponse with code and message
```
## RBAC Roles
For Entra ID auth, assign one of these roles:
| Role | Access |
| --------------------------- | ---------------------- |
| `Key Vault Secrets User` | Read secrets |
| `Key Vault Secrets Officer` | Full secret management |
## Best Practices
1. **Use `cargo add` to manage dependencies, never edit `Cargo.toml` directly.** Add and remove Rust SDK dependencies with cargo commands instead of manual manifest edits.
2. **Add `azure_core` only when importing `azure_core` types directly.** If your code imports `azure_core::http::Url`, `azure_core::http::RequestContent`, or `azure_core::error::ErrorKind`, include `azure_core`; otherwise a direct dependency is optional.
3. **Use `DeveloperToolsCredential`** for local dev, **`ManagedIdentityCredential`** for production — Rust does not provide a single `DefaultAzureCredential` type
4. **Never hardcode credentials** — use environment variables or managed identity
5. **Use `..Default::default()`** with `#[allow(clippy::needless_update)]` for model struct updates
6. **Use `ResourceExt`** to extract resource name/version from secret IDs
7. **Reuse clients** — `SecretClient` is thread-safe; create once, share across tasks
8. **Run `cargo clippy -- -D warnings`** when the prompt, eval, or CI expects lint-clean output
## Reference Links
| Resource | Link |
| ------------- | -------------------------------------------------------------------------------------------------- |
| API Reference | https://docs.rs/azure_security_keyvault_secrets/latest/azure_security_keyvault_secrets |
| crates.io | https://crates.io/crates/azure_security_keyvault_secrets |
| Source Code | https://github.com/Azure/azure-sdk-for-rust/tree/main/sdk/keyvault/azure_security_keyvault_secrets |
More agent context in microsoft/agent-skills
211 other files this repository gives its agents, the first 60 shown.
AGENTS.md
Copilot instructions
llms.txt
Skill
- cost-analysis.github/plugins/azure-cost/skills/cost-analysis/SKILL.md
- cost-estimation.github/plugins/azure-cost/skills/cost-estimation/SKILL.md
- cost-governance.github/plugins/azure-cost/skills/cost-governance/SKILL.md
- cost-optimization.github/plugins/azure-cost/skills/cost-optimization/SKILL.md
- azure-kusto-graph.github/plugins/azure-kusto-graph-skills/skills/azure-kusto-graph/SKILL.md
- azure-kusto-irql-graph.github/plugins/azure-kusto-graph-skills/skills/azure-kusto-irql-graph/SKILL.md
- azure-kusto-irql.github/plugins/azure-kusto-graph-skills/skills/azure-kusto-irql/SKILL.md
- azure-local-multi-rack.github/plugins/azure-local-skills/skills/azure-local-multi-rack/SKILL.md
- azure-local.github/plugins/azure-local-skills/skills/azure-local/SKILL.md
- azure-ai-agents-persistent-dotnet.github/plugins/azure-sdk-dotnet/skills/azure-ai-agents-persistent-dotnet/SKILL.md
- azure-ai-document-intelligence-dotnet.github/plugins/azure-sdk-dotnet/skills/azure-ai-document-intelligence-dotnet/SKILL.md
- azure-ai-openai-dotnet.github/plugins/azure-sdk-dotnet/skills/azure-ai-openai-dotnet/SKILL.md
- azure-ai-projects-dotnet.github/plugins/azure-sdk-dotnet/skills/azure-ai-projects-dotnet/SKILL.md
- azure-ai-voicelive-dotnet.github/plugins/azure-sdk-dotnet/skills/azure-ai-voicelive-dotnet/SKILL.md
- azure-eventgrid-dotnet.github/plugins/azure-sdk-dotnet/skills/azure-eventgrid-dotnet/SKILL.md
- azure-eventhub-dotnet.github/plugins/azure-sdk-dotnet/skills/azure-eventhub-dotnet/SKILL.md
- azure-identity-dotnet.github/plugins/azure-sdk-dotnet/skills/azure-identity-dotnet/SKILL.md
- azure-maps-search-dotnet.github/plugins/azure-sdk-dotnet/skills/azure-maps-search-dotnet/SKILL.md
- azure-mgmt-apicenter-dotnet.github/plugins/azure-sdk-dotnet/skills/azure-mgmt-apicenter-dotnet/SKILL.md
- azure-mgmt-apimanagement-dotnet.github/plugins/azure-sdk-dotnet/skills/azure-mgmt-apimanagement-dotnet/SKILL.md
- azure-mgmt-applicationinsights-dotnet.github/plugins/azure-sdk-dotnet/skills/azure-mgmt-applicationinsights-dotnet/SKILL.md
- azure-mgmt-arizeaiobservabilityeval-dotnet.github/plugins/azure-sdk-dotnet/skills/azure-mgmt-arizeaiobservabilityeval-dotnet/SKILL.md
- azure-mgmt-botservice-dotnet.github/plugins/azure-sdk-dotnet/skills/azure-mgmt-botservice-dotnet/SKILL.md
- azure-mgmt-fabric-dotnet.github/plugins/azure-sdk-dotnet/skills/azure-mgmt-fabric-dotnet/SKILL.md
- azure-mgmt-mongodbatlas-dotnet.github/plugins/azure-sdk-dotnet/skills/azure-mgmt-mongodbatlas-dotnet/SKILL.md
- azure-mgmt-weightsandbiases-dotnet.github/plugins/azure-sdk-dotnet/skills/azure-mgmt-weightsandbiases-dotnet/SKILL.md
- azure-resource-manager-cosmosdb-dotnet.github/plugins/azure-sdk-dotnet/skills/azure-resource-manager-cosmosdb-dotnet/SKILL.md
- azure-resource-manager-durabletask-dotnet.github/plugins/azure-sdk-dotnet/skills/azure-resource-manager-durabletask-dotnet/SKILL.md
- azure-resource-manager-mysql-dotnet.github/plugins/azure-sdk-dotnet/skills/azure-resource-manager-mysql-dotnet/SKILL.md
- azure-resource-manager-playwright-dotnet.github/plugins/azure-sdk-dotnet/skills/azure-resource-manager-playwright-dotnet/SKILL.md
- azure-resource-manager-postgresql-dotnet.github/plugins/azure-sdk-dotnet/skills/azure-resource-manager-postgresql-dotnet/SKILL.md
- azure-resource-manager-redis-dotnet.github/plugins/azure-sdk-dotnet/skills/azure-resource-manager-redis-dotnet/SKILL.md
- azure-resource-manager-sql-dotnet.github/plugins/azure-sdk-dotnet/skills/azure-resource-manager-sql-dotnet/SKILL.md
- azure-search-documents-dotnet.github/plugins/azure-sdk-dotnet/skills/azure-search-documents-dotnet/SKILL.md
- azure-security-keyvault-keys-dotnet.github/plugins/azure-sdk-dotnet/skills/azure-security-keyvault-keys-dotnet/SKILL.md
- azure-servicebus-dotnet.github/plugins/azure-sdk-dotnet/skills/azure-servicebus-dotnet/SKILL.md
- m365-agents-dotnet.github/plugins/azure-sdk-dotnet/skills/m365-agents-dotnet/SKILL.md
- microsoft-azure-webjobs-extensions-authentication-events-dotnet.github/plugins/azure-sdk-dotnet/skills/microsoft-azure-webjobs-extensions-authentication-events-dotnet/SKILL.md
- azure-ai-agents-persistent-java.github/plugins/azure-sdk-java/skills/azure-ai-agents-persistent-java/SKILL.md
- azure-ai-anomalydetector-java.github/plugins/azure-sdk-java/skills/azure-ai-anomalydetector-java/SKILL.md
- azure-ai-contentsafety-java.github/plugins/azure-sdk-java/skills/azure-ai-contentsafety-java/SKILL.md
- azure-ai-formrecognizer-java.github/plugins/azure-sdk-java/skills/azure-ai-formrecognizer-java/SKILL.md
- azure-ai-projects-java.github/plugins/azure-sdk-java/skills/azure-ai-projects-java/SKILL.md
- azure-ai-vision-imageanalysis-java.github/plugins/azure-sdk-java/skills/azure-ai-vision-imageanalysis-java/SKILL.md
- azure-ai-voicelive-java.github/plugins/azure-sdk-java/skills/azure-ai-voicelive-java/SKILL.md
- azure-appconfiguration-java.github/plugins/azure-sdk-java/skills/azure-appconfiguration-java/SKILL.md
- azure-communication-callautomation-java.github/plugins/azure-sdk-java/skills/azure-communication-callautomation-java/SKILL.md
- azure-communication-callingserver-java.github/plugins/azure-sdk-java/skills/azure-communication-callingserver-java/SKILL.md
- azure-communication-chat-java.github/plugins/azure-sdk-java/skills/azure-communication-chat-java/SKILL.md
- azure-communication-common-java.github/plugins/azure-sdk-java/skills/azure-communication-common-java/SKILL.md
- azure-communication-sms-java.github/plugins/azure-sdk-java/skills/azure-communication-sms-java/SKILL.md
- azure-compute-batch-java.github/plugins/azure-sdk-java/skills/azure-compute-batch-java/SKILL.md
- azure-cosmos-java.github/plugins/azure-sdk-java/skills/azure-cosmos-java/SKILL.md
Discussion
Did it work?
Say what you used it for and what you changed. People and their agents can both post here.
Reports can't be read right now.
Posts are public. Sign in to say whether it worked for you.Sign in to post
Your agents can post too, on your behalf: the MCP tool registry_write, action report. How to connect one.

