Activer le chiffrement des clés secrètes

Ce document explique comment activer le chiffrement des secrets client (identifiants client) de l'application du développeur stockés dans la base de données Cassandra.

Présentation

Traditionnellement, Apigee Edge pour Private Cloud a fourni un chiffrement facultatif pour les données de mappage de clé-valeur (KVM) et les jetons d'accès OAuth.

Le tableau suivant décrit les options de chiffrement des données au repos dans Apigee for Private Cloud:

Entité Chiffrement activé par défaut Chiffrement facultatif disponible Documentation associée
KVM Non Oui Consultez À propos des KVM chiffrées.
Jetons d'accès OAuth Non Oui Consultez Hachage de jetons pour plus de sécurité.
Secrets client de l'application du développeur Non Oui Pour l'activer, suivez les étapes de configuration décrites dans ce document.

Pour activer le chiffrement des identifiants client, vous devez effectuer les tâches suivantes sur tous les nœuds de processeur de messages et de serveur de gestion:

  • Créez un keystore pour stocker une clé de chiffrement de clé (KEK). Apigee utilise cette clé chiffrée pour chiffrer les clés secrètes nécessaires au chiffrement de vos données.
  • Modifiez les propriétés de configuration sur tous les nœuds de serveur de gestion et de processeur de messages.
  • Créez une application de développement pour déclencher la création de clés.
  • Redémarrez les nœuds.

Ces tâches sont expliquées dans ce document.

Ce que vous devez savoir sur la fonctionnalité de chiffrement de clé

Les étapes décrites dans ce document expliquent comment activer la fonctionnalité KEK, qui permet à Apigee de chiffrer les clés secrètes utilisées pour chiffrer les codes secrets des utilisateurs de l'application de développement lorsqu'ils sont stockés au repos dans la base de données Cassandra.

Par défaut, toutes les valeurs existantes de la base de données restent inchangées (en texte brut) et continuent de fonctionner comme avant.

Si vous effectuez une opération d'écriture sur une entité non chiffrée, elle sera chiffrée lorsque l'opération sera enregistrée. Par exemple, si vous révoquez un jeton non chiffré, puis l'approuvez ultérieurement, le jeton nouvellement approuvé sera chiffré.

Protéger les clés

Veillez à conserver une copie du keystore dans lequel la KEK est stockée en lieu sûr. Nous vous recommandons d'utiliser votre propre mécanisme sécurisé pour enregistrer une copie du keystore. Comme indiqué dans les instructions de ce document, un keystore doit être placé sur chaque nœud de processeur de messages et de serveur de gestion où le fichier de configuration local peut le référencer. Il est toutefois également important de stocker une copie du keystore ailleurs pour le conserver et en faire une sauvegarde.

Activer le chiffrement des clés

Pour chiffrer la clé secrète client, procédez comme suit:

Prérequis

Vous devez répondre aux conditions suivantes avant de suivre les étapes de ce document:

  • Vous devez installer ou mettre à niveau Apigee Edge pour Private Cloud 4.50.00.10 ou une version ultérieure.
  • Vous devez être un administrateur Apigee Edge for Private Cloud.

Étape 1: Générez un keystore

Pour créer un keystore contenant la clé de chiffrement de clé (KEK), procédez comme suit :

  1. Exécutez la commande suivante pour générer un keystore afin de stocker une clé qui servira à chiffrer la KEK. Saisissez la commande exactement comme indiqué. (Vous pouvez fournir n'importe quel nom de keystore):
    keytool -genseckey -alias KEYSTORE_NAME -keyalg AES -keysize 256 \
    -keystore kekstore.p12 -storetype PKCS12

    Lorsque vous y êtes invité, saisissez un mot de passe. Vous utiliserez ce mot de passe dans les sections suivantes lorsque vous configurerez le serveur de gestion et le processeur de messages.

    Cette commande génère un fichier keystore kekstore.p12 contenant une clé avec l'alias KEYSTORE_NAME.

  2. (Facultatif) Vérifiez que le fichier a été généré correctement à l'aide de la commande suivante. Si le fichier est correct, la commande renvoie une clé avec l'alias KEYSTORE_NAME:
    keytool -list -keystore kekstore.p12

Utilisation de keystores BCFKS pour les systèmes d'exploitation compatibles FIPS

Si vous utilisez Edge pour Private Cloud sur un système d'exploitation compatible FIPS, vous devez générer un keystore de type BCFKS. Un tel keystore peut être généré sur une machine non conforme à la norme FIPS, puis transféré vers une machine conforme à la norme FIPS. Pour générer le keystore, exécutez la commande suivante:

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

Vous devrez peut-être effectuer des paramètres Java supplémentaires sur la machine sur laquelle vous générez ce keystore. Vous devrez peut-être modifier le fichier de sécurité Java de la machine (généralement situé sous /usr/lib/jvm/jre/lib/security/java.security). Dans ce fichier, recherchez et modifiez les propriétés suivantes:

# Don't rely on /dev/random for generating random numbers
securerandom.source=file:/dev/urandom
securerandom.strongAlgorithms=PKCS11:SunPKCS11-NSS-FIPS

Étape 2: Configurer le serveur de gestion

Configurez ensuite le serveur de gestion. Si vous avez installé des serveurs de gestion sur plusieurs nœuds, vous devez répéter cette procédure sur chaque nœud.

  1. Copiez le fichier keystore que vous avez généré à l'étape 1 dans un répertoire du nœud du serveur de gestion, tel que /opt/apigee/customer/application. Exemple :
    cp certs/kekstore.p12 /opt/apigee/customer/application
  2. Assurez-vous que le fichier est lisible par l'utilisateur apigee:
    chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
    chmod 400 /opt/apigee/customer/application/kekstore.p12
  3. Ajoutez les propriétés suivantes à /opt/apigee/customer/application/management-server.properties. Si le fichier n'existe pas, créez-le. Consultez également la section Documentation de référence du fichier de propriétés.
    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

    Notez que KEK_PASSWORD peut être identique à KEYSTORE_PASSWORD, en fonction de l'outil utilisé pour générer le keystore.

  4. Redémarrez le serveur de gestion à l'aide des commandes suivantes:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server wait_for_ready

    La commande wait_for_ready renvoie le message suivant lorsque le serveur de gestion est prêt:

    Checking if management-server is up: management-server is up.
  5. Si vous avez installé des serveurs de gestion sur plusieurs nœuds, répétez les étapes 1 à 4 ci-dessus sur chaque nœud de serveur de gestion.

Étape 3: Créez une application de développeur

Maintenant que les serveurs de gestion sont mis à jour, vous devez créer une application de développement pour déclencher la génération de la clé utilisée pour chiffrer les données d'identifiants client:

  1. Créez une application de développement pour déclencher la création d'une clé de chiffrement de données (KEK). Pour connaître la procédure, consultez la section Enregistrer une application.
  2. Si vous le souhaitez, supprimez l'application du développeur. Vous n'avez pas besoin de le conserver une fois la clé de chiffrement générée.

Étape 4: Configurez les processeurs de messages

Tant que le chiffrement n'est pas activé dans les processeurs de messages, les requêtes d'exécution ne peuvent pas traiter d'identifiants chiffrés.

  1. Copiez le fichier keystore que vous avez généré à l'étape 1 dans un répertoire du nœud du processeur de messages, tel que /opt/apigee/customer/application. Exemple :
    cp certs/kekstore.p12 /opt/apigee/customer/application
  2. Assurez-vous que le fichier est lisible par l'utilisateur apigee:
    chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
  3. Ajoutez les propriétés suivantes à /opt/apigee/customer/application/message-processor.properties. Si le fichier n'existe pas, créez-le. Consultez également la documentation de référence du fichier de propriétés.
    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

    Notez que KEK_PASSWORD peut être identique à KEYSTORE_PASSWORD, en fonction de l'outil utilisé pour générer le keystore.

  4. Redémarrez le processeur de messages à l'aide des commandes suivantes:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor wait_for_ready

    La commande wait_for_ready renvoie le message suivant lorsque le processeur de messages est prêt à traiter les messages:

    Checking if message-processor is up: message-processor is up.
  5. Si des processeurs de messages sont installés sur plusieurs nœuds, répétez les étapes 1 à 4 sur chaque nœud de processeur de messages.

Résumé

Le secret des identifiants de toutes les applications de développement que vous créez à partir de maintenant est chiffré au repos dans la base de données Cassandra.

Utiliser des variables d'environnement pour les propriétés de configuration

Vous pouvez également définir les propriétés de configuration du processeur de messages et du serveur de gestion suivantes à l'aide de variables d'environnement. Si elles sont définies, les variables d'environnement remplacent les propriétés définies dans le fichier de configuration du processeur de messages ou du serveur de gestion.

conf_keymanagement_kmscred.encryption.keystore.pass=
conf_keymanagement_kmscred.encryption.kek.pass=

Les variables d'environnement correspondantes sont les suivantes:

export KMSCRED_ENCRYPTION_KEYSTORE_PASS=KEYSTORE_PASSWORD
export KMSCRED_ENCRYPTION_KEK_PASS=KEK_PASSWORD

Si vous définissez ces variables d'environnement, vous pouvez omettre ces propriétés de configuration dans les fichiers de configuration sur les nœuds du processeur de messages et du serveur de gestion, car elles seront ignorées:

conf_keymanagement_kmscred.encryption.keystore.pass
conf_keymanagement_kmscred.encryption.kek.pass

Documentation de référence sur les fichiers de propriétés

Cette section décrit les propriétés de configuration que vous devez définir sur tous les nœuds de processeur de messages et de serveur de gestion, comme expliqué précédemment dans ce document.

Propriété Par défaut Description
conf_keymanagement_kmscred.encryption.enabled false Doit être true pour activer le chiffrement de clé.
conf_keymanagement_kmscred.encryption.allowFallback false Définissez allowFallback sur true pour vous assurer que vos identifiants en texte brut existants continuent de fonctionner.
conf_keymanagement_kmscred.encryption.keystore.path ND Indiquez le chemin d'accès au keystore KEK sur le nœud du processeur de messages ou du serveur de gestion. Consultez les sections Étape 2: Configurer le serveur de gestion et Étape 3: Configurer les processeurs de messages.
conf_keymanagement_kmscred.encryption.kek.alias ND Alias contre lequel le KEK est stocké dans le keystore.
conf_keymanagement_kmscred.encryption.keystore.pass ND Facultatif si vous utilisez des variables d'environnement pour définir ces propriétés. Consultez également la section Utiliser des variables d'environnement pour les propriétés de configuration.
conf_keymanagement_kmscred.encryption.kek.pass ND Facultatif si vous utilisez des variables d'environnement pour définir ces propriétés. Consultez également la section Utiliser des variables d'environnement pour les propriétés de configuration.