

 **協助改進此頁面** 

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

若要為本使用者指南貢獻內容，請點選每個頁面右側面板中的**在 GitHub 上編輯此頁面**連結。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 Amazon EKS 中強化 Kubernetes RBAC
<a name="rbac-hardening"></a>

Kubernetes 角色型存取控制 (RBAC) 控制可在叢集內執行的動作身分。許多叢集元件，包括 CSI 驅動程式和安裝為 DaemonSets 的其他附加元件，都需要廣泛的 許可才能運作。檢閱和界定這些許可會減少任何意外存取的潛在範圍。

本主題說明常見叢集元件的許可考量，以及建議的控制項。

## DaemonSet 服務帳戶許可
<a name="_daemonset_service_account_permissions"></a>

DaemonSet Pods 會在叢集中的每個節點上執行，因此其服務帳戶字符和這些字符授予的 RBAC 許可會出現在每個節點上。

節點上的未經授權程序可能可以存取在相同節點上執行之其他 Pod 的服務帳戶字符，包括 DaemonSet Pod。授予 DaemonSet 服務帳戶的 RBAC 許可在叢集中的每個節點上都相同。

通常部署為 DaemonSets 的元件包括：
+ CSI 節點驅動程式 (`ebs-csi-node`、`efs-csi-node`、`mountpoint-s3-csi-node`)
+ Amazon VPC CNI 外掛程式 (`aws-node`)
+  `kube-proxy` 

如果 DaemonSet Pod 透過 AWS EKS Pod Identity 或 IAM Roles for Service Accounts (IRSA) 擁有 IAM 登入資料，則在同一節點上取得容器外部存取權的程序也可能存取這些登入資料。這會將 Kubernetes RBAC 的影響範圍延伸至授予 DaemonSet IAM 角色的任何 AWS API 許可。

**重要**  
檢閱許可時，請將每個 DaemonSet 服務帳戶的 Kubernetes RBAC 許可和 IAM 許可視為可從叢集中的每個節點存取。

## CSI 驅動程式 RBAC 範圍
<a name="_csi_driver_rbac_scope"></a>

CSI 驅動程式通常會持有廣泛的 RBAC 授權，因為它們與節點、持久性磁碟區和儲存 APIs 互動。

### 節點物件許可
<a name="_node_object_permissions"></a>

CSI 驅動程式可能需要 RBAC 許可才能修改節點物件，以支援污點移除或其他節點管理任務等功能。由於 Kubernetes RBAC 限制，這些許可適用於叢集中的所有**節點物件，而不只是驅動程式執行所在的本機節點。

對於 EBS CSI 驅動程式，Helm Chart 提供參數 (`node.serviceAccount.disableMutation`)，從`ebs-csi-node`服務帳戶移除節點修改許可。啟用此功能會停用污點移除功能。

### 服務帳戶字符公開
<a name="_service_account_token_exposure"></a>

CSI 驅動程式 Pod 可能會使用投影服務帳戶字符進行身分驗證。在未經授權的程序在其容器外取得存取權的節點上，這些字符可以透過容器檔案系統或 kubelet API 存取。如果服務帳戶也透過 EKS Pod Identity 或 IRSA 與 IAM 角色相關聯，則可以使用公開的字符來取得 AWS IAM 憑證。

## 建議的控制項
<a name="_recommended_controls"></a>

### 將 RBAC 範圍設為最低權限
<a name="_scope_rbac_to_least_privilege"></a>
+ 檢閱繫結至 CSI 驅動程式和 DaemonSet 服務帳戶的 ClusterRoles。移除工作負載不需要的許可。
+ 對於 EBS CSI 驅動程式，`true`如果您不使用污點移除功能，請將 `node.serviceAccount.disableMutation`設定為 。
+ 使用 `kubectl auth can-i --list --as=system:serviceaccount:NAMESPACE:SERVICE_ACCOUNT`來稽核有效許可。

### 強制執行 Pod 安全標準
<a name="_enforce_pod_security_standards"></a>

使用內建 [Pod 安全](https://kubernetes.io/docs/concepts/security/pod-security-standards/)許可控制器或政策引擎套用 Kubernetes Pod 安全標準。至少，強制執行整個`baseline`設定檔叢集和工作負載命名空間的`restricted`設定檔。這限制了在系統命名空間之外建立特權容器的能力。

### 使用網路政策
<a name="_use_network_policies"></a>

套用網路政策，將 CSI 驅動程式和 DaemonSet Pod 的輸出限制為僅需要的端點 （例如 Kubernetes API 伺服器 AWS 和服務端點）。這可減少可能的動作範圍。

### 監控 RBAC 活動
<a name="_monitor_rbac_activity"></a>

啟用 Kubernetes 稽核記錄，並監控來自 DaemonSet 服務帳戶的非預期 API 呼叫。尋找：
+ 來自 CSI 驅動程式服務帳戶的節點修改
+ 在系統命名空間中建立 Pod
+ 秘密上的異常 `get`或 `list`呼叫

如需詳細資訊，請參閱[將控制平面日誌傳送至 CloudWatch Logs](control-plane-logs.md)。