web-dev-qa-db-fra.com

Kubernetes vérifier les autorisations de service

Lors du déploiement d'un service via un Helm Chart, l'installation a échoué car le compte de services tiller n'était pas autorisé à créer une ressource ServiceMonitor.

Remarque:

  • ServiceMonitor est un CRD défini par l'opérateur Prometheus pour obtenir automatiquement des mesures des conteneurs en cours d'exécution dans les pods.
  • Helm Tiller est installé dans un seul espace de noms et le RBAC a été configuré à l'aide de Role et RoleBinding.

Je voulais vérifier les autorisations du compte de services tiller.
kubectl a le auth can-i commande, les requêtes comme celles-ci (voir ci-dessous) renvoient toujours no.

  • kubectl auth can-i list deployment --as=tiller
  • kubectl auth can-i list deployment --as=staging:tiller

Quelle est la bonne façon de vérifier les autorisations pour un compte de service?
Comment activer le compte tiller pour créer une ressource ServiceMonitor?

18
Joost den Boer

Après avoir essayé beaucoup de choses et googlé dans tout l'univers, j'ai finalement trouvé cet article de blog sur la sécurisation de votre cluster avec RBAC et PSP où un exemple est donné comment vérifier l'accès aux comptes de service.

La commande correcte est:
kubectl auth can-i <verb> <resource> --as=system:serviceaccount:<namespace>:<serviceaccountname> [-n <namespace>]

Pour vérifier si le compte tiller a le droit de créer un objet ServiceMonitor:
kubectl auth can-i create servicemonitor --as=system:serviceaccount:staging:tiller -n staging

Remarque: pour résoudre mon problème avec le compte tiller, j'ai dû ajouter des droits à la ressource servicemonitors dans le monitoring.coreos.com apiGroup. Après ce changement, la commande ci-dessus a renvoyé yes (enfin) et l'installation de notre Helm Chart a réussi.

Actualisé tiller-manager rôle:

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: tiller-manager
  labels:
    org: ipos
    app: tiller
  annotations:
    description: "Role to give Tiller appropriate access in namespace"
    ref: "https://docs.helm.sh/using_helm/#example-deploy-tiller-in-a-namespace-restricted-to-deploying-resources-only-in-that-namespace"
rules:
- apiGroups: ["", "batch", "extensions", "apps"]
  resources: ["*"]
  verbs: ["*"]
- apiGroups:
    - monitoring.coreos.com
  resources:
    - servicemonitors
  verbs:
    - '*'
24
Joost den Boer