#vault #secret-management #token #interface #kubernetes #renewal

valensas-vault

一个提供与Vault交互方便接口的库

10个版本

0.2.3 2023年7月25日
0.2.2 2023年7月25日
0.1.5 2023年7月19日

547 in 身份认证

MIT 许可证

25KB
486 代码行

Valensas Vault - Vault库

此库提供了一个方便的接口来与Vault交互。它允许身份认证、密钥管理以及令牌续订。

用法

有关详细信息,请访问: https://docs.rs/valensas-vault 仓库: https://github.com/Valensas/rust-vault

安装

将以下内容添加到您的 Cargo.toml 文件中

[dependencies]
valensas-vault = "0.2.3"

lib.rs:

此库提供了一个方便的接口来与Vault交互。它允许身份认证、密钥管理以及令牌续订。

安装

将以下内容添加到您的 Cargo.toml 文件中

[dependencies]
valensas-vault = "0.2.3"

功能

仅支持KV v2密钥引擎的操作。可以使用令牌或Kubernetes身份验证进行身份验证。

用法

手动配置

根据需要创建VaultConfig和AuthMethod

 let config = VaultConfig {
     address: "https://127.0.0.1:8200".to_string(),
     mount_path: "asd".to_string(),
     client_timeout: std::time::Duration::from_secs(10),
     healthcheck_file_path: "/healthcheck".to_string(),
     login_retry_count: 10,
 };
 let auth_method: Arc<RwLock<dyn AuthMethod>> = Arc::new(RwLock::new(TokenAuth::new("some_token".to_string())));

从配置和身份验证方法创建VaultService

let vault_service = VaultService::new(config, Arc::clone(&auth_method)).await.unwrap();

环境配置

以下环境变量用于配置VaultService

 VAULT_ADDR: "https://127.0.0.1:8200"
 VAULT_MOUNT_PATH: secret
 VAULT_HEALTH_CHECK_FILE: healthcheck_file
 VAULT_CLIENT_TIMEOUT: 5s
 VAULT_LOGIN_RETRY_COUNT: 5

Kubernetes身份验证

VAULT_AUTH_METHOD: Kubernetes
VAULT_KUBERNETES_TOKEN_PATH: /var/run/secrets/kubernetes.io/serviceaccount/token

令牌身份验证

VAULT_AUTH_METHOD: Token
VAULT_TOKEN: vault_token

给定值是变量的默认值。请确保用您的变量替换Vault配置中的变量。

示例用法

use std::time::Duration;
use valensas_vault::service::{HealthCheckData, VaultService};
use serde::{Deserialize, Serialize};

#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
struct TestData {
    name: String,
}

#[tokio::main]
async fn main() {
    let (vault_service, _auth_method) = VaultService::from_env().await.unwrap();

    // Write a secret to Vault
    let secret_key = "my-new-secret-key";
    let secret_value = TestData {
        name: "data".to_string(),
    };
    vault_service.insert(secret_key, secret_value).await.unwrap();
    println!("Secret inserted successfully.");

    // Read a secret from Vault
    let value = vault_service.read::<TestData>(secret_key).await.unwrap();
    println!("Secret read successfully.");
}

令牌续订

 use std::time::Duration;
 use valensas_vault::service::{VaultService, TokenRenewable};
 use tokio::sync::RwLock;
 use std::sync::Arc;

 #[tokio::main]
 async fn main() {
     // Initialize the Vault service
     let (vault_service, auth_method) = VaultService::from_env().await.unwrap();

     let vault_service = Arc::new(RwLock::new(vault_service));

     // Start token renewal
     let handler = vault_service.start_token_renewal(auth_method);

     // Perform some operations...
     // ...

     // Stop token renewal
     // handler may be none in case if auth method is Kubernetes
     if let Ok(Some(token_renewal_handler)) = handler {
         vault_service.stop_token_renew_loop(token_renewal_handler).await;
     }
 }

依赖

~10–23MB
~357K SLoC