授予Kubernetes服务帐户权限的秘密?

时间:2018-10-10 15:54:59

标签: kubernetes rbac

我有一个服务帐户,我想授予其在特定名称空间中读取/写入/更新/删除机密的权限。我不清楚服务帐户,角色,绑定等如何完全配合以授予正确的权限。

我需要做什么kubectl调用或YAML才能将这些权限授予服务帐户?

这是到目前为止我拥有的服务帐户的YAML:

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

2 个答案:

答案 0 :(得分:6)

您需要创建角色和角色绑定。

创建角色:

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

创建角色绑定:

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

您可以阅读有关using RBAC Authorization

的更多信息

答案 1 :(得分:3)

因此您拥有自己的SA testaccount。假设您的应用程序(操纵机密的应用程序)具有容器映像myorg/myapp:01。然后按如下所示启动它:

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

但是权限呢?好吧,在应用程序启动之前或之后执行此操作并不重要,但在某个时间点,请执行以下操作:

$ 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 

请注意,我在上面创建了集群角色,并使用了角色绑定,然后将其附加到您的SA。为什么?这样更可重用。当然,这里也可以使用一个简单的角色,但是您需要为每个名称空间重新创建它。