Hashicorp Cloud Plateform) est le système proposé par Hashicorp pour déployer leurs produits de manière managée. Aujourd’hui, Vault est le second produit à y être disponible, après Consul (ou le troisième, si l’on considère Terraform Cloud comme faisant réellement partie de HCP).
Se connecter à HCP est très simple et peut se faire via votre compte (et organisation) Github.
Comme on peut le voir dans cette vidéo, les services disponibles via HCP reposent sur le principe du HVN (Hashicorp Virtual Network). Le HVN est un réseau virtuel déployé sur un fournisseur de cloud et dans une région donnée. Il sera ensuite appairé (peered) à votre propre réseau sur votre fournisseur cloud. Grâce à cela, nous pourrons communiquer avec notre cluster Vault (ou Consul) sans passer par Internet, en restant sur notre réseau privé !
Pour le moment, seul AWS est disponible et sur un nombre de régions restreint (seulement sur us-west-2 pour Vault par exemple). Une autre limitation observée lors de notre test semble être de ne pouvoir instancier qu’un seul HVN par compte. On peut néanmoins aisément imaginer, dans le futur, la réplication de nos clusters Vault se faire entre plusieurs régions, entre plusieurs clouds providers.
C’est la version Enterprise qui est déployée, en haute disponibilité (de type “standby”). Via le portail, il est aujourd’hui possible de :
Bref, vous l’aurez compris : le strict minimum est aujourd’hui disponible. Il s’agit bel et bien d’une bêta, avec laquelle il est néanmoins possible de jouer, mais absolument pas “prod ready”.
Oui ! Lors de nos tests, nous n’avons pas pu observer le coût d’une telle solution. Effectivement, si nous disposons à notre inscription sur le HCP d’un crédit de 20$, l’utilisation de ressources Vault en bêta n’est pas facturée (“Vault beta resources will not utilize your credits.”).
Les étapes pour commencer sont très simples et il est possible d’activer le fait de pouvoir joindre votre cluster via une IP publique. Bien évidemment, nous ne pouvons suffisamment insister sur le fait de ne pas faire cela autrement qu’en phase exploratoire.
Dans notre cas, cela a pris ~9 minutes avant que notre cluster soit fonctionnel.
Ensuite, il faudra bien évidemment se référer à la documentation.
Commençons par exporter l’adresse de notre cluster Vault (en partant du principe que vous avez le binaire Vault installé bien sûr.
$ export VAULT_ADDR=https://vault-cluster.vault.abcd.aws.hashicorp.cloud:8200
Puis utilisons la commande de login pour vérifier que cela est possible. Pour cela, nous devons au préalable générer un token sur l’interface de Vault HCP.
$ vault login Token (will be hidden): Success! You are now authenticated. The token information displayed below is already stored in the token helper. You do NOT need to run "vault login" again. Future Vault requests will automatically use this token. Key Value --- ----- token s.XXXXXXXXXXXX token_accessor mxXurOuD56U9zv1eie0OiXko.Es2Xq token_duration 5h59m26s token_renewable false token_policies ["default" "hcp-root"] identity_policies [] policies ["default" "hcp-root"]
Nous pouvons voir ici que les policies associées sont : celle par default (“default”) et une policy que nous ne connaissons pas. Avant d’aller regarder ce qui se cache derrière celle-ci, regardons le statut du cluster
$ vault status Key Value --- ----- Recovery Seal Type shamir Initialized true Sealed false Total Recovery Shares 1 Threshold 1 Version 1.6.0+ent Cluster Name vault-cluster-e3393a92 Cluster ID ca1502b2-609e-59d4-86e1-5af77b5024e0 HA Enabled true HA Cluster https://1.2.3.4:8201 HA Mode standby Active Node Address https://node-1-0.vault-cluster.private.vault.abcd.aws.hashicorp.cloud:8202 Performance Standby Node true Performance Standby Last Remote WAL 275 Raft Committed Index 2480 Raft Applied Index 2480
Cela nous permet de voir que le cluster est effectivement en mode “High Availability”.
Regardons donc notre fameuse policy “hcp-root“.
Comme nous sommes dans un environnement namespaced, il est nécessaire de nous placer dans le bon namespace pour lire notre policy.
$ export VAULT_NAMESPACE=admin $ vault policy list default hcp-root $ vault policy read hcp-root path "*" { capabilities = ["sudo","read","create","update","delete","list"] }
Si vous êtes familiers avec la mécanique interne de Vault (que l’on peut résumer comme suit : “un token porte des policies qui s’appliquent sur des paths de secrets”), vous comprendrez que notre la policy hcp-root nous permet de tout faire. Même les capacités “sudo”.
La liste des chemins nécessitant les capacités sudo peut se trouver ici : Policies - root-protected API endpoints. Je peux vérifier cela grâce à la commande suivante, me permettant de vérifier mes droits sur le endpoint permettant de “seal” le coffre-fort (le “fermer” en cas d’attaque détectée) :
$ vault token capabilities s.xxxxx sys/seal create, delete, list, read, sudo, update
Pourtant, lorsque j’essaie réellement de tenter cette opération, cela se solde par un échec :
$ vault operator seal Error sealing: Error making API request. URL: PUT https://vault-cluster.vault.abcd.aws.hashicorp.cloud:8200/v1/sys/seal Code: 404. Errors: * 1 error occurred: * unsupported path
Toutes les commandes d’operator (generate-root, init, key-status...) donnent le même résultat. Ce qui n’est pas choquant dans le cadre d’une solution managée (sauf pour le seal, que l’on aimerait pouvoir piloter en dehors de l’interface web).
Côté fonctionnalités, Vault n’a pas besoin de nous convaincre : c’est une solution qui se fait rapidement son chemin dans les infrastructures. Ici, cette bêta sur HCP nous offre toutes les fonctionnalités “utilisateurs” (lire et écrire des secrets...) et “administrateurs” (provisionner un secret engine…). C’est du côté des fonctionnalités d’exploitation que nous attendons des évolutions (pilotage par API des logs, snapshots, seal…).
Nous apprécions par ailleurs particulièrement le modèle du HCN à la fois simple et élégant.
Il reste la question du prix qui sera à surveiller plus tard, pour savoir si cette solution est réellement intéressante.