Formation-K8S

Formation K8S avec exercices et labs

View project on GitHub

Lab-003-RBAC

Sujet

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.

Etape par étape

1) création d’un namespace

2) 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éé )

3) 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: {}

3) regarder les logs. Qui est vu comme utilisateur ? Peut-il interroger l’api kubernetes ?

4) création d’un service account MYACCOUNT

5) recréer le pod en prenant compte de ce service account dans sa définition.

6) regarder les logs. Qui est maintenant vu comme utilisateur ? Peut-il interroger l’api kubernetes ?

7) création d’un role qui permet de lister et voir, mais pas de détruire ni de créer des namespaces,pod.

8) création d’un roleBinding entre ce role et ce serviceAccount

9) recréer le pod et regarder les logs, Peut il interroger l’api kubernetes ?

10) modifier le script et le role pour lui faire afficher les secrets.

Retour