En este documento, se explica cómo habilitar la encriptación de los secretos de consumidor (credenciales de cliente) de la app para desarrolladores almacenados en la base de datos de Cassandra.
Descripción general
Tradicionalmente, Apigee Edge para Private Cloud proporcionaba encriptación opcional para los datos del mapa de clave-valor (KVM) y los tokens de acceso de OAuth.
En la siguiente tabla, se describen las opciones de encriptación para los datos en reposo en Apigee para la nube privada:
Entidad | Encriptación habilitada de forma predeterminada | Encriptación disponible de forma opcional | Documentación relacionada |
KVM | No | Sí | Consulta Acerca de las KVM encriptadas. |
Tokens de acceso de OAuth | No | Sí | Consulta Tokens de hash para mayor seguridad. |
Secretos del consumidor de la app para desarrolladores | No | Sí | Para habilitarlo, sigue los pasos de configuración que se indican en este documento. |
Para habilitar la encriptación de las credenciales del cliente, debes realizar las siguientes tareas en todos los nodos del procesador de mensajes y del servidor de administración:
- Crea un almacén de claves para almacenar una clave de encriptación de claves (KEK). Apigee usa esta clave encriptada para encriptar las claves secretas necesarias para encriptar tus datos.
- Edita las propiedades de configuración en todos los nodos del servidor de administración y del procesador de mensajes.
- Crea una app para desarrolladores para activar la creación de claves.
- Reinicia los nodos.
Estas tareas se explican en este documento.
Qué debes saber sobre la función de encriptación de claves
En los pasos de este documento, se explica cómo habilitar la función KEK, que permite que Apigee encripte las claves secretas que se usan para encriptar los secretos de los consumidores de la app del desarrollador cuando se almacenan en reposo en la base de datos de Cassandra.
De forma predeterminada, los valores existentes en la base de datos no se modificarán (en texto sin formato) y seguirán funcionando como antes.
Si realizas alguna operación de escritura en una entidad no encriptada, esta se encriptará cuando se guarde la operación. Por ejemplo, si revocas un token no encriptado y, luego, lo apruebas, se encriptará el token recién aprobado.
Seguridad de las claves
Asegúrate de almacenar una copia del almacén de claves en el que se almacena la KEK en una ubicación segura. Te recomendamos que uses tu propio mecanismo seguro para guardar una copia del almacén de claves. Como se explica en las instrucciones de este documento, se debe colocar un almacén de claves en cada nodo de procesador de mensajes y servidor de administración en el que el archivo de configuración local pueda hacer referencia a él. Sin embargo, también es importante almacenar una copia del almacén de claves en otro lugar con fines de seguridad y como copia de seguridad.
Habilita la encriptación de claves
Sigue estos pasos para la encriptación de claves secretas de consumidor:
Requisitos previos
Debes cumplir con estos requisitos antes de realizar los pasos de este documento:
- Debes instalar o actualizar a Apigee Edge para la nube privada 4.50.00.10 o una versión posterior.
- Debes ser administrador de Apigee Edge para la nube privada.
Paso 1: Genera un almacén de claves
Sigue estos pasos para crear un almacén de claves que contenga la clave de encriptación de claves (KEK):
- Ejecuta el siguiente comando para generar un almacén de claves y almacenar una clave que se usará para encriptar la KEK. Ingresa el comando exactamente como se muestra. (Puedes proporcionar el nombre del almacén de claves que desees):
keytool -genseckey -alias KEYSTORE_NAME -keyalg AES -keysize 256 \ -keystore kekstore.p12 -storetype PKCS12
Cuando se te solicite, ingresa una contraseña. Usarás esta contraseña en secciones posteriores cuando configures el servidor de administración y el procesador de mensajes.
Con este comando, se genera un archivo de almacén de claves kekstore.p12 que contiene una clave con el alias KEYSTORE_NAME.
- Usa el siguiente comando para verificar que el archivo se haya generado correctamente (opcional). Si el archivo es correcto, el comando muestra una clave con el alias KEYSTORE_NAME:
keytool -list -keystore kekstore.p12
Cómo trabajar con almacenes de claves de BCFKS para sistemas operativos compatibles con FIPS
Si usas Edge para una nube privada en un sistema operativo compatible con FIPS, debes generar un almacén de claves de tipo BCFKS. Se puede generar un almacén de claves de este tipo en una máquina que no cumpla con el estándar FIPS y, luego, transferirlo a una máquina que sí lo cumpla. Para generar el almacén de claves, usa el siguiente comando:
keytool -genseckey -alias <KEYSTORE_NAME> -keyalg AES -keysize 256 \
-storetype BCFKS -keystore keystore.bcfks \
-providerpath /opt/apigee/edge-gateway/lib/thirdparty/bc-fips-1.0.2.4.jar \
-providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider \
-keypass keystorepass -storepass keystorepass
Es posible que debas realizar parámetros de configuración adicionales de Java en la máquina en la que generas este almacén de claves. Es posible que debas editar el archivo de seguridad de Java de la máquina (por lo general, se encuentra en /usr/lib/jvm/jre/lib/security/java.security). En este archivo, busca y edita las siguientes propiedades:
# Don't rely on /dev/random for generating random numbers
securerandom.source=file:/dev/urandom
securerandom.strongAlgorithms=PKCS11:SunPKCS11-NSS-FIPS
Paso 2: Configura el servidor de administración
A continuación, configura el servidor de administración. Si tienes servidores de administración instalados en varios nodos, debes repetir estos pasos en cada uno.
- Copia el archivo del almacén de claves que generaste en el paso 1 en un directorio del nodo del servidor de administración, como
/opt/apigee/customer/application
. Por ejemplo:cp certs/kekstore.p12 /opt/apigee/customer/application
- Asegúrate de que el usuario
apigee
pueda leer el archivo:chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
chmod 400 /opt/apigee/customer/application/kekstore.p12
- Agrega las siguientes propiedades a
/opt/apigee/customer/application/management-server.properties
. Si el archivo no existe, créalo. Consulta también la Referencia del archivo de propiedades.
conf_keymanagement_kmscred.encryption.enabled=true # Fallback is true to ensure your existing plaintext credentials continue to work conf_keymanagement_kmscred.encryption.allowFallback=true conf_keymanagement_kmscred.encryption.keystore.path=PATH_TO_KEYSTORE_FILE conf_keymanagement_kmscred.encryption.kek.alias=KEYSTORE_NAME # These could alternately be set as environment variables. These variables should be # accessible to Apigee user during bootup of the Java process. If environment # variables are specified, you can skip the password configs below. # KMSCRED_ENCRYPTION_KEYSTORE_PASS= # KMSCRED_ENCRYPTION_KEK_PASS= See also Using environment variables for configuration properties. conf_keymanagement_kmscred.encryption.keystore.pass=KEYSTORE_PASSWORD conf_keymanagement_kmscred.encryption.kek.pass=KEK_PASSWORD
Ten en cuenta que
KEK_PASSWORD
puede ser igual queKEYSTORE_PASSWORD
según la herramienta que se use para generar el almacén de claves. - Reinicia el servidor de administración con los siguientes comandos:
/opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
/opt/apigee/apigee-service/bin/apigee-service edge-management-server wait_for_ready
El comando
wait_for_ready
muestra el siguiente mensaje cuando el servidor de administración está listo:Checking if management-server is up: management-server is up.
- Si tienes servidores de administración instalados en varios nodos, repite los pasos del 1 al 4 anteriores en cada nodo del servidor de administración.
Paso 3: Crea una app de desarrollador
Ahora que se actualizaron los servidores de administración, debes crear una app para desarrolladores para activar la generación de la clave que se usa para encriptar los datos de credenciales del cliente:
- Crea una app para desarrolladores para activar la creación de una clave de encriptación de datos (KEK). Para conocer los pasos, consulta Registra una app.
- Si lo deseas, borra la app para desarrolladores. No necesitas conservarla una vez que se genera la clave de encriptación.
Paso 4: Configura procesadores de mensajes
Hasta que se habilite la encriptación en los procesadores de mensajes, las solicitudes del entorno de ejecución no podrán procesar ninguna credencial encriptada.
- Copia el archivo del almacén de claves que generaste en el paso 1 en un directorio del nodo del procesador de mensajes, como
/opt/apigee/customer/application
. Por ejemplo:cp certs/kekstore.p12 /opt/apigee/customer/application
- Asegúrate de que el usuario
apigee
pueda leer el archivo:chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
- Agrega las siguientes propiedades a
/opt/apigee/customer/application/message-processor.properties
. Si el archivo no existe, créalo. Consulta también la referencia del archivo de propiedades.conf_keymanagement_kmscred.encryption.enabled=true # Fallback is true to ensure your existing plaintext credentials continue to work conf_keymanagement_kmscred.encryption.allowFallback=true conf_keymanagement_kmscred.encryption.keystore.path=PATH_TO_KEYSTORE_FILE conf_keymanagement_kmscred.encryption.kek.alias=KEYSTORE_NAME # These could alternately be set as environment variables. These variables should be # accessible to Apigee user during bootup of the Java process. If environment # variables are specified, you can skip the password configs below. # KMSCRED_ENCRYPTION_KEYSTORE_PASS= # KMSCRED_ENCRYPTION_KEK_PASS= See also Using environment variables for configuration properties. conf_keymanagement_kmscred.encryption.keystore.pass=KEYSTORE_PASSWORD conf_keymanagement_kmscred.encryption.kek.pass=KEK_PASSWORD
Ten en cuenta que
KEK_PASSWORD
puede ser igual queKEYSTORE_PASSWORD
según la herramienta que se use para generar el almacén de claves. - Reinicia el procesador de mensajes con los siguientes comandos:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor wait_for_ready
El comando
wait_for_ready
muestra el siguiente mensaje cuando el procesador de mensajes está listo para procesar mensajes:Checking if message-processor is up: message-processor is up.
- Si tienes procesadores de mensajes instalados en varios nodos, repite los pasos del 1 al 4 en cada nodo de procesador de mensajes.
Resumen
Todas las apps de desarrollador que crees a partir de ahora tendrán su secreto de credencial encriptado en reposo en la base de datos de Cassandra.
Uso de variables de entorno para propiedades de configuración
Como alternativa, puedes establecer las siguientes propiedades de configuración del procesador de mensajes y del servidor de administración con variables de entorno. Si se establecen, las variables de entorno anulan las propiedades establecidas en el archivo de configuración del procesador de mensajes o del servidor de administración.
conf_keymanagement_kmscred.encryption.keystore.pass= conf_keymanagement_kmscred.encryption.kek.pass=
Las variables de entorno correspondientes son las siguientes:
export KMSCRED_ENCRYPTION_KEYSTORE_PASS=KEYSTORE_PASSWORD
export KMSCRED_ENCRYPTION_KEK_PASS=KEK_PASSWORD
Si configuras estas variables de entorno, puedes omitir estas propiedades de configuración de los archivos de configuración en los nodos del procesador de mensajes y del servidor de administración, ya que se ignorarán:
conf_keymanagement_kmscred.encryption.keystore.pass conf_keymanagement_kmscred.encryption.kek.pass
Referencia del archivo de propiedades
En esta sección, se describen las propiedades de configuración que debes establecer en todos los nodos del procesador de mensajes y del servidor de administración, como se explicó anteriormente en este documento.
Propiedad | Predeterminada | Descripción |
conf_keymanagement_kmscred.encryption.enabled
|
false
|
Debe ser true para habilitar la encriptación de claves.
|
conf_keymanagement_kmscred.encryption.allowFallback
|
false
|
Configura allowFallback como true para asegurarte de que tus credenciales de texto simple existentes sigan funcionando.
|
conf_keymanagement_kmscred.encryption.keystore.path
|
N/A | Proporciona la ruta de acceso al almacén de claves KEK en el procesador de mensajes o en el nodo del servidor de administración. Consulta Paso 2: Configura el servidor de administración y Paso 3: Configura los procesadores de mensajes. |
conf_keymanagement_kmscred.encryption.kek.alias
|
N/A | Es el alias con el que se almacena la KEK en el almacén de claves. |
conf_keymanagement_kmscred.encryption.keystore.pass
|
N/A | Opcional si usas variables de entorno para configurar estas propiedades. Consulta también Cómo usar variables de entorno para las propiedades de configuración. |
conf_keymanagement_kmscred.encryption.kek.pass
|
N/A | Opcional si usas variables de entorno para configurar estas propiedades. Consulta también Cómo usar variables de entorno para las propiedades de configuración. |