

 **協助改進此頁面** 

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

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

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

# EKS 功能的安全考量
<a name="capabilities-security"></a>

本主題涵蓋 EKS 功能的重要安全考量，包括 IAM 角色組態、Kubernetes 許可，以及多叢集部署和跨帳戶 AWS 資源管理的架構模式。

EKS 功能使用 IAM 角色、EKS 存取項目和 Kubernetes RBAC 的組合，以提供對 AWS 服務、叢集內 Kubernetes 資源以及與 AWS CodeConnections、 AWS Secrets Manager 和其他 AWS 服務的整合的安全存取。

## 功能 IAM 角色
<a name="_capability_iam_role"></a>

當您建立功能時，您會提供 IAM 功能角色，讓 EKS 用來代表您執行動作。此角色必須：
+ 與叢集和功能資源位於相同的 AWS 帳戶
+ 擁有允許`capabilities.eks.amazonaws.com`服務主體擔任角色的信任政策
+ 根據您的需求，擁有適用於功能類型和使用案例的 IAM 許可。如需必要 IAM 許可的詳細資訊，請參閱 [使用 AWS CodeConnections 連線至 Git 儲存庫](integration-codeconnections.md)、 [使用 AWS Secrets Manager 管理應用程式秘密](integration-secrets-manager.md)和 [設定 ACK 許可](ack-permissions.md) 

最佳實務是考慮特定使用案例所需的權限範圍，並僅授予滿足需求所需的許可。例如，使用適用於 Kube Resource Orchestrator 的 EKS 功能時，不需要 IAM 許可，而使用適用於 Kubernetes 的 AWS 控制器的 EKS 功能時，您可以授予一或多個 AWS 服務的完整存取權。

**重要**  
雖然某些使用案例可能需要使用廣泛的管理權限，但請遵循最低權限原則，方法是只授予特定使用案例所需的最低 IAM 許可，使用 ARNs存取，而不是使用萬用字元許可。

如需建立和設定功能 IAM 角色的詳細資訊，請參閱 [Amazon EKS 功能 IAM 角色](capability-role.md)。

## EKS 存取項目
<a name="_eks_access_entries"></a>

當您使用 IAM 角色建立功能時，Amazon EKS 會自動為叢集上的該角色建立存取項目。此存取項目會授予功能基準 Kubernetes 許可來運作。

**注意**  
系統會為建立 功能的叢集建立存取項目。對於遠端叢集的 Argo CD 部署，您必須在具有 Argo CD 功能適當許可的叢集上建立存取項目，以部署和管理應用程式。

存取項目包括：
+ 作為委託人的 IAM 角色 ARN
+ 授予基準 Kubernetes 許可的功能特定存取項目政策
+ 根據功能類型的適當範圍 （全叢集或命名空間範圍）

**注意**  
對於 Argo CD，命名空間範圍許可會授予功能組態中指定的命名空間 （預設為 `argocd`)。

 **依功能區分的預設存取項目政策** 

每個功能類型都會授予功能角色所需的許可，並設定不同的預設存取項目政策，如下所示：

 **kro**   
+  `arn:aws:eks::aws:cluster-access-policy/AmazonEKSKROPolicy` （叢集範圍）

  准許監看和管理 ResourceGraphDefinitions，並建立 RGDs定義的自訂資源執行個體。

 **ACK**   
+  `arn:aws:eks::aws:cluster-access-policy/AmazonEKSACKPolicy` （叢集範圍）

  准許在所有命名空間中建立、讀取、更新和刪除 ACK 自訂資源。

 **Argo CD**   
+  `arn:aws:eks::aws:cluster-access-policy/AmazonEKSArgoCDClusterPolicy` （叢集範圍）

  授予 Argo CD 的叢集層級許可，以探索資源和管理叢集範圍物件。
+  `arn:aws:eks::aws:cluster-access-policy/AmazonEKSArgoCDPolicy` （命名空間範圍）

  授予 Argo CD 部署和管理應用程式的命名空間層級許可。範圍為功能組態中指定的命名空間 （預設為 `argocd`)。

如需更多詳細資訊[檢閱存取政策許可](access-policy-permissions.md)，請參閱 。

## 其他 Kubernetes 許可
<a name="additional-kubernetes-permissions"></a>

除了預設存取項目政策之外，某些功能可能需要額外的 Kubernetes 許可。您可以使用下列其中一種方式授予這些許可：
+  **存取項目政策**：將其他受管政策與存取項目建立關聯
+  **Kubernetes RBAC**：為功能的 Kubernetes 使用者建立`Role`或`ClusterRole`繫結

 **ACK 秘密讀取器許可** 

有些 ACK 控制器需要讀取 Kubernetes 秘密，才能擷取資料庫密碼等敏感資料。下列 ACK 控制器需要秘密讀取存取權：
+  `acm`, `acmpca`, `documentdb`, `memorydb`, `mq`, `rds`, `secretsmanager` 

若要授予秘密讀取許可：

1. 將`arn:aws:eks::aws:cluster-access-policy/AmazonEKSSecretReaderPolicy`存取項目政策與功能的存取項目建立關聯

1. 將政策範圍限定在特定命名空間，其中 ACK 資源會參考秘密，或授予整個叢集的存取權

**重要**  
秘密讀取許可的範圍僅限於您在關聯存取項目政策時指定的命名空間。這可讓您限制 功能可存取的秘密。

<a name="kro-resource-permissions"></a> **kro 任意資源許可** 

kro 需要許可才能建立和管理 ResourceGraphDefinitions 中定義的資源。根據預設，kro 只能自行監看和管理 RGDs。

若要授予 kro 建立資源的許可：

 **選項 1：存取項目政策** 

將預先定義的存取項目政策，例如 `AmazonEKSAdminPolicy`或 `AmazonEKSEditPolicy` 與功能的存取項目建立關聯。

 **選項 2：Kubernetes RBAC** 

建立`ClusterRoleBinding`授予功能 Kubernetes 使用者必要許可的 ：

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kro-cluster-admin
subjects:
- kind: User
  name: arn:aws:sts::111122223333:assumed-role/my-kro-role/KRO
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io
```

**注意**  
kro 的 Kubernetes 使用者名稱遵循 模式： `arn:aws:sts::ACCOUNT_ID:assumed-role/ROLE_NAME/KRO`  
工作階段名稱 `/KRO`（大寫） 是由 EKS kro 功能自動設定。

## 功能所需的 IAM 許可
<a name="_iam_permissions_required_by_capability"></a>

 **kro (Kube Resource Orchestrator)**   
不需要 IAM 許可。您可以建立沒有連接政策的功能角色。 kro 只需要 Kubernetes RBAC 許可。

 **ACK (Kubernetes 的AWS 控制器）**   
需要許可來管理 ACK 將建立和管理 AWS 的資源。您應該根據您的需求，將許可範圍限定為特定服務、動作和資源。如需設定 ACK 許可的詳細資訊，包括使用 IAM 角色選取器的生產最佳實務，請參閱 [設定 ACK 許可](ack-permissions.md)。

 **Argo CD**   
預設不需要 IAM 許可。可能需要下列選用許可：  
+  AWS Secrets Manager：如果在 Secrets Manager 中存放 Git 儲存庫登入資料
+  AWS CodeConnections：如果使用 CodeConnections for Git 儲存庫身分驗證
+ Amazon ECR：如果使用 Amazon ECR 中以 OCI 格式存放的 Helm Chart

## 安全最佳實務
<a name="_security_best_practices"></a>

### IAM 最低權限
<a name="_iam_least_privilege"></a>

僅授予您的 功能資源使用案例所需的許可。這並不表示您無法視需要將廣泛的管理許可授予您的 功能。在這種情況下，您應該適當地控管對這些資源的存取。

 **功能角色**：
+  **ACK**：盡可能根據使用案例和需求，將 IAM 許可限制為您的團隊所需的特定 AWS 服務和資源
+  **Argo CD**：限制對特定 Git 儲存庫和 Kubernetes 命名空間的存取
+  **kro**：需要信任政策的功能角色，但不需要 IAM 許可 （僅使用叢集 RBAC)

 **範例**：不是 `"Resource": "*"`，而是指定特定資源或資源群組的模式。

```
"Resource": [
  "arn:aws:s3:::my-app-*",
  "arn:aws:rds:us-west-2:111122223333:db:prod-*"
]
```

使用 IAM 條件金鑰進一步限制存取：

```
"Condition": {
  "StringEquals": {
    "aws:ResourceTag/Environment": "production"
  }
}
```

如需其他 IAM 組態資訊，請參閱每個功能的考量區段。

### Argo CD 秘密的命名空間隔離
<a name="_namespace_isolation_for_argo_cd_secrets"></a>

受管 Argo CD 功能可存取其設定命名空間內的所有 Kubernetes 秘密 （預設：`argocd`)。若要維持最佳安全狀態，請遵循下列命名空間隔離實務：
+ 在 Argo CD 命名空間中僅保留與 Argo CD 相關的秘密
+ 避免將不相關的應用程式秘密存放在與 Argo CD 相同的命名空間
+ 對 Argo CD 操作不需要的應用程式秘密使用單獨的命名空間

此隔離可確保 Argo CD 的秘密存取僅限於 Git 儲存庫身分驗證和其他 Argo CD 特定操作所需的登入資料。

### Kubernetes RBAC
<a name="_kubernetes_rbac"></a>

控制哪些使用者和服務帳戶可以建立和管理功能資源。最佳實務是在具有適當 RBAC 政策的專用命名空間中部署功能資源。

範例：使用 ACK 的 RBAC 角色，允許在`app-team`命名空間中管理 S3 儲存貯體資源：

```
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: ack-s3-manager
  namespace: app-team
rules:
- apiGroups: ["s3.services.k8s.aws"]
  resources: ["buckets"]
  verbs: ["get", "list", "create", "update", "delete"]
```

### 稽核記錄
<a name="_audit_logging"></a>

 **CloudTrail**：所有 EKS 功能 API 操作 （建立、更新、刪除） 都會記錄到 AWS CloudTrail。

啟用 CloudTrail 記錄以追蹤：
+ 建立或修改功能的人員
+ 當功能組態變更時
+ 使用哪些功能角色

### 網路存取和 VPC 端點
<a name="_network_access_and_vpc_endpoints"></a>

#### 私有 Argo CD API 存取
<a name="_private_argo_cd_api_access"></a>

您可以將一或多個 VPC 端點與託管 Argo CD 端點建立關聯，以限制對 Argo CD API 伺服器的存取。這可從 VPC 內啟用私有連線，而不會周遊公有網際網路。VPC 端點可讓您存取 Argo CD Web UI 和 Argo CD API （包括 CLI 存取）。

**注意**  
連線至託管 Argo CD API 端點的 VPC 端點 （使用 eks-capabilities.*region*.amazonaws.com) 不支援 VPC 端點政策。

#### 部署至私有叢集
<a name="_deploying_to_private_clusters"></a>

Argo CD 功能可以將應用程式部署到全私有 EKS 叢集，藉由消除對 VPC 互連或複雜聯網組態的需求，提供顯著的操作優勢。不過，在設計此架構時，請考慮 Argo CD 會從 Git 儲存庫提取組態 （可能是公有的），並將其套用至您的私有叢集。

確保您：
+ 針對敏感工作負載使用私有 Git 儲存庫
+ 實作適當的 Git 儲存庫存取控制和身分驗證
+ 在合併之前，透過提取請求來檢閱和核准變更
+ 考慮使用 Argo CD 的同步視窗來控制何時可以進行部署
+ 監控 Argo CD 稽核日誌是否有未經授權的組態變更

### 合規
<a name="_compliance"></a>

EKS 功能受到完整管理，並具有 Amazon EKS 的合規認證。

如需最新的合規資訊，請參閱[AWS 合規計劃範圍內的服務](https://aws.amazon.com/compliance/services-in-scope/)。

## 後續步驟
<a name="_next_steps"></a>
+  [設定 ACK 許可](ack-permissions.md) - 設定 ACK 的 IAM 許可
+  [設定 kro 許可](kro-permissions.md) - 為 kro 設定 Kubernetes RBAC
+  [設定 Argo CD 許可](argocd-permissions.md) - 設定 Argo CD 的 Identity Center 整合
+  [對 EKS 功能進行故障診斷](capabilities-troubleshooting.md) - 對安全性和許可問題進行故障診斷