

 **協助改進此頁面** 

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

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

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

# Amazon Elastic Kubernetes Service 的安全考量
<a name="security-eks"></a>

下面介紹了雲端安全性考量，因為安全性會對 Amazon EKS 產生影響。

**Topics**
+ [Amazon EKS 中的基礎設施安全](infrastructure-security.md)
+ [了解 Amazon EKS 叢集中的彈性](disaster-recovery-resiliency.md)
+ [Amazon EKS 中的預防跨服務混淆代理人](cross-service-confused-deputy-prevention.md)

# Amazon EKS 中的基礎設施安全
<a name="infrastructure-security"></a>

作為受管服務，Amazon Elastic Kubernetes Service 受到 AWS 全球網路安全的保護。如需 AWS 安全服務以及 AWS 如何保護基礎設施的相關資訊，請參閱 [AWS 雲端安全](https://aws.amazon.com/security/)。若要使用基礎設施安全性的最佳實務來設計您的 AWS 環境，請參閱*安全支柱 AWS 架構良好的框架*中的[基礎設施保護](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/infrastructure-protection.html)。

您可使用 AWS 發佈的 API 呼叫，透過網路存取 Amazon EKS。使用者端必須支援下列專案：
+ Transport Layer Security (TLS)。我們需要 TLS 1.2 並建議使用 TLS 1.3。
+ 具備完美轉送私密(PFS)的密碼套件，例如 DHE (Ephemeral Diffie-Hellman)或 ECDHE (Elliptic Curve Ephemeral Diffie-Hellman)。現代系統(如 Java 7 和更新版本)大多會支援這些模式。

此外，請求必須使用存取金鑰 ID 和與 IAM 主體相關聯的私密存取金鑰來簽署。或者，您可以使用 [AWS Security Token Service](https://docs.aws.amazon.com/STS/latest/APIReference/welcome.html) (AWS STS) 來產生暫時安全憑證，以簽署請求。

建立 Amazon EKS 叢集時，為要使用的叢集指定 VPC 子網路。Amazon EKS 需要至少兩個處於可用區域的子網路。我們建議使用具有公有和私有子網路的 VPC，以便 Kubernetes 在公有子網路中建立公有負載平衡器，以平衡在私有子網路中的節點上執行的 Pod 負載。

如需 VPC 考量的詳細資訊，請參閱 [檢視 VPC 和子網路的 Amazon EKS 聯網需求](network-reqs.md)。

如果您透過 [Amazon EKS 入門](getting-started.md)逐步解說提供的 AWS CloudFormation 範本建立 VPC 和節點群組，您的控制平面和節點安全群組將會設定為建議的設定。

如需安全群組考量的詳細資訊，請參閱 [檢視叢集的 Amazon EKS 安全群組要求](sec-group-reqs.md)。

建立新的叢集時，Amazon EKS 會為您用來與叢集通訊的受管 Kubernetes API 伺服器建立端點 (使用 Kubernetes 管理工具，例如 `kubectl`)。根據預設，此 API 伺服器端點會在網際網路上公開，而其存取則受到 AWS Identity and Access Management (IAM) 及原生 Kubernetes [角色型存取控制](https://kubernetes.io/docs/reference/access-authn-authz/rbac/) (RBAC) 的共同保護。

您可啟用 Kubernetes API 伺服器的私有存取，讓節點和 API 伺服器間的所有通訊都不會離開 VPC。您可以限制可以從網際網路存取 API 伺服器的 IP 地址，或完全停用對 API 伺服器的網際網路存取。

如需修改叢集端點存取的詳細資訊，請參閱 [修改叢集端點存取](cluster-endpoint.md#modify-endpoint-access)。

您可以搭配 Amazon VPC CNI 或第三方工具 (例如 [Project Calico](https://docs.tigera.io/calico/latest/about/)) 來實作 Kubernetes *網路政策*。如需有關使用適用於網路政策的 Amazon VPC CNI 的詳細資訊，請參閱 [使用 Kubernetes 網路政策限制 Pod 流量](cni-network-policy.md)。Project Calico 是第三方開放原始碼專案。如需詳細資訊，請參閱 [Project Calico 文件](https://docs.tigera.io/calico/latest/getting-started/kubernetes/managed-public-cloud/eks/)。

# 使用 AWS PrivateLink 存取 Amazon EKS
<a name="vpc-interface-endpoints"></a>

您可以使用 AWS PrivateLink，在 VPC 與 Amazon Elastic Kubernetes Service 之間建立私有連線。您可以如在 VPC 中一樣存取 Amazon EKS，無需使用網際網路閘道、NAT 裝置、VPN 連線或 AWS Direct Connect 連線。VPC 中的執行個體無需公有 IP 位址，即可存取 Amazon EKS。

您可以建立由 AWS PrivateLink 提供支援的介面端點來建立此私有連線。我們會在您為介面端點啟用的每個子網中建立端點網路介面。這些是請求者管理的網路介面，可作為目的地為 Amazon EKS 之流量的進入點。

如需詳細資訊，請參閱 *AWS PrivateLink 指南*中的[透過 AWS PrivateLink 存取 AWS 服務](https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-access-aws-services.html)。

## 開始之前
<a name="vpc-endpoint-prerequisites"></a>

開始之前，請確定您已執行下列任務：
+ 檢閱 *AWS PrivateLink 指南*》中的[使用介面 VPC 端點來存取 AWS 服務](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#considerations-interface-endpoints) 

## 考量事項
<a name="vpc-endpoint-considerations"></a>
+  **支援與限制**：Amazon EKS 介面端點支援透過 VPC 安全地存取全部 Amazon EKS API 動作，但同時有特定限制：不支援存取 Kubernetes API，因為他們具有單獨的私有端點，因此，您不能將 Amazon EKS 設定為僅可透過介面端點存取。
+  **定價**：使用使用 Amazon EKS 的介面端點，會產生標準 AWS PrivateLink 費用：每個可用區域中佈建的每個端點每小時地費用，以及透過端點產生流量的資料處理費用。如需了解詳細資訊，請參閱 [AWS PrivateLink 定價](https://aws.amazon.com/privatelink/pricing/)。
+  **安全與存取權控制**：建議透過這些額外的組態來增強安全性及控制存取權 – 藉助 VPC 端點政策，透過介面端點來控制對 Amazon EKS 的存取、關聯安全群組與端點網路介面來管理流量、使用 VPC 流量日誌來擷取及監控傳入與傳出介面端點的 IP 流量，以及可將日誌發布至 Amazon CloudWatch 或 Amazon S3。如需了解詳細資訊，請參閱[藉助端點政策來控制對 VPC 端點的存取權](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html)，以及[藉助 VPC 流量日誌來記錄 IP 流量日誌](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html)。
+  **連接選項**：介面端點使用**內部部署存取權** (藉助 AWS Direct Connect 或 AWS Site-to-Site VPN，透過介面端點來連接內部部署資料中心與 VPC) 或透過**跨 VPC 連接** (使用 AWS Transit Gateway 或 VPC 對等互連，連接其他 VPC 與介面端點，從而將流量保留在 AWS 網路內) 來提供靈活的連接選項。
+  **IP 版本支援**：2024 年 8 月之前建立的端點僅支援 IPv4 (使用 eks.region.amazonaws.com)。2024 年 8 月之後建立的全新端點則支援雙重堆疊 IPv4 和 IPv6 (例如 eks.region.amazonaws.com、eks.region.api.aws)。
+  **區域可用性**：亞太區域 (馬來西亞) (ap-southeast-5)、亞太區域 (泰國) (ap-southeast-7)、墨西哥 (中部) (mx-central-1) 及亞太區域 (台北) (ap-east-2) 區域不可使用適用於 EKS API 的 AWS PrivateLink。AWSPrivateLink 對 eks-auth (EKS Pod 身分識別) 的支援適用於亞太區域 (馬來西亞) (ap-southeast-5) 區域。

## 建立 Amazon VPC 的介面端點
<a name="vpc-endpoint-create"></a>

您可使用 Amazon VPC 主控台或 AWS Command Line Interface (AWS CLI)，來為 Amazon EKS 建立介面端點。如需詳細資訊，請參閱 *AWS PrivateLink 指南*中的[建立 VPC 端點](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint-aws)。

使用以下服務名稱為 Amazon EKS 建立介面端點：

### EKS API
<a name="_eks_api"></a>
+ com.amazonaws.region-code.eks
+ com.amazonaws.region-code.eks-fips (適用於 FIPS 相容端點)

### EKS 驗證 API (EKS Pod 身分識別)
<a name="_eks_auth_api_eks_pod_identity"></a>
+ com.amazonaws.region-code.eks-auth

## 適用於 Amazon EKS 介面端點的私有 DNS 功能
<a name="vpc-endpoint-private-dns"></a>

針對 Amazon EKS 及其他 AWS 服務的介面端點，預設會啟用私有 DNS 功能，使用預設的區域 DNS 名稱有助於發出安全的私有 API 請求。藉助此功能，可確保透過私有 AWS 網路的介面端點來路由 API 呼叫，從而增強安全性與效能。

若針對 Amazon EKS 或其他 AWS 服務建立介面端點，則會自動啟用私有 DNS 功能。如需啟用，需要藉由設定特定屬性來正確設定 VPC：
+  **enableDnsHostnames**：允許 VPC 內的執行個體具有 DNS 主機名稱。
+  **enableDnsSupport**：啟用整個 VPC 的 DNS 解析。

若要了解檢查或修改這些設定的逐步說明，請參閱[檢視並更新 VPC 的 DNS 屬性](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-updating)。

### DNS 名稱與 IP 位址類型
<a name="_dns_names_and_ip_address_types"></a>

若啟用私有 DNS 功能，您可使用特定 DNS 名稱來連接至 Amazon EKS，並且這些選項可隨時間推移而演進：
+  **eks.region.amazonaws.com**：傳統 DNS 名稱，僅解析為 2024 年 8 月之前的 IPv4 位址。針對更新至雙重堆疊的現有端點，此名稱解析為 IPv4 與 IPv6 位址。
+  **eks.region.api.aws**：適用於 2024 年 8 月之後建立的新端點，此雙重堆疊 DNS 名稱解析為 IPv4 與 IPv6 位址。

在 2024 年 8 月之後，新介面端點帶有兩個 DNS 名稱，並且您可選擇雙重堆疊 IP 位址類型。若是現有端點，更新至雙重堆疊會修改 **eks.region.amazonaws.com**，以支援 IPv4 與 IPv6。

### 使用私有 DNS 功能
<a name="_using_the_private_dns_feature"></a>

一旦設定完成，私有 DNS 功能即可整合至工作流程，提供以下功能：
+  **API 請求**：依據端點的設定，使用預設的區域性 DNS 名稱 `eks.region.amazonaws.com` 或 `eks.region.api.aws`，向 Amazon EKS 發出 API 請求。
+  **應用程式相容性**：現有應用程式呼叫 EKS API，無須任何變更即可善用此功能。
+  ** AWS CLI 搭配雙重堆疊**：若要將 雙堆疊端點與 CLI AWS 配合使用，請參閱 *AWS SDK 與工具參考指南*中的[雙重堆疊與 FIPS 端點](https://docs.aws.amazon.com/sdkref/latest/guide/feature-endpoints.html)組態。
+  **自動路由**：對 Amazon EKS 預設服務端點進行任何呼叫，都會透過介面端點自動引導，從而確保私有、安全的連接。

# 了解 Amazon EKS 叢集中的彈性
<a name="disaster-recovery-resiliency"></a>

AWS 全球基礎設施是以 AWS 區域與可用區域為中心建置的。AWS區域提供多個分開且隔離的實際可用區域，它們以低延遲、高輸送量和高度備援聯網功能相互連結。透過可用區域，您所設計與操作的應用程式和資料庫，就能夠在可用區域之間自動容錯移轉，而不會發生中斷。可用區域的可用性、容錯能力和擴充能力，均較單一或多個資料中心的傳統基礎設施還高。

Amazon EKS 可在多個 AWS 可用區域內執行和擴展 Kubernetes 控制平面，以確保高可用性。Amazon EKS 會根據負載來自動擴展控制平面執行個體，且會偵測及取代狀態不佳的控制平面執行個體，還會對控制平面進行自動化程式修補。啟動版本更新後，Amazon EKS 會更新控制平面，並在更新期間維持控制平面的高可用性。

此控制平面包含至少兩個 API 伺服器執行個體和三個 `etcd` 執行個體，而且會在 AWS 區域內的三個可用區域中執行。Amazon EKS：
+ 主動監控控制平面執行個體上的負載，並自動進行擴展以確保高效能。
+ 會自動偵測並取代有問題的控制平面執行個體，而且視需要在 AWS 區域內的可用區域中重新啟動。
+ 利用 AWS 區域的架構，以維持高可用性。因此，Amazon EKS 能夠提供 [API 伺服器端點可用性的 SLA](https://aws.amazon.com/eks/sla)。

如需 AWS 區域與可用區域的詳細資訊，請參閱 [AWS 全球基礎設施](https://aws.amazon.com/about-aws/global-infrastructure/)。

# Amazon EKS 中的預防跨服務混淆代理人
<a name="cross-service-confused-deputy-prevention"></a>

混淆代理人問題屬於安全性議題，其中沒有執行動作許可的實體可以強制具有更多許可的實體執行該動作。在 中 AWS，跨服務模擬可能會導致混淆代理人問題。在某個服務 (*呼叫服務*) 呼叫另一個服務 (*被呼叫服務*) 時，可能會發生跨服務模擬。可以操縱呼叫服務來使用其許可，以其不應有存取許可的方式對其他客戶的資源採取動作。為了防止這種情況， AWS 提供工具，協助您保護所有 服務的資料，讓 服務主體能夠存取您帳戶中的資源。

若要限制 Amazon Elastic Kubernetes Service (Amazon EKS) 為資源提供另一項服務的許可，我們推薦在資源政策中使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)、[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 全域條件內容索引鍵。

 `aws:SourceArn`   
使用 `aws:SourceArn`，僅將一個資源與跨服務存取權相關聯。

 `aws:SourceAccount`   
使用 `aws:SourceAccount`，讓該帳戶中的任何資源都與跨服務使用相關聯。

防範混淆代理人問題的最有效方法是使用 `aws:SourceArn` 全域條件內容索引鍵，以及資源的完整 ARN。如果不知道資源的完整 ARN，或者如果您指定了多個資源，請使用 `aws:SourceArn` 全域內容條件索引鍵搭配萬用字元 (\$1) 來表示 ARN 的未知部分。例如 ` arn:aws:<servicename>:*:<123456789012>:*`。

如果 `aws:SourceArn` 值不包含帳戶 ID (例如 Amazon S3 儲存貯體 ARN)，您必須同時使用 `aws:SourceAccount` 和 `aws:SourceArn` 來限制許可。

## Amazon EKS 叢集角色預防跨服務混淆代理人
<a name="cross-service-confused-deputy-cluster-role"></a>

每個叢集都需要一個 Amazon EKS 叢集 IAM 角色。受 Amazon EKS 管理的 Kubernetes 叢集使用此角色來管理節點，而[舊式雲端供應商](https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/guide/service/annotations/#legacy-cloud-provider)則使用此角色為服務建立具有 Elastic Load Balancing 的負載平衡器。這些叢集動作只能影響同一帳戶，因此建議您將每個叢集角色限制在該叢集和帳戶。這是 AWS 建議遵循您帳戶中*最低權限原則*的特定應用程式。

 **資源 ARN 格式** 

`aws:SourceArn` 的值必須是 EKS 叢集的 ARN，格式為 ` arn:aws: eks:region:account:cluster/cluster-name `。例如，` arn:aws: eks:us-west-2:123456789012:cluster/my-cluster`。

 **EKS 叢集角色的信任政策格式** 

下列範例示範如何使用 Amazon EKS 中的 `aws:SourceArn` 和 `aws:SourceAccount` 全域條件內容索引鍵，來預防混淆代理人問題。

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "eks.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "ArnLike": {
          "aws:SourceArn": "arn:aws:eks:us-west-2:123456789012:cluster/my-cluster"
          },
        "StringEquals": {
            "aws:SourceAccount": "123456789012"
        }
      }
    }
  ]
}
```