設定檔適用性:等級 1
除非執行於 Pod 中的工作負載明確需要與 API 伺服器通信,否則不應在 Pod 中掛載服務帳戶令牌
將服務帳戶令牌掛載在 Pod 內可能會提供權限升級攻擊的途徑,攻擊者能夠破壞集群中的單個 Pod。避免掛載這些令牌可以消除此攻擊途徑。
注意預設情況下,所有 Pod 都會掛載一個服務帳戶憑證。
|
影響
未掛載服務帳戶憑證的 Pods 將無法與 API 伺服器通信,除非該資源對未經身份驗證的主體可用。
稽核
檢查叢集中的 Pod 和服務帳戶物件,並確保設定以下選項,除非資源明確需要此存取權:
automountServiceAccountToken: false
echo "=== ServiceAccounts with automountServiceAccountToken=false ==="
kubectl get sa -A -o jsonpath='{range .items[?(@.automountServiceAccountToken==false)]}{.metadata.namespace}{"\t"}{.metadata.name}{"\n"}{end}' \
| sort | awk -F'\t' '{printf "%-25s %-40s\n", $1, $2}'
echo "=== Pods with automountServiceAccountToken=false ==="
kubectl get pods -A -o jsonpath='{range .items[?(@.spec.automountServiceAccountToken==false)]}{.metadata.namespace}{"\t"}{.metadata.name}{"\n"}{end}' \
| sort | awk -F'\t' '{printf "%-25s %-40s\n", $1, $2}'
kubectl get ... -A掃描所有命名空間。-
jsonpath 過濾器用於
automountServiceAccountToken == false。 - awk 將輸出格式化為對齊的欄位。
- 如果某個區段為空,則沒有物件明確設定
automountServiceAccountToken: false,這意味著它們仍然會預設自動掛載憑證,可能需要修正。
範例輸出:
=== ServiceAccounts with automountServiceAccountToken=false === NAMESPACE SERVICEACCOUNT ------------------------- ---------------------------------------- default default kube-system metrics-reader === Pods with automountServiceAccountToken=false === NAMESPACE POD ------------------------- ---------------------------------------- dev api-service prod nginx-test
補救
修改不需要掛載服務帳戶令牌的 Pods 和服務帳戶的定義以關閉它。
