

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

# Amazon EMR on EKS 安全最佳實務
<a name="security-best-practices"></a>

在您開發和實作自己的安全政策時，可考慮使用 Amazon EMR on EKS 提供的多種安全功能。以下最佳實務為一般準則，並不代表完整的安全解決方案。這些最佳實務可能不適用或無法滿足您的環境需求，因此請將其視為實用建議就好，而不要當作是指示。

**注意**  
如需安全最佳實務的詳細資訊，請參閱 [Amazon EMR on EKS 安全最佳實務](#security-best-practices)。

## 套用最低權限準則
<a name="security-least-privilege"></a>

Amazon EMR on EKS 為使用 IAM 角色 (例如執行角色) 的應用程式提供精細存取政策。這些執行角色會透過 IAM 角色的信任政策映射至 Kubernetes 服務帳戶。Amazon EMR on EKS 會在已註冊的 Amazon EKS 命名空間內建立 Pod，它們可執行使用者提供的應用程式碼。執行應用程式程式碼的任務 Pod 會在連線至其他 AWS 服務時擔任執行角色。建議只授予作業所需的最低權限集，例如覆蓋應用程式和日誌目的地的存取權限。我們還建議定期以及在應用程式碼發生變更時審核作業許可。

## 端點的存取控制清單
<a name="security-access-control-list"></a>

僅可針對已設定為在 VPC 中至少使用一個私有子網路的 EKS 叢集建立受管端點。此組態會限制受管端點建立的負載平衡器的存取，以便只能從 VPC 存取它們。若要進一步增強安全性，建議使用這些負載平衡器設定安全群組，以便它們可以將傳入流量限制到選取的一組 IP 地址。

## 取得自訂映像的最新安全更新
<a name="security-custom-image"></a>

若要搭配使用自訂映像與 Amazon EMR on EKS，您可以在映像上安裝任何二進位檔案和程式庫。您負責對新增至映像的二進位檔案進行安全修補。會定期使用最新的安全修補程式修補 Amazon EMR on EKS 映像。若要取得最新映像，只要有 Amazon EMR 版本的新基礎映像版本，就必須重建自訂映像。如需詳細資訊，請參閱[Amazon EMR on EKS 發行版本](emr-eks-releases.md)及[選取基礎映像 URI 的詳細資訊](docker-custom-images-tag.md)。

## 限制 Pod 憑證存取
<a name="security-limit-pod"></a>

Kubernetes 支援數種將憑證指派給 Pod 的方法。佈建多個憑證提供者可能會增加安全模型的複雜性。Amazon EMR on EKS 已採用[服務帳戶的 IAM 角色 (IRSA)](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) 作為已註冊的 EKS 命名空間內的標準憑證提供者。不支援其他方法，包括 [kube2iam](https://github.com/jtblin/kube2iam)、[kiam](https://github.com/uswitch/kiam) 以及使用在叢集上執行之執行個體的 EC2 執行個體設定檔。

## 隔離不受信任的應用程式碼
<a name="security-isolate-untrusted"></a>

Amazon EMR on EKS 不會檢查系統使用者提交的應用程式碼的完整性。如果您執行的是使用多個執行角色設定的多租戶虛擬叢集，而執行任意程式碼的不受信任的租用戶可使用這些角色提交作業，則可能存在惡意應用程式提升其權限的風險。在這種情況下，請考慮將具有類似權限的執行角色隔離到不同的虛擬叢集中。

## 角色型存取控制 (RBAC) 許可
<a name="security-practice-rbac"></a>

管理員應嚴格控制 Amazon EMR on EKS 受管命名空間的角色型存取控制 (RBAC) 許可。至少，不應將下列許可授予給 Amazon EMR on EKS 受管命名空間中的作業提交者。
+ Kubernetes RBAC 許可能夠修改 configmap，因為 Amazon EMR on EKS 使用 Kubernetes configmaps 來產生具有受管服務帳戶名稱的受管 Pod 範本。此屬性不應發生突變。
+ Kubernetes RBAC 許可能夠執行至 Amazon EMR on EKS Pod 中，以避免對具有受管 SA 名稱的受管 Pod 範本授予存取權。此屬性不應發生突變。此許可准許存取掛載至 Pod 的 JWT 字符，然後可用來擷取執行角色憑證。
+ 建立 Pod 的 Kubernetes RBAC 許可 - 防止使用者使用 Kubernetes ServiceAccount 建立 Pod，該 Kubernetes ServiceAccount 可能會對應到具有比使用者更多 AWS 權限的 IAM 角色。
+ Kubernetes RBAC 許可能夠部署發生變化的 Webhook，以防止使用者使用發生變化的 Webhook 來變更由 Amazon EMR on EKS 建立的 Pod 的 Kubernetes ServiceAccount 名稱。
+ Kubernetes RBAC 許可能夠讀取 Kubernetes 密碼，以防止使用者讀取儲存在這些密碼中的機密資料。

## 限制存取節點群組 IAM 角色或執行個體設定檔憑證
<a name="security-practice-nodegroup"></a>
+ 建議您將最低 AWS 許可指派給節點群組的 IAM 角色 (IAM)。這有助於避免使用 EKS 工作節點的執行個體設定檔憑證執行的程式碼進行權限提升。
+ 若要完全阻止對在 Amazon EMR on EKS 受管命名空間中執行的所有 Pod 的執行個體設定檔憑證的存取，建議您在 EKS 節點上執行 `iptables` 命令。如需詳細資訊，請參閱[限制存取 Amazon EC2 執行個體設定檔憑證](https://docs.aws.amazon.com/eks/latest/userguide/restrict-ec2-credential-access.html)。不過，請務必適當限制您的服務帳戶 IAM 角色範圍，以便 Pod 擁有所有必要的許可。例如，節點 IAM 角色會被指派從 Amazon ECR 中提取容器映像的許可。如果 Pod 沒有被指派這些許可，則該 Pod 無法從 Amazon ECR 中提取容器映像。VPC CNI 外掛程式也需要更新。如需詳細資訊，請參閱[逐步解說：更新 VPC CNI 外掛程式以使用服務帳戶的 IAM 角色](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts-cni-walkthrough.html)。