授予 Kubernetes 服务帐户对 Secrets 的权限?
Granting a Kubernetes Service Account permissions for Secrets?
我有一个服务帐户,我想授予对特定命名空间内 read/write/update/delete 机密的权限。我不清楚服务帐户、角色、绑定等究竟如何协同工作以授予正确的权限。
我需要执行哪些 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
您可以阅读更多关于 using RBAC Authorization
所以你有你的 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。为什么?这样的可重用性更高。当然,一个简单的角色也可以在这里工作,但你需要为每个命名空间重新创建它。
我有一个服务帐户,我想授予对特定命名空间内 read/write/update/delete 机密的权限。我不清楚服务帐户、角色、绑定等究竟如何协同工作以授予正确的权限。
我需要执行哪些 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
您可以阅读更多关于 using RBAC Authorization
所以你有你的 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。为什么?这样的可重用性更高。当然,一个简单的角色也可以在这里工作,但你需要为每个命名空间重新创建它。