設定檔適用性:等級 2
避免使用具有用戶
system:anonymous 的 ClusterRoleBindings 或 RoleBindings。Kubernetes 將使用者
system:anonymous 指派給沒有提供驗證資訊的 API 伺服器請求。將角色綁定到使用者 system:anonymous 會使任何未驗證的使用者獲得該角色授予的權限,強烈不建議這樣做。
注意用戶
system:anonymous 沒有 clusterrolebindings 或 rolebindings。 |
影響
未經身份驗證的使用者將擁有與配置綁定相關聯的角色的權限和許可。
在從環境中移除任何
clusterrolebindings 或 rolebindings 之前,應謹慎確保它們不是叢集運行所需的。請使用更具體且經過驗證的使用者進行叢集操作。稽核
應審核 CusterRoleBindings 和 RoleBindings。使用以下命令確認沒有
ClusterRoleBindings 到 system:anonymous:$ kubectl get clusterrolebindings -o json | jq -r '["Name"], ["-----"], (.items[] | select((.subjects | length) > 0) | select(any(.subjects[]; .name == "system:anonymous")) | [.metadata.namespace, .metadata.name]) | @tsv'
不應列出任何
ClusterRoleBindings。如果存在任何綁定,請使用以下命令檢查其權限並重新評估其權限:$ kubectl get clusterrolebinding [CLUSTER_ROLE_BINDING_NAME] -o json \
| jq ' .roleRef.name +" " + .roleRef.kind' \
| sed -e 's/"//g' \
| xargs -l bash -c 'kubectl get $1 $0 -o yaml'
確認沒有包含
system:anonymous 使用者的 RoleBindings:$ kubectl get rolebindings -A -o json \
| jq -r '["Namespace", "Name"], ["---------", "-----"], (.items[] |
select((.subjects | length) > 0) | select(any(.subjects[]; .name ==
"system:anonymous")) | [.metadata.namespace, .metadata.name]) | @tsv'
不應列出
RoleBindings。如果存在任何綁定,請使用以下命令檢查其權限並重新評估其特權。
$ kubectl get rolebinding [ROLE_BINDING_NAME] --namespace
[ROLE_BINDING_NAMESPACE] -o json \
| jq ' .roleRef.name +" " + .roleRef.kind' \
| sed -e 's/"//g' \
| xargs -l bash -c 'kubectl get $1 $0 -o yaml --namespace
[ROLE_BINDING_NAMESPACE]'
補救
識別所有
clusterrolebindings和rolebindings到用戶系統:anonymous。檢查它們是否已被使用,並使用上方稽核部分中的指令或參考GKE 文件來檢視與綁定相關的權限。
強烈建議將不安全的綁定替換為經過身份驗證的使用者自定義群組。在可能的情況下,綁定到非預設的使用者自定義群組,並使用最低權限角色。如果對使用者
system:anonymous 存在任何不安全的綁定,請在考慮僅使用必要且更安全的綁定進行叢集操作後,繼續刪除它們。kubectl delete clusterrolebinding [CLUSTER_ROLE_BINDING_NAME] kubectl delete rolebinding [ROLE_BINDING_NAME] --namespace [ROLE_BINDING_NAMESPACE]
