Authentification de l'agent injector sur vault server
Configuration :
- Authentification au cluster (via auth/kubernetes)
- Activer l'auth kubernetes et créer un role pour l'injector sur vault server
- Configurer des policies
Activer l'auth kubernetes et créer un role pour l'injector sur vault server
- auth kubernetes
Sur l'ui dans Acess > authentication methods > enable new method > kubernetes
-
- Renseigner le nom du cluster et activer. Ce nom doit être identique à celui renseigné dans values-injector.yaml injector.authPath

- Récurperer les informations de configuration
KUBE_HOST=$(kubectl config view --raw --minify --flatten --output='jsonpath={.clusters[].cluster.server}')
kubectl config view --raw --minify --flatten --output 'jsonpath={.clusters[0].cluster.certificate-authority-data}' | base64 --decode
# remplacer bien le namespace et le nom de secret
TOKEN_REVIEW_JWT=$(kubectl -n vault-operator get secret vault-injector-token --output='go-template={{ .data.token }}' | base64 --decode)

Copier chaque valeur et les renseigner dans l'ui de vault comme si dessous.

- Créer le kv kv-app-crm
Depuis l'ui vault, Secrets engines > enable new engine > kv puis renseigner le path kv-app-crm et valider

Ajouter les 03 secrets(pg_user, pg_password, api_key) dans le path crm/dev.
Aussi pour ces 03 secrets(pg_user, pg_password, api_key) dans le path crm/prod.


- Créer une une policy qui donne que les droits read et list au kv-app-crm/crm/dev uniquement
Depuis l'ui vault, Policies > create ACL policy
Faire attention à la casse et au nom du path

- Créer un role vault pour auth/kubernetes et le lier à la policy crm-dev-policy
Depuis l'ui vault, Access > k8s-gke-sd-dev > create role


Faire attention à la casse et au nom de la policy.
A present, agent injector et vault server peuvent communiquer en sécurité.
Test avec une application
- Créer un namespace
kubectl create namespace crm-app-dev
- Déployer une application qui aura en variable d'environnement les sercret pg_user, pg_password et api_key
kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: crm-app-dev
namespace: crm-app-dev
labels:
app: crm-app-dev
spec:
selector:
matchLabels:
app: crm-app-dev
replicas: 1
template:
metadata:
annotations:
vault.hashicorp.com/agent-inject: 'true'
vault.hashicorp.com/role: 'gke-sd-dev-role'
vault.hashicorp.com/agent-inject-secret-config.ini: 'kv-app-crm/data/crm/dev'
vault.hashicorp.com/agent-inject-template-config: |
{{- with secret "kv-app-crm/data/crm/dev" -}}
export pg_password="{{ .Data.data.pg_password }}"
export pg_user="{{ .Data.data.pg_user }}"
export api_key="{{ .Data.data.api_key }}"
{{- end }}
labels:
app: crm-app-dev
spec:
containers:
- name: demo-app
image: python:3.12
command:
- /bin/sh
args:
- "-c"
- |
# afficher les variables d'environnement
env
tail -f /dev/null
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
EOF
- Vérifier les logs
kubectl -n crm-app-dev logs deploy/crm-app-dev

On voit bien que l'injector a bien réussi à recuperer les secrets depuis vault et les injecter dans le pod. L'injector à en réalité créé le fichier /vault/secrets/config qui contient les secret. C'est fichier qui a été sourcé. Pour le voir:
kubectl -n crm-app-dev exec -it po/crm-app-dev-66b5c497f6-l8sgn -- bash
cat /vault/secrets/config

- Pour avoir un fichier json
vault.hashicorp.com/agent-inject-secret-config.json: 'kv-app-crm/data/crm/dev'
vault.hashicorp.com/agent-inject-template-config.json: |
{{- with secret "kv-app-crm/data/crm/dev" -}}
export pg_password="{{ .Data.data.pg_password }}"
export pg_user="{{ .Data.data.pg_user }}"
export api_key="{{ .Data.data.api_key }}"
{{- end }}Commentaires
Aucun commentaire pour le moment.