Almacena secretos de cuenta de servicio en secretos de Kubernetes
En esta página, se describe cómo almacenar las claves de las cuentas de servicio de Apigee hybrid en Secrets de Kubernetes. Almacenar las claves de cuentas de servicio en secretos de Kubernetes mejora la seguridad y optimiza la administración dentro de tu entorno de Kubernetes. Con las claves almacenadas en secretos, no es necesario que las almacenes en el sistema de archivos.
Cuentas de servicio
Hybrid usa las siguientes cuentas de servicio:
Producción
apigee-cassandra(obligatorio para copia de seguridad y restablecimiento de Cassandra en Google Cloud Storage)apigee-loggerapigee-martapigee-metricsapigee-mint-task-scheduler(si usas la Monetización de Apigee Hybrid)apigee-runtimeapigee-synchronizerapigee-udcaapigee-watcher
No producción
apigee-non-prod
Antes de comenzar
En este procedimiento, se usan dos variables de entorno opcionales: $APIGEE_HELM_CHARTS_HOME y $PROJECT_ID. Si no defines estas variables, sustituye el valor adecuado para cada variable en las muestras de código.
- Crea un directorio para las claves de la cuenta de servicio en el directorio
$APIGEE_HELM_CHARTS_HOME:mkdir -p $APIGEE_HELM_CHARTS_HOME/service-accounts
- Verifica que puedas ejecutar la herramienta
create-service-account. Si descargaste los gráficos recientemente, es posible que el archivocreate-service-accountno esté en un modo ejecutable. En tu directorio$APIGEE_HELM_CHARTS_HOME, ejecuta el siguiente comando:$APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \ --help
Si el resultado indica un error de permiso denegado, haz que el archivo sea ejecutable. Por ejemplo, usa
chmoden Linux, macOS o UNIX:chmod +x $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account
Crea claves de cuenta de servicio
Crea o actualiza las cuentas de servicio y descarga los archivos de claves con la herramienta create-service-account. Esta acción descarga un archivo JSON para cada cuenta de servicio.
Los nombres de los archivos de claves de la cuenta de servicio tendrán el siguiente formato:
$PROJECT_ID-apigee-SERVICE_ACCOUNT_NAME.json
Producción
$APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \ --env prod \ --dir $APIGEE_HELM_CHARTS_HOME/service-accounts
No producción
$APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \ --env non-prod \ --dir $APIGEE_HELM_CHARTS_HOME/service-accounts
Crea secretos de Kubernetes
Crea los secretos de Kubernetes para almacenar las claves de la cuenta de servicio.
El comando kubectl create secret en las siguientes muestras de código tiene la siguiente estructura:
kubectl create secret generic SECRET_NAME \ --from-file="client_secret.json=PATH_TO_SERVICE_ACCOUNT_KEY" \ -n APIGEE_NAMESPACE
Producción
Crea los secretos con los siguientes comandos:
-
apigee-cassandra(si programas copias de seguridad en 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 usas la Monetización de 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
No producción
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
Cómo hacer referencia a las claves de cuentas de servicio en la configuración
Después de almacenar las claves de la cuenta de servicio como secretos de Kubernetes, actualiza tu archivo overrides.yaml de Hybrid para hacer referencia a estos secretos en lugar de a las rutas de acceso directas a los archivos. Modifica las propiedades serviceAccountPath pertinentes para usar serviceAccountSecretRef.
Usa las siguientes configuraciones de serviceAccountSecretRefs y serviceAccountRef en las secciones correspondientes de tu overrides.yaml:
Producción
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
No producción
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
Aplica los cambios de configuración
Aplica los cambios a los gráficos apigee-telemetry, apigee-org y apigee-env con los siguientes comandos:
-
Actualiza la telemetría de Apigee:
helm upgrade telemetry apigee-telemetry/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE
-
Actualiza la organización de Apigee:
helm upgrade ORG_NAME apigee-org/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE
-
Actualiza el entorno.
Especifica el entorno con
--set env=ENV_NAME. Repite este comando para cada entorno.helm upgrade ENV_RELEASE_NAME apigee-env/ \ --install \ --namespace APIGEE_NAMESPACE \ --set env=ENV_NAME \ -f OVERRIDES_FILE
¿Qué sigue?
- Obtén más información sobre las cuentas de servicio y los roles híbridos.
- Consulta la sección Crea cuentas de servicio de la guía de instalación híbrida.