將服務帳戶密鑰儲存在 Kubernetes 密鑰中
本頁說明如何將 Apigee Hybrid 服務帳戶金鑰儲存在 Kubernetes Secret 中。將服務帳戶金鑰儲存在 Kubernetes 密鑰中,可提升安全性,並簡化 Kubernetes 環境中的管理作業。將金鑰儲存在密鑰中,就不必儲存在檔案系統中。
服務帳戶
Hybrid 會使用下列服務帳戶:
正式環境
apigee-cassandra
(在 Google Cloud Storage 中備份及還原 Cassandra 時必須使用)apigee-logger
apigee-mart
apigee-metrics
apigee-mint-task-scheduler
(如果您使用 Apigee Hybrid 營利服務)apigee-runtime
apigee-synchronizer
apigee-udca
apigee-watcher
非正式環境
apigee-non-prod
事前準備
這個程序會使用兩個選用環境變數:$APIGEE_HELM_CHARTS_HOME
和 $PROJECT_ID
。如果您未定義這些變數,請在程式碼範例中,為每個變數代入適當的值。
- 在
$APIGEE_HELM_CHARTS_HOME
目錄中建立服務帳戶金鑰的目錄:mkdir -p $APIGEE_HELM_CHARTS_HOME/service-accounts
- 確認你可以執行
create-service-account
工具。如果最近才下載圖表,檔案可能不是可執行模式。create-service-account
在$APIGEE_HELM_CHARTS_HOME
目錄中執行下列指令:$APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \ --help
如果輸出內容顯示權限遭拒錯誤,請將檔案設為可執行檔。 舉例來說,在 Linux、macOS 或 UNIX 中使用
chmod
:chmod +x $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account
建立服務帳戶金鑰
使用 create-service-account
工具建立或更新服務帳戶,並下載金鑰檔案。這項操作會為每個服務帳戶下載一個 JSON 檔案。
服務帳戶金鑰檔名格式如下:
$PROJECT_ID-apigee-SERVICE_ACCOUNT_NAME.json
正式環境
$APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \ --env prod \ --dir $APIGEE_HELM_CHARTS_HOME/service-accounts
非正式環境
$APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \ --env non-prod \ --dir $APIGEE_HELM_CHARTS_HOME/service-accounts
建立 Kubernetes Secret
建立 Kubernetes 密鑰,儲存服務帳戶金鑰。
下列程式碼範例中的 kubectl create secret
指令具有下列結構:
kubectl create secret generic SECRET_NAME \ --from-file="client_secret.json=PATH_TO_SERVICE_ACCOUNT_KEY" \ -n APIGEE_NAMESPACE
正式環境
使用下列指令建立密鑰:
-
apigee-cassandra
(如果在 Cloud Storage 中排定備份作業)kubectl create secret generic apigee-cassandra-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-cassandra.json" \ -n APIGEE_NAMESPACE
-
apigee-logger
kubectl create secret generic apigee-logger-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-logger.json" \ -n APIGEE_NAMESPACE
-
apigee-mart
kubectl create secret generic apigee-mart-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-mart.json" \ -n APIGEE_NAMESPACE
-
apigee-metrics
kubectl create secret generic apigee-metrics-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-metrics.json" \ -n APIGEE_NAMESPACE
-
apigee-mint-task-scheduler
(如果您使用 Apigee Hybrid 營利服務)kubectl create secret generic apigee-mint-task-scheduler-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-mint-task-scheduler.json" \ -n APIGEE_NAMESPACE
-
apigee-runtime
kubectl create secret generic apigee-runtime-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-runtime.json" \ -n APIGEE_NAMESPACE
-
apigee-synchronizer
kubectl create secret generic apigee-synchronizer-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-synchronizer.json" \ -n APIGEE_NAMESPACE
-
apigee-udca
kubectl create secret generic apigee-udca-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-udca.json" \ -n APIGEE_NAMESPACE
-
apigee-watcher
kubectl create secret generic apigee-watcher-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-watcher.json" \ -n APIGEE_NAMESPACE
非正式環境
kubectl create secret generic apigee-non-prod-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-non-prod.json" \ -n APIGEE_NAMESPACE
在設定中參照服務帳戶金鑰
將服務帳戶金鑰儲存為 Kubernetes 密鑰後,請更新 Hybrid overrides.yaml
檔案,改為參照這些密鑰,而非直接參照檔案路徑。修改相關的 serviceAccountPath
屬性,改用 serviceAccountSecretRef
。
在 overrides.yaml
的適當區段中,使用下列 serviceAccountSecretRefs
和 serviceAccountRef
設定:
正式環境
envs: - name: test serviceAccountSecretRefs: synchronizer: apigee-synchronizer-svc-account runtime: apigee-runtime-svc-account udca: apigee-udca-svc-account mart: serviceAccountRef: apigee-mart-svc-account # Use the same service account for mart.serviceAccountRef and connectAgent.serviceAccountRef connectAgent: serviceAccountRef: apigee-mart-svc-account # Use the same service account for mart.serviceAccountRef and connectAgent.serviceAccountRef logger: serviceAccountRef: apigee-logger-svc-account metrics: serviceAccountRef: apigee-metrics-svc-account udca: serviceAccountRef: apigee-udca-svc-account watcher: serviceAccountRef: apigee-watcher-svc-account # If Scheduling backups in Cloud Storage cassandra: backup: serviceAccountRef: apigee-cassandra-svc-account # If using Monetization for Apigee hybrid mintTaskScheduler: serviceAccountRef: apigee-mint-task-scheduler-svc-account
非正式環境
envs: - name: test-env serviceAccountSecretRefs: synchronizer: apigee-non-prod-svc-account runtime: apigee-non-prod-svc-account udca: apigee-non-prod-svc-account mart: serviceAccountRef: apigee-non-prod-svc-account connectAgent: serviceAccountRef: apigee-non-prod-svc-account logger: serviceAccountRef: apigee-non-prod-svc-account metrics: serviceAccountRef: apigee-non-prod-svc-account udca: serviceAccountRef: apigee-non-prod-svc-account watcher: serviceAccountRef: apigee-non-prod-svc-account # If Scheduling backups in Cloud Storage cassandra: backup: serviceAccountRef: apigee-non-prod-svc-account # If using Monetization for Apigee hybrid mintTaskScheduler: serviceAccountRef: apigee-non-prod-svc-account
套用設定變更
使用下列指令,將變更套用至 apigee-telemetry
、apigee-org
和 apigee-env
圖表:
-
升級 Apigee 遙測功能:
helm upgrade telemetry apigee-telemetry/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE
-
升級 Apigee 機構:
helm upgrade ORG_NAME apigee-org/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE
-
升級環境。
使用
--set env=
ENV_NAME 指定環境。針對每個環境重複執行這項指令。helm upgrade ENV_RELEASE_NAME apigee-env/ \ --install \ --namespace APIGEE_NAMESPACE \ --set env=ENV_NAME \ -f OVERRIDES_FILE
後續步驟
- 進一步瞭解混合式服務帳戶和角色。
- 請參閱 Hybrid 安裝指南的「建立服務帳戶」一節。