Apigee Hybrid 中的服務帳戶驗證方法

在 Apigee Hybrid 中選擇服務帳戶驗證方式

Apigee hybrid 需要服務帳戶,才能與 Google Cloud 服務安全通訊。請根據安全性和作業需求,為這些服務帳戶選擇驗證方式。本指南將概略說明可用的選項。

瞭解服務帳戶驗證

Apigee hybrid 會使用 Google Cloud 服務帳戶,驗證及授權在 Kubernetes 叢集中執行的元件。這些服務帳戶會存取 Google Cloud 資源,例如 Cloud Storage bucket 和 Cloud Logging。每個服務帳戶都需要特定的 Identity and Access Management (IAM) 角色,才能執行其功能。

驗證方式選項

Apigee hybrid 支援多種驗證服務帳戶的方法。每種方法管理服務帳戶金鑰的方式不同,安全性和操作複雜度也各有差異。選擇方法時,請考量平台、資安態勢和現有基礎架構。

下表列出可用的驗證方式:

方法 金鑰儲存位置 平台相容性 金鑰管理
Kubernetes Secret Kubernetes 叢集 Secret 任何 Kubernetes 平台 Kubernetes 管理 Secret,手動輪替
服務帳戶 JSON 金鑰檔案 本機檔案系統 任何 Kubernetes 平台 手動輪替和分配
保管箱 HashiCorp Vault 任何 Kubernetes 平台 Vault 管理 Secret,手動輪替
Workload Identity Federation for GKE Google Cloud IAM Google Kubernetes Engine (GKE) Google Cloud 管理,不需要金鑰檔案
其他平台上的 Workload Identity Federation Google Cloud IAM AKS、EKS、OpenShift 或其他 Kubernetes 平台 Google Cloud 管理,不需要金鑰檔案

將服務帳戶金鑰儲存在 Kubernetes Secret 中

將服務帳戶金鑰儲存為叢集中的 Kubernetes Secret。這個方法會運用 Kubernetes 內建的 Secret 管理功能。相較於直接儲存檔案,Kubernetes Secret 可提供更安全的金鑰管理方式。您仍須手動管理金鑰輪替。

混合元件會使用 overrides.yaml 檔案中的 serviceAccountRef 和 envs[].serviceAccountRefs 屬性參照這些 Secret。Kubernetes 會管理這些 Secret,並將其分配給適當的 Pod。

例如:

logger:
  serviceAccountRef: "my-project-apigee-logger-key"

如要使用這個方法,請參閱「將服務帳戶金鑰儲存在 Kubernetes Secret」。

服務帳戶 JSON 金鑰檔案

這個方法會為每個服務帳戶建立 JSON 金鑰檔案,並直接儲存在檔案系統中。這個方法可簡化初始設定。不過,您必須確保檔案系統的安全。金鑰輪替為手動。

將每個服務帳戶的私密金鑰 JSON 檔案,放在 Apigee hybrid 元件可存取的目錄中。使用 serviceAccountPath 和 envs[].serviceAccountPaths 屬性,在 overrides.yaml 設定中參照這些檔案的路徑。

例如:

logger:
  serviceAccountPath: "my-project-apigee-logger.json"

您可以使用 Apigee hybrid 提供的 create-service-account 工具,產生及下載服務帳戶金鑰檔案。詳情請參閱 create-service-account 的說明。

將服務帳戶金鑰儲存在 Vault

整合 HashiCorp Vault,管理服務帳戶金鑰。Vault 提供強大的 Secret Manager 解決方案,具備動態 Secret 生成、稽核和自動金鑰輪替等功能。必須設定及維護 Vault 執行個體。

您必須為組織層級和環境層級元件建立個別的 Vault 密鑰、政策和角色。您可以使用 serviceAccountSecretProviderClass 和 envs[].serviceAccountSecretProviderClass 屬性,在 overrides.yaml 設定中參照這些密鑰。

例如:

serviceAccountSecretProviderClass: apigee-orgsakeys-spc

envs:
- name: my-env
  serviceAccountSecretProviderClass: apigee-envsakeys-my-env-spc

請參閱「將服務帳戶金鑰儲存在 Vault 中」。

Workload Identity Federation for GKE

Workload Identity Federation for GKE 可讓 Kubernetes 服務帳戶做為 Google Cloud服務帳戶。這樣一來,您就完全不需要服務帳戶金鑰檔案。相反地,GKE 叢集會直接使用Google Cloud IAM 驗證工作負載。Workload Identity Federation for GKE 提供高度安全且自動化的驗證機制,可簡化金鑰管理作業。這個方法僅適用於 GKE 叢集。

這個方法需要將每個 Kubernetes 服務帳戶繫結至特定 Google Cloud 服務帳戶。安裝 Apigee hybrid Helm 圖表時,Apigee hybrid 安裝程序會建立安裝作業專屬的 Kubernetes 服務帳戶。使用 --dry-run 旗標為每個圖表執行 helm install 或 helm upgrade 指令時,輸出內容會包含將 Kubernetes 服務帳戶繫結至該圖表中特定 Apigee hybrid 元件的 Google Cloud 服務帳戶的指令。

您可以在 overrides.yaml 檔案中使用 gcp.workloadIdentity.enabled 屬性,啟用 Workload Identity Federation for GKE。

例如:

gcp:
  projectID: my-project
  region: us-west1
  workloadIdentity:
    enabled: true

請參閱「啟用 Workload Identity Federation for GKE」。

在 GKE 以外的平台使用 Workload Identity Federation

Workload Identity Federation 將 Workload Identity Federation for GKE 的優點,延伸至在 Google Cloud外部執行的 Kubernetes 叢集,例如 Azure Kubernetes Service (AKS)、Amazon Elastic Kubernetes Service (EKS) 或 OpenShift。這個方法可讓非 GKE 叢集使用叢集的 OIDC 供應商向 Google Cloud 進行驗證,以便在叢集的識別資訊提供者與 Google Cloud之間設定信任關係。完成初始設定後,就不需要服務帳戶金鑰檔案。

Workload Identity Federation 可與下列項目搭配使用:

  • 憑證設定檔 (取代服務帳戶金鑰檔案)
  • Kubernetes Secret
  • 保管箱

如要使用 Workload Identity Federation,請為每個 Google Cloud 服務帳戶建立憑證設定檔。您可以使用這些檔案取代服務帳戶金鑰檔案,或設定 Kubernetes Secret 或 Vault (如果您使用這些方法)。

您可以在 overrides.yaml 檔案中,使用 gcp.federatedWorkloadIdentity.enabled、gcp.federatedWorkloadIdentity.audience 和 gcp.federatedWorkloadIdentity.credentialSourceFile 屬性啟用 Workload Identity Federation。

例如:

gcp:
  projectID: my-project
  region: us-west1
  federatedWorkloadIdentity:
    enabled: true
    audience: "//iam.googleapis.com/projects/123123123123/locations/global/workloadIdentityPools/my-wi-pool/providers/my-wi-provider"
    credentialSourceFile: "/var/run/service-account/token"

請參閱「啟用 Workload Identity Federation」。

選擇驗證方式

請根據部署環境和安全性需求,選取驗證方式。

  • 如果是 GKE 部署作業,Workload Identity Federation for GKE 可提供安全且簡便的方法。這樣就不需要直接管理服務帳戶金鑰檔案。
  • 針對非 GKE Kubernetes 部署項目 (AKS、EKS、OpenShift),Workload Identity Federation 提供類似的無金鑰驗證體驗。建議在這些環境中採用這個方法。
  • 如果無法使用 Workload Identity Federation for GKE 或 Workload Identity Federation,請考慮使用 Vault 集中管理金鑰及自動化作業。
  • 如果部署作業較簡單,或沒有 Vault 設定,將金鑰儲存在 Kubernetes Secret 中,可提供原生 Kubernetes 解決方案。這種方法比直接儲存檔案更安全。
  • 直接服務帳戶金鑰檔案適用於初始測試,或無法使用其他方法的環境。不過,這個方法需要謹慎手動管理及輪替金鑰。

後續步驟