設定檔適用性:等級 1
除非在絕對必要的情況下(例如在 RBAC 完全可用之前的引導存取),否則不應使用特殊群組
system:masters 來授予任何使用者或服務帳戶權限。system:masters 群組在 API 伺服器的原始碼中被硬性設定為對 Kubernetes API 擁有不受限制的存取權限。即使移除所有提及此群組的綁定和叢集角色綁定,屬於此群組的已驗證使用者的存取權限也無法被降低。當與用戶端憑證驗證結合使用時,使用此群組可以讓集群擁有不可撤銷的
cluster-admin級別憑證。GKE 包含CertificateSubjectRestriction准入控制器,該控制器會拒絕system:masters群組的請求。CertificateSubjectRestriction "此准入控制器會監控具有 spec.signerName 為 kubernetes.io/kube-apiserver-client 的 CertificateSigningRequest 資源的創建。它會拒絕任何指定 'group'(或 'organization attribute')為 system:masters 的請求。" 請參閱 Kubernetes 文件 以獲取詳細資訊。
注意預設情況下,一些叢集會創建一個「緊急使用」用戶端憑證,該憑證是此群組的成員。對此用戶端憑證的存取應該嚴格控制,且不應用於一般的叢集操作。
|
影響
一旦 RBAC 系統在叢集中運行,
system:masters 就不應該被特別需要,因為在需要不受限制的訪問時,可以將主體與 cluster-admin 叢集角色進行普通綁定。稽核
檢查所有有權訪問叢集的憑證列表,並確保未使用群組
system:masters。kubectl get clusterrolebinding -o json | jq -r ' .items[] as $b | select([ $b.subjects[]? | select(.kind=="Group" and .name=="system:masters") ] | length > 0) | ($b.subjects[]? | select(.kind=="Group" and .name=="system:masters")) | "\(.kind)\t\(.name)\t(bound in: \($b.metadata.name))" '
範例輸出:
Group system:masters (bound in: cluster-admin)
補救
從叢集中的所有使用者中移除
system:masters 群組。
