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

將服務帳戶密鑰儲存在 Kubernetes 密鑰中

本頁說明如何將 Apigee Hybrid 服務帳戶金鑰儲存在 Kubernetes Secret 中。將服務帳戶金鑰儲存在 Kubernetes 密鑰中,可提升安全性,並簡化 Kubernetes 環境中的管理作業。將金鑰儲存在密鑰中,就不必儲存在檔案系統中。

服務帳戶

Hybrid 會使用下列服務帳戶:

正式環境

非正式環境

  • apigee-non-prod

事前準備

這個程序會使用兩個選用環境變數:$APIGEE_HELM_CHARTS_HOME$PROJECT_ID。如果您未定義這些變數,請在程式碼範例中,為每個變數代入適當的值。

  1. $APIGEE_HELM_CHARTS_HOME 目錄中建立服務帳戶金鑰的目錄:
    mkdir -p $APIGEE_HELM_CHARTS_HOME/service-accounts
  2. 確認你可以執行 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 的適當區段中,使用下列 serviceAccountSecretRefsserviceAccountRef 設定:

正式環境

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-telemetryapigee-orgapigee-env 圖表:

  1. 升級 Apigee 遙測功能:
    helm upgrade telemetry apigee-telemetry/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      -f OVERRIDES_FILE
    
  2. 升級 Apigee 機構:
    helm upgrade ORG_NAME apigee-org/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      -f OVERRIDES_FILE
    
  3. 升級環境。

    使用 --set env=ENV_NAME 指定環境。針對每個環境重複執行這項指令。

    helm upgrade ENV_RELEASE_NAME apigee-env/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --set env=ENV_NAME \
      -f OVERRIDES_FILE
    

後續步驟