授予Kubernetes服务帐户机密权限?
我有一个服务帐户,我想授予它在特定命名空间中读取/写入/更新/删除机密的权限。我不清楚服务帐户、角色、绑定等如何协同工作来授予正确的权限 要将这些权限授予服务帐户,我需要执行什么授予Kubernetes服务帐户机密权限?,kubernetes,rbac,Kubernetes,Rbac,我有一个服务帐户,我想授予它在特定命名空间中读取/写入/更新/删除机密的权限。我不清楚服务帐户、角色、绑定等如何协同工作来授予正确的权限 要将这些权限授予服务帐户,我需要执行什么kubectl调用或YAML操作 以下是迄今为止我拥有的服务帐户的YAML: apiVersion: v1 kind: ServiceAccount metadata: creationTimestamp: 2018-10-09T17:45:20Z name: testaccount namespace: t
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
您需要创建角色和角色绑定 创建一个角色:
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
您可以阅读更多关于的信息,这样您就有了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。为什么?这样更容易重复使用。当然,一个简单的角色也可以在这里工作,但您需要为每个名称空间重新创建它。我接受了YAML解决方案的早期答案,但我很欣赏使用集群角色和kubectl调用的这种替代方法。是的,需要澄清的是,另一个答案,虽然不正确,但并不完整,因为它没有说明在pod中实际使用SA的重要步骤;)我认为,更严格、更严格的authz配置通常更安全。只有在确定必须向服务帐户授予跨名称空间的权限时才使用群集角色,否则这不是一个好的RBAC策略。