Commit 4ac9a7af authored by Vincent Mazenod's avatar Vincent Mazenod
Browse files

make some slides

parent 66f4a90e
......@@ -211,6 +211,9 @@ ansible-playbook ansible/playbooks/ovh/duncan.yml
* pip
* pexpect (require pexcpect)
* https://docs.ansible.com/ansible/latest/modules/template_module.html
## roles
......@@ -226,6 +229,11 @@ ansible-playbook ansible/playbooks/ovh/duncan.yml
```
ansible-galaxy install -f -r requirements.yml -p ansible/roles/public
```
ou
```
ansible-galaxy install -f -r requirements.yml
```
en affectant le path dans le fichier requirements.yml au niveau du role distant
## plugins
......
## CI/CD variables
https://gitlab.isima.fr/cri/my/settings/ci_cd
* https://docs.gitlab.com/ee/ci/yaml/ (When:manual) pour le déploiement
## personal tokens
......@@ -56,3 +59,7 @@ Deploy keys allow read-only or read-write (if enabled) access to your repository
## specific runners
https://gitlab.isima.fr/cri/my/settings/ci_cd
## best practice
* bin/setup (APP_TOKEN - gitlab secret variable / fallback ldap) bin/activate
# vault
**By HashiCorp**
![vault](images/vault.png "vault")<!-- .element width="30%" -->
......@@ -6,60 +7,175 @@
[https://vault.isima.fr](https://vault.isima.fr)
# Secrets
## Installation
Il existe deux étages deux secrets dans la stack
Téléchargement d'un binaire
* les **secrets locaux**: sont gérés par la commande `ansible-vault` et peuvent être lus simplement avec la commande `avq` de la stack (accessible une fois l'environnement activé). Les **secrets locaux** sont chiffrés en local, mais le fait qu'ils ne soient pas versionnés rend ce chiffrement non indispensable.
* https://releases.hashicorp.com/vault/
* décompresser dans /usr/local/bin
* configurer les permissions
* créer un service systemd
* les **secrets globaux**: sont gérés par la commande `vault` de HashiCorp et peuvent être lus simplement avec la commande `hvq` de la stack (accessible une fois l'environnement activé). les secrets sont disponibles selon les permissions du jeton utilisés. les **secrets globaux** sont utilisés pour construire les **secrets locaux**
## Générer un secret
## Configuration
Un secret robuste en ligne de commande se génère avec la commande `openssl` comme suit
* /etc/vault/vault.hcl
```
$ openssl rand -base64 256
backend "file" {
path = "/var/lib/vault"
}
ui = true
disable_mlock = true
listener "tcp" {
address = "10.0.0.1:8200"
tls_disable = 1
}
```
écrire le secret dans un fichier
## Secret engine
## KV2
```
$ openssl rand -base64 256 > ~/.ansible_secrets/stack
vault login token=<root-token>
vault secrets enable -path=cri kv
vault kv enable-versioning cri/ # kv2
```
Stocker le secret directement dans hashicorp vault
* les secrets sont versionnés
* il est possible d'utiliser PATCH et pas seulement PUT
## Authentification
* par token
* root
* d'application
* par ldap
* en réalité génère un token dans ~/.vault-token contenant
## LDAP
```
$ openssl rand -base64 256 @TODO
$ vault write auth/ldap/config \
url="ldaps://samantha.local.isima.fr" \
userattr="sAMAccountName" \
userdn="dc=local,dc=isima,dc=fr" \
groupattr="cn" \
groupfilter="(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={{.UserDN}}))" \
groupdn="ou=GROUPES_LOCAUX,dc=local,dc=isima,dc=fr" \
binddn="cn=vault,ou=Comptes de Services,dc=local,dc=isima,dc=fr" \
bindpass="secret" \
insecure_tls="false" \
starttls="true"
```
## Vault
## Policy
/etc/vault/cri.hcl
```
# Write and manage secrets in key-value secret engine
path "secret/*" {
capabilities = ["create", "read", "update", "delete", "list"]
}
# To enable secret engines
path "sys/mounts/*" {
capabilities = [ "create", "read", "update", "delete" ]
}
path "secret/data/cri/*" {
capabilities = ["create", "read", "update", "delete", "list", "sudo"]
}
path "cubbyhole/*" {
capabilities = ["create", "read", "update", "delete", "list"]
}
```
```
vault login -method=ldap username=vimazeno # vault login token=<token>
vault kv put cri/clusters/ovh/duncan/proxmoxapi password=itsasecret
vault read cri/clusters/ovh/duncan/proxmoxapi
vault read cri/clusters/ovh/duncan/proxmoxapi -format=json
vault read cri/clusters/ovh/duncan/proxmoxapi -format=json | jq .data
vault read cri/clusters/ovh/duncan/proxmoxapi -format=json | jq .data.password
vault delete cri/clusters/ovh/duncan/proxmoxapi
$ vault policy write cri /etc/vault/cri.hcl
```
l'authentification ldap créée un fichier dans ~/.vault-token contenant votre token utilisateur avec vos permissions associées
## Map policy and ldap group
```
vault kv patch cri/clusters/ovh/duncan/proxmoxapi password="$(openssl rand -base64 25)"
$ vault write auth/ldap/groups/cri policies=cri
```
**N.B.** patch met à jour l'entrée avec KV2 et écrase les autres avec KV1 (on a activé KV2)
## Stocker un secret
## Utilisation
* le même binaire à télécharger
* cross plateforme
* deux variables d'environnement
* $VAULT_ADDR
* $VAULT_TOKEN
ou
* l'[api](https://www.vaultproject.io/api/overview)
## Workflow
```
vault login -method=ldap username=vimazeno
vault secrets list
vault list cri/
vault read cri/tokens
vault read cri/tokens # à chaque put on écrase les entrées qu'on ne réécrit pas
vault read cri/tokens -format=json
vault read cri/tokens -format=json | jq .data
vault read cri/tokens -format=json | jq .data.password
vault kv put cri/tokens root=pipo2
vault kv patch cri/tokens root1=pipo1
vault delete cri/tokens
```
## création de token
```
$ vault policy write vault/apps/my.hcl
$ vault token create -policy=my
```
## token et ci/cd
* on teste en local avec ses droits via ldaps
* on génère un token en variable de CI/CD pour autoriser l'appli à lire des secrets
## Générer un secret
Un secret robuste en ligne de commande se génère avec la commande `openssl` comme suit
```
$ openssl rand -base64 256
```
Stocker le secret directement dans hashicorp vault
```
$ vault kv put cri/tokens root=$(openssl rand -base64 25)
```
Ce secret devrait être stocké dans https://vault.isima.fr
## SEE ALSO
Avec la commande `vault` [@TODO vault install] dans le path adéquat.
* [cri/ansible-playbook-vault](https://gitlab.isima.fr/cri/ansible-playbook-vault)
Interroger la structure du vault avec la command `vault-tree` avant de choisir le path du secret semble une bonne idée [vault-tree]().
* [Vault - Getting started](https://learn.hashicorp.com/vault/?track=getting-started#getting-started)
Ces consignes sont valables pour tous le secrets de ce tutoriel
* [consul](https://www.consul.io/)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment