安全性

本頁面說明 GKE on AWS 內建的安全功能,包括基礎架構的各個層級,以及如何設定安全功能來滿足您的需求。

總覽

GKE on AWS 提供多項功能,協助保護工作負載,包括容器映像檔的內容、容器執行階段、叢集網路,以及叢集 API 伺服器的存取權。

如要保護叢集和工作負載,最好的方式是採取分層防護。針對提供給使用者和工作負載的存取層級,您可以採取最低權限原則。您可能需要做出取捨,以利提供適當的彈性和安全性。

共同責任

使用 GKE on AWS 時,您同意對叢集承擔特定責任。詳情請參閱「GKE 叢集共同責任」。

驗證及授權

您可以透過下列任一方法,向 GKE on AWS 使用者叢集進行驗證:

如要在叢集層級或在 Kubernetes 命名空間內設定更精細的 Kubernetes 資源存取權,可使用 Kubernetes 角色型存取控制 (RBAC)。 RBAC 可讓您建立詳細的政策,以定義您允許使用者及服務帳戶存取的作業和資源。透過 RBAC,您可以控管任何經過驗證的身分存取權。

為進一步簡化及精簡 Kubernetes Engine 的驗證和授權策略,GKE on AWS 會停用舊版屬性型存取權控管 (ABAC)

加密

根據預設,GKE on AWS 會使用 AWS Key Management Service (KMS),加密 etcd 中的靜態資料、EBS 磁碟區、Kubernetes Secrets 和控制層元件

如要加密使用者叢集中的機密資料,可以使用下列任一方法:

Kubernetes Secret

Kubernetes Secret 資源會在叢集中儲存機密資料,例如密碼、OAuth 權杖和 SSH 金鑰。將機密資料儲存在 Secret 裡,比儲存在明文 ConfigMaps 或以 Pod 規格儲存更為安全。使用 Secret 可讓您控管機密資料的使用方式,並降低未授權使用者看到資料的風險。

HashiCorp Vault

GKE on AWS 可使用 Hashicorp Vault,保護使用者叢集中的 Secret。詳情請參閱「在 GKE on AWS 上使用 HashiCorp Vault」。

控制層安全性

控制層元件包括管理服務,以及使用者叢集的 Kubernetes API 伺服器、排程器、控制器和 etcd 資料庫。在 GKE on AWS 中,本機管理員會管理控制層元件。

在 GKE on AWS 中,控制層元件會在 AWS 上執行。您可以使用 AWS 安全性群組和網路 ACL,保護 GKE on AWS 的 API 伺服器。

AWS 上的 GKE 中,所有通訊都會透過傳輸層安全標準 (TLS) 管道進行,並由下列憑證授權單位 (CA) 管理:

  • etcd CA 可確保 API 伺服器與 etcd 副本之間的通訊安全,以及 etcd 副本之間的流量安全。這個 CA 是自行簽署的。
  • 使用者叢集 CA 可確保 API 伺服器與所有內部 Kubernetes API 用戶端 (kubelet、控制器、排程器) 之間的通訊安全無虞。這個 CA 已透過 KMS 加密。
  • 管理服務 CA 會經過 AWS KMS 加密。執行 anthos-gke init 時會建立這個檔案,並儲存在 Terraform 工作區中。使用 terraform apply 建立管理服務時,CA 金鑰會以 AWS EC2 使用者資料的形式傳遞,並在叢集啟動時由 AWS KMS 解密。

管理服務的控制層金鑰會儲存在控制層 [節點]{:.external}上。對於使用者叢集,金鑰會以 Kubernetes Secret 的形式,儲存在管理服務的控制層。

在 AWS 上的 GKE 中,叢集驗證是由憑證和服務帳戶不記名憑證處理。管理員會使用管理憑證向管理服務驗證控制平面 (用於建立初始角色繫結,或用於緊急情況)。

憑證輪替的處理方式如下:

  • 對於 API 伺服器、控制層和節點,GKE on AWS 會在每次升級時輪替 TLS 憑證。
  • 您也可以手動輪替安全性憑證

節點安全性

GKE on AWS 會將工作負載部署到 AWS EC2 執行個體的節點集區。以下各節說明如何在 GKE on AWS 中使用節點層級安全功能。

Ubuntu

GKE on AWS 使用最佳化版本的 Ubuntu 做為執行 Kubernetes 控制層和節點的作業系統。Ubuntu 包含豐富的現代安全性功能,而 GKE on AWS 則為叢集實作多項安全性強化功能,包括:

  • 最佳化套件組合。
  • Google Cloud-tailored Linux kernel.
  • 有限的使用者帳戶及停用 root 使用者登入。

Ubuntu 另有其他安全性指南,例如:

節點升級

您應定期升級節點。有時候因為容器執行階段、Kubernetes 本身或節點作業系統中的安全問題,您可能需要更緊急地升級節點。升級使用者叢集時,每個節點的軟體都會升級至最新版本。此外,升級節點會輪替加密憑證

保護工作負載安全

Kubernetes 可讓使用者快速佈建、調度資源及更新以容器為基礎的工作負載。本節說明可用的策略,以避免執行中的容器對叢集和 Google Cloud 服務造成副作用。

限制 pod 容器程序的權限

限制容器化程序權限對叢集安全至關重要。您可以透過 Pod 和容器的安全情境,設定安全相關選項。這些設定可讓您變更程序的安全設定,如:

  • 執行程序的的使用者和群組。
  • 可用的 Linux 功能。
  • 權限提升。

預設的 GKE on AWS 節點作業系統 Ubuntu 會針對 Kubernetes 啟動的所有容器,套用預設的 Docker AppArmor 安全政策。您可在 GitHub 上檢視設定檔範本。此外,設定檔會拒絕在容器執行下列功能:

  • 直接寫入程序 ID 目錄 (/proc/) 中的檔案。
  • 寫入不在 /proc/ 中的檔案。
  • 將檔案寫入 /proc/sys,而非 /proc/sys/kernel/shm*
  • 掛接檔案系統。

後續步驟