๐Ÿ”’ HashiCorp Vault Explained: Components, Architecture, and Data Protection

Tanvir SayyadTanvir Sayyad
11 min read

Vault by HashiCorp is a great tool. Its main purpose is to protect our secrets, store sensitive data and encrypt everything correctly. This guide will take you through Vault's key elements such as storage backends, secrets engines, auth methods and the data protection architecture of vault. We will see how every piece comes together to provide a secure, reliable and efficient way of handling sensitive information which is what makes Vault the go to vault for organizations everywhere. ๐Ÿ”

HashiCorp Vault Components

๐Ÿ› ๏ธ Storage Backends

Storage backends are a kind of warehouse that Vault stores our secrets in. This is where everything is stored, securely locked and organized. A storage backend can be either Consul, DynamoDB or even an S3 bucket, each ensuring our data is encrypted and safe.

๐Ÿ”‘ Key Features of Storage Backends:

  • Location for Secrets: Vault uses the storage backend to keep all our valuable data, ensuring everything is encrypted to stay secure.

  • Encrypted Storage: Data in Vault is encrypted in two stages:

    • In Transit: Like a package being delivered, the data is protected while moving.

    • At Rest: Once the data reaches the warehouse, it is securely locked.

  • High Availability: Certain backends, like Consul or Raft, support high availability, allowing multiple Vault servers to work together. Imagine a 24/7 warehouse with multiple security guards ensuring our data's safety.

  • One Backend per Cluster: Each Vault cluster is linked to a single storage backend. Picture each group of servers having their own locked warehouse. ๐Ÿข

๐Ÿ›ก๏ธ Secrets Engines

๐Ÿ”ฅ Why Are Secrets Engines Important?

Secrets engines are like the factory where Vault creates, stores, or encrypts secrets. For example, the AWS Secrets Engine allows us to generate AWS credentials dynamically, and the Database Secrets Engine can generate database credentials for PostgreSQL or MySQL on demand. Without secrets engines, Vault would just be an empty boxโ€”itโ€™s the core function that makes Vault valuable.

๐Ÿ”‘ How Do Secrets Engines Work?

  • Store Secrets: They store passwords, certificates, or keys.

  • Generate Secrets: They create dynamic credentials for other services.
    Example: If we need a temporary key to access an online service, Vault can create one just for that moment.

  • Encryption: They encrypt any sensitive data before storing it.

Vault Triangle

๐Ÿ”ง Enabling and Managing Secrets Engines

  • Enable Secrets Engines: We enable a secrets engine via the CLI or API. By default, the secrets engine is mounted at a specific path:

      $ vault secrets enable -path=my-kv kv
    

    This command enables a key-value secrets engine at the path my-kv. Customizing paths helps us organize secrets better, especially when managing multiple environments.

  • Default Paths and Mount Points: Secrets engines are mounted at a unique path. For example, enabling the AWS Secrets Engine will make it accessible at aws/. This flexibility allows us to have separate paths for different teams or applications.

  • Disabling Secrets Engines: Disabling a secrets engine will remove access to all secrets managed by that engine. For example:

      $ vault secrets disable my-kv
    

    This command disables the secrets engine at my-kv, effectively removing all secrets stored there.

    Note: Care must be taken when disabling a secrets engine, as it immediately revokes access to all secrets managed by that engine.

๐Ÿ“„ Working with Data in Secrets Engines

ActionCommandDescription
Add Data$ vault kv put kv/hello target=worldCreates a secret at the path kv/hello with the key-value pair target=world.
Read Data$ vault kv get kv/helloRetrieves the stored data, showing the key (target) and its value (world).
Update Secrets$ vault kv put kv/my-secret value="s3c(eT"Stores the secret at kv/my-secret, which can be retrieved similarly with kv get.
Delete Secrets$ vault kv delete kv/my-secretDeletes the secret at the specified path.
List Secrets$ vault kv list kv/Lists all the keys under kv/, like hello, making it easier to manage secrets.
  • Add Data: To add data to a secrets engine, we use the kv put command. For instance:

      $ vault kv put kv/hello target=world
    

    This command creates a secret at the path kv/hello with the key-value pair target=world.

  • Read Data: To read the secrets stored at a specific path, we use the kv get command:

      $ vault kv get kv/hello
    

    This command retrieves the stored data, showing the key (target) and its value (world).

  • Update Secrets: We can add more secrets to a different path:

      $ vault kv put kv/my-secret value="s3c(9T"
    

    This stores the secret at kv/my-secret, and we can retrieve it similarly with kv get.

  • Delete Secrets: To delete secrets, use the kv delete command:

      $ vault kv delete kv/my-secret
    

    This deletes the secret at the specified path.

  • List Secrets: We can also list existing keys at a specific path to see what secrets are available:

      $ vault kv list kv/
    

    This command lists all the keys under kv/, like hello, making it easier to manage secrets.

๐Ÿ›ˆ Secrets Engines Features:

  • On-Demand Credentials: Imagine a password machine that gives us a new password every time we need it, instead of keeping an old one.

  • Multiple Engines: We can use different secrets engines for different needs. Think of multiple labeled drawersโ€”one for passwords, one for certificates, and another for tokens.

  • Paths for Isolation: All secrets are kept in different rooms (paths), and we need the correct key to access each room.

  • Flexible Secrets Storage: Secrets engines can be used for static secrets (e.g., storing existing credentials) or dynamic secrets (e.g., generating temporary access credentials). This flexibility allows us to meet different security needs easily.

  • Example Secrets Engines:

    1. Key/Value Secrets Engine: A simple key-value store that we use to manage arbitrary secrets like API keys or configuration data.

    2. PKI Secrets Engine: Used to generate dynamic X.509 certificates. Think of this as an automated certificate authority, providing certificates on demand.

    3. Transit Secrets Engine: This engine provides encryption as a service. It encrypts data without storing it, meaning we can protect sensitive information without having to manage the actual keys ourselves.

๐Ÿ”‘ Benefits of Secrets Engines

  • Dynamic Secrets for Security: By generating secrets dynamically, we reduce the risk of credential leakage since secrets are short-lived.

  • Auditability: Every interaction with a secrets engine is logged, providing a clear audit trail. This ensures we have visibility over who accessed which secrets and when.

  • Reduced Secrets Sprawl: Secrets engines help centralize secrets management, reducing the spread of hardcoded credentials across different systems.

๐Ÿ”’ Auth Methods

๐Ÿง‘โ€๐Ÿ’ป How to Authenticate to Vault?

To open Vault, we need to authenticateโ€”which means proving our identity to gain access. This can be done using different methods depending on whether we are a human user or an application. For example, a human user might use a username and password or a third-party login like Google (OIDC), whereas an application might use a token or TLS certificate to authenticate.

๐Ÿ”‘ Types of Auth Methods:

  1. Human Authentication: Like using a username and password.

    • Examples: Username/Password, Google login (OIDC), LDAP.
  2. Machine Authentication: Used by applications or robots.

    • Examples: Tokens, AppRole, TLS certificates.

โš™๏ธ Enabling and Disabling Auth Methods

  • Enable Auth Methods: We can enable an auth method using the CLI or API. For example:

      $ vault auth enable userpass
    

    When enabled, auth methods work like secrets engines and are mounted in the Vault mount table. By default, all auth methods are mounted under the auth/ prefix. For instance, enabling the GitHub auth method will make it accessible at auth/github.

  • Custom Path for Auth Methods: We can customize the mount path to suit advanced use cases. For example:

      $ vault auth enable -path=my-login userpass
    

    This enables the userpass auth method at the auth/my-login path, allowing greater flexibility in managing authentication.

  • Disable Auth Methods: When an auth method is disabled, all users authenticated via that method are automatically logged out, ensuring no lingering access points.

๐ŸŒ Token System

  • Tokens are like a hotel room card once authenticated, we use the card to access our designated area.

  • Each token has:

    1. Policies: These define what we can access, like which rooms in the hotel weโ€™re allowed to enter.

    2. TTL (Time To Live): Tokens have an expiry time, just like how a hotel keycard only works until checkout.

๐Ÿ  Audit Devices

๐ŸŽฅ What Are Audit Devices?

Audit devices are like security cameras for Vault. They record every move, including access attempts, successful authentications, and system interactions, to ensure everything is safe and accountable.

๐Ÿ”‘ How Do Audit Devices Work?

  • Logging Everything: Audit devices ensure every action is recorded. Logs are formatted in JSON for easy readability. Sensitive information, like passwords, is hidden in these logs to maintain security.

  • Enabling/Disabling Audit Devices:

    1. Enable: To enable an audit device, use the command:

       $ vault audit enable file file_path=/var/log/vault_audit.log
      

      This enables the file audit device and specifies the log path.

    2. Disable: When disabled, the audit device stops receiving logs immediately, but previously stored logs remain intact.

      Note: Configuration is replicated across nodes in a cluster. Ensure all nodes can log successfully to avoid blocking requests.

  • Multiple Audit Devices: We recommend having more than one audit device, just like having multiple security cameras around a bank.

  • Blocked Audit Devices:

    1. Blocking Failures: If an audit device cannot write logs, Vault will not respond until the issue is resolved.

    2. Non-Blocking Failures: If multiple audit devices are enabled, Vault can proceed as long as one device is able to write logs successfully.

  • Priority for Safety: If Vault cannot write logs, it wonโ€™t proceed. This is like not letting anyone into a bank until the security cameras are running.

๐Ÿ›๏ธ Vault Architecture

Architecture Overview

Vaultโ€™s architecture is the foundation that keeps everything safe and organized:

  • HTTPS & API Integration: Users and applications communicate with Vault using HTTPS and an API. Think of it as sending letters through a highly secure mailbox.

  • Storage Backend: All data is stored here. Whether itโ€™s Consul, DynamoDB, S3 bucket, or even in memory during development modeโ€”Vault keeps everything encrypted for safety.

  • Vault Core: The core is where all the important features reside, like the policy store, audit devices, system backend, secrets engines, and auth methods.

  • Cryptographic Barrier: All core components are protected by a cryptographic barrier.

    • We must be authenticated to cross this barrier, ensuring only authorized entities get through.

    • The storage backend is not trusted by Vault by default. Everything is encrypted before it leaves the Vault core.

๐Ÿ›ค๏ธ Vault Paths

  • Paths as Organizers: Paths help organize secrets and manage access, creating isolated environments for different teams or projects. For instance, separate paths for a production database and a development database keep the environments independent and secure.

  • Considerations for Assigning Paths:

    1. Choose meaningful and unique names.

    2. Paths should be descriptive enough to indicate the type of secret or service it relates to (e.g., /aws/credentials/dev for AWS credentials in the development environment).

    3. This makes managing secrets easier and prevents confusion.

๐Ÿ” Vault Data Protection

๐Ÿ›ก๏ธ How Does Vault Protect Our Data?

So, how does Vault actually keep our most critical secrets safe?

  • Encrypted Storage Backend: Data is always encrypted before being stored. Itโ€™s like making sure all the treasure is put into a locked box before moving it into a vault.

  • Encryption Key and Master Key:

    • Encryption Key: This key is used to encrypt the data before it is stored.

    • Master Key: This key encrypts the encryption key itself. Think of it as a double lock:

      • Encryption Key locks the data.

      • Master Key locks the encryption key to ensure an extra layer of security.

  • Decryption Process: When Vault needs data, the master key is used to unlock the encryption key, then encryption key is used to decrypt the data. The encryption key is stored in memory for Vault nodes to use.

๐Ÿ”‘ Master Key vs. Encryption Key

FeatureMaster KeyEncryption Key
PurposeEncrypts and decrypts the encryption key.Encrypts and decrypts actual data in backend storage.
CreationCreated during Vault initialization.Created as needed to encrypt backend data.
StorageNot stored in traditional unseal methods for security.Stored in an encrypted form alongside backend data.
RotationRarely rotated, mainly used for key management.Can be easily rotated for added security, ensuring continuity.
Protection LevelActs as an additional layer of security for encryption key.Directly protects sensitive data by encryption.

Vaultโ€™s layers of encryption make sure that even if someone accesses the storage backend, they still cannot read the data. This double protection makes unauthorized access nearly impossible.

๐ŸŽฏ Conclusion

HashiCorp Vault is an essential tool for securely managing and storing secrets. Understanding its core components such as storage backends, secrets engines, auth methods, audit devices, and its architecture is crucial for effective use. Each component plays a vital role in creating a secure system that integrates storage, access, monitoring, and data protection, ensuring confidentiality and integrity.

The storage backend acts as a secure warehouse `for data, while secrets engines function as factories generating and managing secrets. Auth methods provide the keys for access, and audit devices serve as security cameras monitoring all activities. The architecture ties everything together under a cryptographic barrier, ensuring data remains protected from unauthorized access.

By mastering these components, organizations can confidently secure sensitive information, manage secrets efficiently, and establish a high-security environment with HashiCorp Vault. This comprehensive approach ensures that secrets remain safe and sound, providing peace of mind in managing critical data.

References

  1. https://developer.hashicorp.com/vault/docs/what-is-vault

  2. https://developer.hashicorp.com/vault/docs/concepts/storage

  3. https://developer.hashicorp.com/vault/docs/configuration/storage

  4. https://developer.hashicorp.com/vault/docs/secrets

  5. https://developer.hashicorp.com/vault/docs/auth

  6. https://developer.hashicorp.com/vault/docs/audit

  7. https://developer.hashicorp.com/vault/docs/internals/architecture

  8. https://www.hashicorp.com/blog/how-to-choose-a-data-protection-method

0
Subscribe to my newsletter

Read articles from Tanvir Sayyad directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Tanvir Sayyad
Tanvir Sayyad

Hi there! I am a competent DevOps Engineer with 2 years of experience in the IT domain with tools and technologies diversity. My professional background encompasses Jenkins, Ansible, HashiCorp Vault, Bitbucket, GitHub, Nexus, Maven, Ant, and Docker. Some of the technologies that I'm familiar with are Terraform, Kubernetes, and GitLab CI/CD. My thirst for learning is never quenched, and in turn, I share my views on it through my blog. Let's connect and learn DevOps together! Feel free to reach out if youโ€™re interested in collaboration or discussions about DevOps innovations at tanvir.sayyad1011@gmail.com.!