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
apigee-cassandra(obligatoire pour Sauvegarder et restaurer les bases de données Cassandra avec Cloud Storage)apigee-loggerapigee-martapigee-metricsapigee-mint-task-scheduler(si vous utilisez Monétisation pour Apigee hybrid)apigee-runtimeapigee-synchronizerapigee-udcaapigee-watcher
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.
- 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
- 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 fichiercreate-service-accountne 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
chmodsous 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-loggerkubectl 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-martkubectl 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-metricskubectl 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-runtimekubectl 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-synchronizerkubectl 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-udcakubectl 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-watcherkubectl 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 :
-
Mettez à niveau la télémétrie Apigee :
helm upgrade telemetry apigee-telemetry/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE
-
Mettez à niveau l'organisation Apigee :
helm upgrade ORG_NAME apigee-org/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE
-
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
- En savoir plus sur les comptes de service et les rôles hybrides
- Consultez la section Créer des comptes de service du guide d'installation hybride.