Archiviazione delle chiavi del account di servizio nei secret Kubernetes

Archiviazione dei secret degli account di servizio nei secret Kubernetes

Questa pagina descrive come archiviare le chiavi del service account ibrido Apigee nei secret Kubernetes. L'archiviazione delle chiavi del account di servizio nei secret di Kubernetes migliora la sicurezza e semplifica la gestione all'interno dell'ambiente Kubernetes. Con le chiavi archiviate nei secret, non è necessario memorizzarle nel file system.

Account di servizio

Hybrid utilizza i seguenti service account:

Produzione

Non di produzione

  • apigee-non-prod

Prima di iniziare

Questa procedura utilizza due variabili di ambiente facoltative: $APIGEE_HELM_CHARTS_HOME e $PROJECT_ID. Se non definisci queste variabili, sostituisci il valore appropriato per ciascuna variabile negli esempi di codice.

  1. Crea una directory per le chiavi del account di servizio nella directory $APIGEE_HELM_CHARTS_HOME:
    mkdir -p $APIGEE_HELM_CHARTS_HOME/service-accounts
  2. Verifica di poter eseguire lo strumento create-service-account. Se hai scaricato di recente i grafici, il file create-service-account potrebbe non essere in modalità eseguibile. Nella directory $APIGEE_HELM_CHARTS_HOME, esegui questo comando:
    $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \
    --help

    Se l'output indica un errore di autorizzazione negata, rendi eseguibile il file. Ad esempio, utilizza chmod in Linux, macOS o UNIX:

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

Crea le chiavi degli account di servizio

Crea o aggiorna i service account e scarica i file delle chiavi utilizzando lo strumento create-service-account. Questa azione scarica un file JSON per ogni account di servizio.

I nomi dei file delle chiavi del account di servizio avranno il seguente formato: $PROJECT_ID-apigee-SERVICE_ACCOUNT_NAME.json

Produzione

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

Non di produzione

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

Crea secret Kubernetes

Crea i secret di Kubernetes per archiviare le chiavi del account di servizio.

Il comando kubectl create secret nei seguenti esempi di codice ha la struttura:

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

Produzione

Crea i secret con i seguenti comandi:

  • apigee-cassandra (se pianifichi i backup in 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 (se utilizzi Monetizzazione per 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 di produzione

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

Fare riferimento alle chiavi del account di servizio nella configurazione

Dopo aver archiviato le chiavi del account di servizio come secret Kubernetes, aggiorna il file Hybrid overrides.yaml in modo che faccia riferimento a questi secret anziché ai percorsi dei file diretti. Modifica le proprietà serviceAccountPath pertinenti per utilizzare serviceAccountSecretRef.

Utilizza le seguenti configurazioni serviceAccountSecretRefs e serviceAccountRef nelle sezioni appropriate del tuooverrides.yaml:

Produzione

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 di produzione

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

Applica modifiche alla configurazione

Applica le modifiche ai grafici apigee-telemetry, apigee-org e apigee-env con i seguenti comandi:

  1. Esegui l'upgrade della telemetria Apigee:
    helm upgrade telemetry apigee-telemetry/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      -f OVERRIDES_FILE
    
  2. Esegui l'upgrade dell'organizzazione Apigee:
    helm upgrade ORG_NAME apigee-org/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      -f OVERRIDES_FILE
    
  3. Esegui l'upgrade dell'ambiente.

    Specifica l'ambiente con --set env=ENV_NAME. Ripeti questo comando per ogni ambiente.

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

Passaggi successivi