Skip to main content

Crate secret_vault

Crate secret_vault 

Source
Expand description

§Secret Vault for Rust

Library provides the support for the secrets coming to your application from the following sources::

  • Google Cloud Secret Manager
  • Amazon Secrets Manager
  • Environment variables
  • Files source (mostly designed to read K8S secrets mounted as files)
  • Temporarily available secret generator generated by cryptographic pseudo-random number generator

§Features

  • Reading/caching registered secrets and their metadata in memory from defined sources;
  • Extensible and strongly typed API to be able to implement any kind of sources;
  • Memory encryption using AEAD cryptography (optional);
  • Memory encryption using Google/AWS KMS envelope encryption (https://cloud.google.com/kms/docs/envelope-encryption) (optional);
  • Automatic refresh secrets from the sources support (optional);
  • Multi-sources support;
  • Snapshots for performance-critical secrets;

    // Describing secrets and marking them non-required
   // since this is only example and they don't exist in your project
   let secret_ref1 = SecretVaultRef::new("test-secret-xRnpry".into())
       .with_required(false)
       .with_secret_version("AWSCURRENT".into());
   let secret_ref2 = SecretVaultRef::new("another-secret-222222".into()).with_required(false);

   // Building the vault
   let vault = SecretVaultBuilder::with_source(
       aws::AwsSecretManagerSource::new(&config_env_var("ACCOUNT_ID")?).await?,
   )
   .with_encryption(ring_encryption::SecretVaultRingAeadEncryption::new()?)
   .with_secret_refs(vec![&secret_ref1, &secret_ref2])
   .build()?;

   // Load secrets from source
   vault.refresh().await?;

   // Reading the secret
   let secret_value: Option<Secret> = vault.get_secret_by_ref(&secret_ref1).await?;

   // Or
   let secret_value: Secret = vault.require_secret_by_ref(&secret_ref1).await?;

   // Using the Viewer API to share only methods able to read secrets
   let vault_viewer = vault.viewer();
   vault_viewer.get_secret_by_ref(&secret_ref2).await?;

§Complete examples, more detail docs and security considerations and benchmarks:

Available on github

Modules§

aws
errors
gcp
ring_encryption

Structs§

EncryptedSecretValue
FilesSource
FilesSourceOptions
FilesSourceOptionsInit
InsecureEnvSource
MockSecretsSource
MultipleSecretsSources
Secret
SecretInit
SecretMetadata
SecretMetadataAnnotation
SecretMetadataAnnotationInit
SecretMetadataInit
SecretMetadataLabel
SecretMetadataLabelInit
SecretName
SecretNamespace
SecretVault
SecretVaultAutoRefresher
SecretVaultAutoRefresherOptions
SecretVaultAutoRefresherOptionsInit
SecretVaultBuilder
SecretVaultHashMapSnapshot
SecretVaultHashMapSnapshotBuilder
SecretVaultKey
SecretVaultKeyInit
SecretVaultNoEncryption
SecretVaultRef
SecretVaultViewer
SecretVersion
TempSecretGenSource
TempSecretGenSourceOptions
TempSecretOptions
TempSecretOptionsInit

Enums§

SecretExpiration

Traits§

SecretVaultEncryption
SecretVaultSnapshot
SecretVaultSnapshotBuilder
SecretVaultView
SecretsSource

Functions§

generate_secret_value

Type Aliases§

SecretVaultResult