🦏 以憑證(certificates)作為安全性管控,可以讓我們判斷來源者為何,是否可以進行存取,而當通關驗證後,並不代表能為所欲為,需看該身分被授予了什麼權限(Authorization),像是同樣能走進大樓,住戶能開大門與自家門,不能隨意闖入別人家,而管理員則能走進管理室。K8s當中API 請求的授權發生於api-server當中,根據內外部的各項資訊決定是否有權限能執行該事項
授權設定於API-SERVER的authorization mode
,若有多項設定的話,依序做檢驗,預設為AlwaysAllow,機制如下:
rbac.authorization.k8s.io API
去驅動授權決定,透過API能動態設置權限政策此種授權方式涉及4種object:Role、ClusterRole、RoleBinding及ClusterRoleBinding
Role與ClusterRole包含一連串的權限,說明可以做的事情,由於K8s的以namespace或非namespaced分類,因此作以下區分
叢集範圍cluster wide
,可以針對namespaced resources建立角色,變成能跨命名空間存取資源建立role object
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: developer
rules:
# 指定作用的API group
- apiGroups: [""]
resources: ["pods"]
# 執行動作及細項名稱
verbs: ["list", "get", "create", "update", "delete"]
resourceNames: ["blue", "orange"]
- apiGroups: [""]
resources: ["ConfigMap"]
verbs: ["create"]
Cluster Roles
可以透過指令查看資源是否為namespacedkubectl api-resources --namespaced=true/false
建立ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: cluster-administrator
rules:
- apiGroups: [""]
resources: [“nodes"]
verbs: ["list“, "get", “create“, “delete"]
role與clusterRole指令
# 列出roles
kubectl get roles
# 計算有多少role
kubectl get roles --no-headers | wc -l
# 列出詳細詳細資訊
kubectl describe role <name>
# 確認權限 can-i <action>
kubectl auth can-i create deployments
# 確認權限: 以特定身分執行,管理員可查,指定命名空間 --namespace <name>
kubectl --as qa-user create deployments
# 查看authorizations, 看檔案或process
cat /etc/kubernetes/manifests/kube-apiserver.yaml
ps -aux | grep authorization
# 建立角色: 帶入動作及資源參數
kubectl create role <name> --verb=list,create,delete --resource=pods
# 編輯角色
kubectl edit role <name> -n <namespace>
# 計算有多少clusterroles
kubectl get clusterroles --no-headers | wc -l
# 列出詳細詳細資訊
kubectl describe clusterroles
# 建立clusterrole: 帶入動作及資源參數
kubectl create clusterrole <name> --verb=get,list,watch --resource=nodes
# 列出resource的簡稱, 版本, kind, namespaced
kubectl api-resources