Skip to content
Snippets Groups Projects
Commit 4ac9a7af authored by Vincent Mazenod's avatar Vincent Mazenod
Browse files

make some slides

parent 66f4a90e
No related branches found
No related tags found
No related merge requests found
Pipeline #3295 passed
......@@ -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/)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment