Granting a Kubernetes Service Account permissions for Secrets?

前端 未结 2 710
野趣味
野趣味 2021-02-13 22:32

I have a Service Account which I\'d like to grant permissions to read/write/update/delete Secrets within a specific namespace. I\'m not clear about how exactly Service Accounts,

相关标签:
2条回答
  • 2021-02-13 23:14

    You need to create Role and Role binding.

    Create a role:

    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"]
    

    Create a role binding:

    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
    

    You can read more about using RBAC Authorization

    0 讨论(0)
  • 2021-02-13 23:17

    So you have your SA testaccount. Let's assume your app (the one that manipulates the secrets) has a container image myorg/myapp:01. You'd launch it then as follows:

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

    But what about the permissions? Well, doesn't really matter if you do this before or after the app has launched, but at some point in time, do:

    $ 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 
    

    Note that I created a cluster role above and used a role binding then to attach it to your SA. Why? It's more reusable like that. Of course a simple role would also work here but then you'd need to re-create it for every namespace.

    0 讨论(0)
提交回复
热议问题