Vaultx.Sys.Policies.Password (Vaultx v0.7.0)
View SourceComprehensive password policy management for HashiCorp Vault system backend.
This module provides enterprise-grade password policy management capabilities for Vault, enabling fine-grained control over password generation requirements for secrets engines that support password policies. Password policies define rules for generating secure passwords with specific character sets, lengths, and complexity requirements.
Password Policy Features
Policy Definition
- HCL-based policy syntax for password generation rules
- Character set specifications (uppercase, lowercase, digits, symbols)
- Length requirements and constraints
- Rule-based password complexity validation
- Custom character exclusion and inclusion rules
Policy Management
- Create and update password policies
- Read existing policy configurations
- List all configured password policies
- Delete unused password policies
- Generate test passwords from policies
Integration Support
- Compatible with secrets engines that support password policies
- Automatic policy validation before saving
- Performance optimization for password generation
- Enterprise-grade security and compliance features
API Compliance
Fully implements HashiCorp Vault Password Policies API:
Usage Examples
# Create a password policy
policy = ~s(
length = 20
rule "charset" {
charset = "abcdefghijklmnopqrstuvwxyz"
min-chars = 1
}
rule "charset" {
charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
min-chars = 1
}
rule "charset" {
charset = "0123456789"
min-chars = 1
}
)
:ok = Vaultx.Sys.Policies.Password.write("strong-policy", policy)
# List all password policies
{:ok, policies} = Vaultx.Sys.Policies.Password.list()
policies #=> ["strong-policy", "basic-policy"]
# Read a specific policy
{:ok, policy_info} = Vaultx.Sys.Policies.Password.read("strong-policy")
policy_info.policy #=> "length = 20\nrule "charset" { ... }"
# Generate a password from a policy
{:ok, password} = Vaultx.Sys.Policies.Password.generate("strong-policy")
password #=> "Kj8mN2pQ9rT5vW3xY7zA"
# Delete a policy
:ok = Vaultx.Sys.Policies.Password.delete("old-policy")Password Policy Syntax Examples
Basic Length Policy
length = 16Character Set Rules
length = 20
rule "charset" {
charset = "abcdefghijklmnopqrstuvwxyz"
min-chars = 3
}
rule "charset" {
charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
min-chars = 2
}
rule "charset" {
charset = "0123456789"
min-chars = 2
}
rule "charset" {
charset = "!@#$%^&*"
min-chars = 1
}Advanced Rules with Exclusions
length = 24
rule "charset" {
charset = "abcdefghijklmnopqrstuvwxyz"
min-chars = 5
}
rule "charset" {
charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
min-chars = 5
}
rule "charset" {
charset = "0123456789"
min-chars = 3
}
rule "charset" {
charset = "!@#$%^&*()-_=+[]{}|;:,.<>?"
min-chars = 2
}Security Considerations
- Password policies are validated before being saved
- Vault tests policy generation performance during creation
- Overly restrictive policies may cause performance issues
- Use reasonable character set sizes and length requirements
- Test policies thoroughly before production deployment
- Monitor password generation performance in production
Compatibility
Password policies are supported by the following secrets engines:
- Active Directory secrets engine
- LDAP secrets engine
- Database secrets engine (some plugins)
- Custom secrets engines with password policy support
Summary
Types
Generated password response structure.
Password policy information structure.
Password policy management options.
Functions
Delete a password policy.
Generate a password from a password policy.
List all configured password policies.
Read a specific password policy.
Create or update a password policy.
Types
@type password_generation_result() :: %{password: String.t()}
Generated password response structure.
@type password_policy_info() :: %{policy: String.t()}
Password policy information structure.
@type password_policy_opts() :: [ timeout: pos_integer(), retry_attempts: non_neg_integer(), namespace: String.t() ]
Password policy management options.
Functions
@spec delete(String.t(), password_policy_opts()) :: Vaultx.Types.result(:ok)
Delete a password policy.
Permanently removes the specified password policy. This does not check if any
secrets engines are using it prior to deletion, so ensure that any engines
utilizing this password policy are changed to a different policy or to their
default behavior.
Implements DELETE /sys/policies/password/:name.
Examples
:ok = Vaultx.Sys.Policies.Password.delete("old-policy")
@spec generate(String.t(), password_policy_opts()) :: Vaultx.Types.result(password_generation_result())
Generate a password from a password policy.
Generates a password using the specified existing password policy.
This is useful for testing password policies and generating passwords
programmatically using the defined rules.
Implements GET /sys/policies/password/:name/generate.
Examples
{:ok, result} = Vaultx.Sys.Policies.Password.generate("my-policy")
result.password #=> "Kj8mN2pQ9rT5vW3xY7zA"
@spec list(password_policy_opts()) :: Vaultx.Types.result([String.t()])
List all configured password policies.
Returns a list of password policy names available in the Vault instance.
Implements LIST /sys/policies/password and GET /sys/policies/password?list=true.
Examples
{:ok, policies} = Vaultx.Sys.Policies.Password.list()
policies #=> ["my-policy", "strong-policy"]
@spec read(String.t(), password_policy_opts()) :: Vaultx.Types.result(password_policy_info())
Read a specific password policy.
Retrieves the policy rules for the specified password policy name.
Implements GET /sys/policies/password/:name.
Examples
{:ok, policy_info} = Vaultx.Sys.Policies.Password.read("my-policy")
policy_info.policy #=> "length = 20\nrule "charset" { ... }"
@spec write(String.t(), String.t(), password_policy_opts()) :: Vaultx.Types.result(:ok)
Create or update a password policy.
Creates a new password policy or updates an existing one with the specified rules.
Prior to saving, Vault will attempt to generate passwords from the policy to validate
it and ensure it's not overly restrictive.
Implements POST /sys/policies/password/:name.
Parameters
name: The name of the password policypolicy: The HCL password policy document
Examples
policy = ~s(
length = 20
rule "charset" {
charset = "abcdefghijklmnopqrstuvwxyz"
min-chars = 1
}
rule "charset" {
charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
min-chars = 1
}
)
:ok = Vaultx.Sys.Policies.Password.write("my-policy", policy)