檢視次數:
設定檔適用性:等級 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 和服務帳戶的定義以關閉它。