図
RBACでは、どんな操作を許可するのかを定義したRoleを作成し、Service AccountやUserに対してRoleを紐づけることで権限を管理する。
RBACには、Namespaceレベルのリソースと、Clusterレベルのリソースの二種類がある。
具体的には、RoleとCluster Role、Role BindingとCluster Role Binding。
Commandで理解
kubectl describe pod kube-apiserver-controlplane -n kube-system
## 一部抜粋
Command:
kube-apiserver
--authorization-mode=Node,RBAC
--authorization-mode=Node,RBAC
をつけてAPI serverを起動することで、RBACを有効化する。
## 全てのNamespaceのRoleを見る
kubectl get roles --all-namespaces
## 一部抜粋
NAMESPACE NAME CREATED AT
blue developer xxxxx
kube-system kube-proxy xxxxx
## kube-system名前空間のkube-proxyが、configmapsにGetできるとわかる。
kubectl describe role kube-proxy -n kube-system
Name: kube-proxy
Labels: <none>
Annotations: <none>
PolicyRule:
Resources Non-Resource URLs Resource Names Verbs
--------- ----------------- -------------- -----
configmaps [] [kube-proxy] [get]
## kube-proxy roleは、Group:system:bootstrappers:kubeadm:default-node-token に紐づけられているとわかる。
kubectl describe rolebinding kube-proxy -n kube-system
Name: kube-proxy
Labels: <none>
Annotations: <none>
Role:
Kind: Role
Name: kube-proxy
Subjects:
Kind Name Namespace
---- ---- ---------
Group system:bootstrappers:kubeadm:default-node-token
## 権限のないユーザーは、Listすることができない。
kubectl get pods --as dev-user
Error from server (Forbidden): pods is forbidden: User "dev-user" cannot list resource "pods" in API group "" in the namespace "default"
Role(Role Binding) 作成
## Command で作成する場合
kubectl create role developer --namespace=default --verb=list,create,delete --resource=pods
role.rbac.authorization.k8s.io/developer created
kubectl create rolebinding dev-user-binding --namespace=default --role=developer --user=dev-user
rolebinding.rbac.authorization.k8s.io/dev-user-binding created
## YAML使用の場合
## Role
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: blue
name: deploy-role
## Roleでは、以下Ruleの3 sectionsを指定する。
## なお、複数作成することも可能。podにGetできる権限を与えて、もう1つのRuleでは、ConfigをCreateできる権限を与えるなど。
rules:
- apiGroups: ["apps", "extensions"]
resources: ["deployments"]
verbs: ["create"]
## RoleBinding
## Role(deploy-role)とUser(dev-user)を紐づけている。
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: dev-user-deploy-binding
namespace: blue
## Userの詳細を記載。
subjects:
- kind: User
name: dev-user
apiGroup: rbac.authorization.k8s.io
## 上記で記載したRole(deploy-role)を記載する。
roleRef:
kind: Role
name: deploy-role
apiGroup: rbac.authorization.k8s.io
参考
https://kubernetes.io/docs/reference/access-authn-authz/node/
https://unofficial-kubernetes.readthedocs.io/en/latest/admin/authorization/rbac/
https://www.cncf.io/blog/2020/08/28/kubernetes-rbac-101-authorization/
https://snyk.io/blog/snyk-at-snyk-enabling-kubernetes-rbac-for-snyks-developers/
https://support.huaweicloud.com/intl/en-us/usermanual-cce/cce_01_0189.html
Kubernetes完全ガイド (impress top gear)
https://www.udemy.com/course/certified-kubernetes-administrator-with-practice-tests/
参考にさせていただきました。ありがとうございます。
備考
何か間違っている記載ありましたら教えていただけると嬉しいです。