Le but est de comprendre comment on peut restreindre les droits d'un container. En effet, on fait confiance à l'image que l'on utilise. La confiance, c'est bien, mais on n'est pas à l'abri d'une image vérolée. On va donc exprimer grâce au RBAC ce que le container aura le droit de faire ou pas.
On va chercher à interroger l'api kubernetes depuis notre container via son service.
-
création d'un namespace
-
création d'une configmap
cm-script
à partir script.sh
export TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
curl -k https://kubernetes.default.svc/api/v1/namespaces/default/pods/ -H "Authorization: Bearer $TOKEN";
(dans kubernetes.default.svc/api/v1/namespaces/default/pods/ remplacer
default
par le nom du namespace créé )
- création d'un pod qui va utiliser cette configmap
apiVersion: v1
kind: Pod
metadata:
name: rbac-1
spec:
volumes:
- name: script
configMap:
name: cm-script
containers:
- name: curl
command:
- sh
- -c
- 'sh /scripts/script.sh'
volumeMounts:
- name: script
mountPath: /scripts/
image: curlimages/curl
imagePullPolicy: Always
resources: {}
-
regarder les logs. Qui est vu comme utilisateur ? Peut-il interroger l'api kubernetes ?
-
création d'un service account
MYACCOUNT
-
recréer le pod en prenant compte de ce service account dans sa définition.
-
regarder les logs. Qui est maintenant vu comme utilisateur ? Peut-il interroger l'api kubernetes ?
-
création d'un role qui permet de lister et voir, mais pas de détruire ni de créer des namespaces,pod.
-
création d'un roleBinding entre ce role et ce serviceAccount
-
recréer le pod et regarder les logs, Peut il interroger l'api kubernetes ?
-
modifier le script et le role pour lui faire afficher les secrets.