設定檔適用性:等級 1
Kubernetes 工作負載不應使用叢集節點服務帳戶來驗證 Amazon EKS API。每個需要使用 AWS IAM 驗證其他 AWS 服務的 Kubernetes
工作負載都應配置專用的服務帳戶。
在 Amazon EKS 上運行的 Kubernetes 工作負載對 AWS API 進行身份驗證的手動方法包括將服務帳戶密鑰存儲為 Kubernetes 機密(這會引入手動密鑰輪換並可能導致密鑰洩露),或者使用基礎節點的
IAM 服務帳戶,這違反了多租戶節點上的最小權限原則,當一個 pod 需要訪問某個服務時,節點上使用該服務帳戶的其他 pod 則不需要。
稽核
對於叢集中每個命名空間,檢查分配給預設服務帳戶的權限,並確保除了預設值之外,沒有其他角色或叢集角色與其綁定。
另外,請確保每個預設服務帳戶都已設定
automountServiceAccountToken: false。補救
在 Amazon EKS 叢集上使用服務帳戶的 IAM 角色,您可以將 IAM 角色與 Kubernetes 服務帳戶關聯。然後,這個服務帳戶可以為使用該服務帳戶的任何
Pod 中的容器提供 AWS 權限。透過此功能,您不再需要為工作節點的 IAM 角色提供擴展權限,以便該節點上的 Pod 可以調用 AWS API。
應用程式必須使用 AWS 憑證簽署其 AWS API 請求。此功能提供了一種管理您應用程式憑證的策略,類似於 Amazon EC2 實例配置文件向 Amazon EC2
實例提供憑證的方式。
與其建立並分發您的 AWS 憑證至容器或使用 Amazon EC2 實例的角色,您可以將 IAM 角色與 Kubernetes 服務帳戶關聯。Pod 容器中的應用程式即可使用
AWS SDK 或 AWS CLI 向授權的 AWS 服務發送 API 請求。
服務帳戶的 IAM 角色功能提供以下優點:
- 最低權限:透過使用服務帳戶的 IAM 角色功能,您不再需要為工作節點的 IAM 角色提供擴展權限,以便該節點上的 pod 可以調用 AWS API。您可以將 IAM 權限範圍限定於服務帳戶,只有使用該服務帳戶的 pod 才能訪問這些權限。此功能還消除了對第三方解決方案(如 kiam 或 kube2iam)的需求。
- 憑證隔離:容器只能獲取與其所屬服務帳戶相關聯的 IAM 角色的憑證。容器永遠無法存取屬於其他 Pod 的其他容器所需的憑證。
- 可審核性:可透過 CloudTrail 提供存取和事件記錄,以協助確保事後審核。
