Comment configurer Vault + Vault Agent pour émettre et renouveler automatiquement des certificats TLS via le moteur PKI intégré.
vault secrets enable pki
vault secrets tune -max-lease-ttl=8760h pki
vault write pki/root/generate/internal\
common_name="demo.example.com"\
ttl=8760h
vault write pki/config/urls\
issuing_certificates="http://127.0.0.1:8200/v1/pki/ca"\
crl_distribution_points="http://127.0.0.1:8200/v1/pki/crl"
vault write pki/roles/web-role\
allowed_domains="demo.example.com"\
allow_subdomains=true\
max_ttl="72h"
# web-role-policy.hcl
path "pki/issue/web-role" {
capabilities = ["create", "update"]
}
Créer et attacher cette politique à un token :
vault policy write web-role-policy web-role-policy.hcl
vault token create -policy="web-role-policy" -period=24h -renewable=true
Enregistrer ce token dans agent-token.txt.
vault-agent-config.hcl
pid_file = "./vault-agent.pid"
auto_auth {
method "token_file" {
config = {
token_file_path = "./agent-token.txt"
}
}
sink "file" {
config = {
path = "./vault-token-renewed.txt"
}
}
}
cache {
use_auto_auth_token = true
}
template {
source = "./cert-template.ctmpl"
destination = "./certs/fullchain.pem"
command = "systemctl reload nginx"
}
cert-template.ctmpl
{{ with secret "pki/issue/web-role" "common_name=server.demo.example.com" "ttl=48h" }}
{{ .Data.certificate }}
{{ .Data.issuing_ca }}
{{ end }}
mkdir -p certs
vault agent -config=vault-agent-config.hcl
Le certificat renouvelé sera écrit dans ./certs/fullchain.pem.
openssl x509 -in ./certs/fullchain.pem -noout -text | grep "Not After"
./certs/
âââ fullchain.pem # Certificat + CA
./vault-token-renewed.txt # Token renouvelé par Vault Agent
./agent-token.txt # Token de départ
./cert-template.ctmpl # Template Vault certificate
./vault-agent-config.hcl # Configuration Vault Agent
| Composant | Description |
|---|---|
| Vault PKI | GénÚre et signe les certificats |
| Vault Agent | GénÚre, renouvelle et installe les certificats |
| Token | Authentifie lâagent auprĂšs de Vault |
| Template | Fichier pour formater le certificat |