web-dev-qa-db-fra.com

Accorder des autorisations à un compte de service Kubernetes pour les secrets?

J'ai un compte de service auquel j'aimerais accorder des autorisations pour lire/écrire/mettre à jour/supprimer des secrets dans un espace de noms spécifique. Je ne sais pas exactement comment les comptes de service, les rôles, les liaisons, etc. fonctionnent ensemble pour accorder les bonnes autorisations.

Quelles kubectl invocations ou YAML dois-je faire pour accorder ces autorisations au compte de service?

Voici le YAML pour le compte de service que j'ai jusqu'à présent:

apiVersion: v1
kind: ServiceAccount
metadata:
  creationTimestamp: 2018-10-09T17:45:20Z
  name: testaccount
  namespace: test
  resourceVersion: "369702913"
  selfLink: /api/v1/namespaces/test/serviceaccounts/testaccount
  uid: f742ed5c-c1b3-11e8-8a69-0ade4132ab56
secrets:
- name: testaccount-token-brjxq
9
user108471

Vous devez créer un rôle et une liaison de rôle.

Créez un rôle:

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
 namespace: test
 name: role-test-account
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]

Créez une liaison de rôle:

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
 name: role-test-account-binding
 namespace: test
subjects:
- kind: ServiceAccount
  name: test-account
  namespace: test
roleRef:
 kind: Role
 name: role-test-account
 apiGroup: rbac.authorization.k8s.io

Vous pouvez en savoir plus sur en utilisant l'autorisation RBAC

10
Atul Verma

Vous avez donc votre SA testaccount. Supposons que votre application (celle qui manipule les secrets) possède une image de conteneur myorg/myapp:01. Vous le lanceriez alors comme suit:

$ kubectl -n test run myapp \
    --image=myorg/myapp:01 \
    --serviceaccount=testaccount

Mais qu'en est-il des autorisations? Eh bien, peu importe si vous le faites avant ou après le lancement de l'application, mais à un moment donné, faites:

$ kubectl create clusterrole secretmanipulator \
    --verb=get --verb=list --verb=watch \
    --verb=create --verb=update --verb=patch --verb=delete \
    --resource=secrets 

$ kubectl -n test create rolebinding allowsecretmanipulation \
    --clusterrole=secretmanipulator \
    --serviceaccount=test:testaccount 

Notez que j'ai créé un rôle de cluster ci-dessus et utilisé une liaison de rôle puis pour l'attacher à votre SA. Pourquoi? C'est plus réutilisable comme ça. Bien sûr, un rôle simple fonctionnerait également ici, mais vous devriez alors le recréer pour chaque espace de noms.

3
Michael Hausenblas