Stocker les clés de compte de service dans des secrets Kubernetes

Stocker des secrets de compte de service dans des secrets Kubernetes

Cette page explique comment stocker les clés de compte de service Apigee hybrid dans des secrets Kubernetes. Le stockage des clés de compte de service dans les secrets Kubernetes renforce la sécurité et simplifie la gestion dans votre environnement Kubernetes. Avec les clés stockées dans les secrets, vous n'avez pas besoin de les stocker dans le système de fichiers.

Comptes de service

Apigee hybrid utilise les comptes de service suivants :

Production

Hors production

  • apigee-non-prod

Avant de commencer

Cette procédure utilise deux variables d'environnement facultatives : $APIGEE_HELM_CHARTS_HOME et $PROJECT_ID. Si vous ne définissez pas ces variables, remplacez la valeur appropriée pour chaque variable dans les exemples de code.

  1. Créez un répertoire pour les clés de compte de service dans le répertoire $APIGEE_HELM_CHARTS_HOME :
    mkdir -p $APIGEE_HELM_CHARTS_HOME/service-accounts
  2. Vérifiez que vous pouvez exécuter l'outil create-service-account. Si vous avez récemment téléchargé les graphiques, il est possible que le fichier create-service-account ne soit pas en mode exécutable. Exécutez la commande suivante dans votre répertoire $APIGEE_HELM_CHARTS_HOME :
    $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \
    --help

    Si le résultat indique une erreur d'autorisation refusée, rendez le fichier exécutable. Par exemple, utilisez chmod sous Linux, macOS ou UNIX :

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

Créez des clés de compte de service.

Créez ou mettez à jour les comptes de service, puis téléchargez les fichiers de clé à l'aide de l'outil create-service-account. Cette action télécharge un fichier JSON pour chaque compte de service.

Les noms de fichiers des clés de compte de service auront le format suivant : $PROJECT_ID-apigee-SERVICE_ACCOUNT_NAME.json

Production

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

Hors production

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

Créer des secrets Kubernetes

Créez les secrets Kubernetes pour stocker les clés du compte de service.

La commande kubectl create secret dans les exemples de code suivants a la structure suivante :

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

Production

Créez les secrets à l'aide des commandes suivantes :

  • apigee-cassandra (si planifier des sauvegardes dans 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 (si vous utilisez Monétisation pour 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

Hors production

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

Faire référence aux clés de compte de service dans la configuration

Après avoir stocké les clés de compte de service en tant que secrets Kubernetes, mettez à jour votre fichier overrides.yaml hybride pour référencer ces secrets au lieu des chemins d'accès directs aux fichiers. Modifiez les propriétés serviceAccountPath concernées pour utiliser serviceAccountSecretRef.

Utilisez les configurations serviceAccountSecretRefs et serviceAccountRef suivantes dans les sections appropriées de votre overrides.yaml :

Production

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

Hors production

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

Appliquer les modifications de configuration

Appliquez les modifications aux charts apigee-telemetry, apigee-org et apigee-env à l'aide des commandes suivantes :

  1. Mettez à niveau la télémétrie Apigee :
    helm upgrade telemetry apigee-telemetry/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      -f OVERRIDES_FILE
    
  2. Mettez à niveau l'organisation Apigee :
    helm upgrade ORG_NAME apigee-org/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      -f OVERRIDES_FILE
    
  3. Mettez à niveau l'environnement.

    Spécifiez l'environnement avec --set env=ENV_NAME. Répétez cette commande pour chaque environnement.

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

Étapes suivantes