Menyimpan kunci akun layanan di secret Kubernetes

Menyimpan secret akun layanan di secret Kubernetes

Halaman ini menjelaskan cara menyimpan kunci akun layanan Apigee Hybrid di secret Kubernetes. Menyimpan kunci akun layanan di secret Kubernetes meningkatkan keamanan dan menyederhanakan pengelolaan dalam lingkungan Kubernetes Anda. Dengan kunci yang disimpan dalam rahasia, Anda tidak perlu menyimpannya di sistem file.

Akun layanan

Hybrid menggunakan akun layanan berikut:

Produksi

Non-prod

  • apigee-non-prod

Sebelum memulai

Prosedur ini menggunakan dua variabel lingkungan opsional: $APIGEE_HELM_CHARTS_HOME dan $PROJECT_ID. Jika Anda tidak menentukan variabel ini, ganti nilai yang sesuai untuk setiap variabel dalam contoh kode.

  1. Buat direktori untuk kunci akun layanan di direktori $APIGEE_HELM_CHARTS_HOME:
    mkdir -p $APIGEE_HELM_CHARTS_HOME/service-accounts
  2. Pastikan Anda dapat menjalankan alat create-service-account. Jika Anda baru saja mendownload diagram, file create-service-account mungkin tidak dalam mode yang dapat dieksekusi. Di direktori $APIGEE_HELM_CHARTS_HOME, jalankan perintah berikut:
    $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \
    --help

    Jika output menunjukkan error izin ditolak, buat file dapat dieksekusi. Misalnya, gunakan chmod di Linux, macOS, atau UNIX:

    chmod +x $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account

Membuat kunci akun layanan

Buat atau perbarui akun layanan dan download file kunci menggunakan alat create-service-account. Tindakan ini mendownload satu file JSON untuk setiap akun layanan.

Nama file kunci akun layanan akan memiliki format berikut: $PROJECT_ID-apigee-SERVICE_ACCOUNT_NAME.json

Produksi

$APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \
  --env prod \
  --dir $APIGEE_HELM_CHARTS_HOME/service-accounts

Non-prod

$APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \
  --env non-prod \
  --dir $APIGEE_HELM_CHARTS_HOME/service-accounts

Membuat secret Kubernetes

Buat secret Kubernetes untuk menyimpan kunci akun layanan.

Perintah kubectl create secret dalam contoh kode berikut memiliki struktur:

kubectl create secret generic SECRET_NAME \
  --from-file="client_secret.json=PATH_TO_SERVICE_ACCOUNT_KEY" \
  -n APIGEE_NAMESPACE

Produksi

Buat secret dengan perintah berikut:

  • apigee-cassandra (jika menjadwalkan pencadangan di 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 (jika Anda menggunakan Monetisasi untuk 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

Non-prod

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

Mereferensikan kunci akun layanan dalam konfigurasi

Setelah menyimpan kunci akun layanan sebagai secret Kubernetes, perbarui file overrides.yaml Hybrid Anda untuk mereferensikan secret ini, bukan jalur file langsung. Ubah properti serviceAccountPath yang relevan untuk menggunakan serviceAccountSecretRef.

Gunakan konfigurasi serviceAccountSecretRefs dan serviceAccountRef berikut di bagian yang sesuai dioverrides.yaml Anda:

Produksi

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

Non-prod

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

Menerapkan perubahan konfigurasi

Terapkan perubahan pada diagram apigee-telemetry, apigee-org, dan apigee-env dengan perintah berikut:

  1. Upgrade telemetri Apigee:
    helm upgrade telemetry apigee-telemetry/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      -f OVERRIDES_FILE
    
  2. Upgrade organisasi Apigee:
    helm upgrade ORG_NAME apigee-org/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      -f OVERRIDES_FILE
    
  3. Upgrade lingkungan.

    Tentukan lingkungan dengan --set env=ENV_NAME. Ulangi perintah ini untuk setiap lingkungan.

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

Langkah berikutnya