Abilitazione della crittografia della chiave segreta

Questo documento spiega come attivare la crittografia dei secret consumer (credenziali client) dell'app per sviluppatori archiviati nel database Cassandra.

Panoramica

Tradizionalmente, Apigee Edge per il cloud privato fornisce la crittografia facoltativa per i dati delle mappe dei valori delle chiavi (KVM) e i token di accesso OAuth.

La tabella seguente descrive le opzioni di crittografia per i dati at-rest in Apigee for Private Cloud:

Entità Crittografia abilitata per impostazione predefinita Crittografia facoltativa Documentazione correlata
KVM No Vedi Informazioni sulle KVM criptate.
Token di accesso OAuth No Consulta Hashing dei token per una maggiore sicurezza.
Secret consumer dell'app per sviluppatori No Per attivarla, segui i passaggi di configurazione descritti in questo documento.

Per attivare la crittografia delle credenziali client, devi eseguire le seguenti attività su tutti i nodi del server di gestione e dell'elaborazione dei messaggi:

  • Crea un keystore per memorizzare una chiave di crittografia della chiave (KEK). Apigee utilizza questa chiave criptata per criptare le chiavi segrete necessarie per criptare i tuoi dati.
  • Modifica le proprietà di configurazione su tutti i nodi del server di gestione e dell'elaboratore di messaggi.
  • Crea un'app per sviluppatori per attivare la creazione della chiave.
  • Riavviare i nodi.

Queste attività sono spiegate in questo documento.

Informazioni importanti sulla funzionalità di crittografia delle chiavi

I passaggi descritti in questo documento spiegano come attivare la funzionalità KEK, che consente ad Apigee di criptare le chiavi segrete utilizzate per criptare i secret dei consumatori delle app per sviluppatori quando sono archiviati a riposo nel database Cassandra.

Per impostazione predefinita, tutti i valori esistenti nel database rimarranno invariati (in testo normale) e continueranno a funzionare come prima.

Se esegui un'operazione di scrittura su un'entità non criptata, questa verrà criptata al salvataggio dell'operazione. Ad esempio, se revochi un token non criptato e poi lo approvi, il token appena approvato verrà criptato.

Tenere al sicuro le chiavi

Assicurati di archiviare una copia del keystore in cui è memorizzata la KEK in un luogo sicuro. Ti consigliamo di utilizzare il tuo meccanismo sicuro per salvare una copia del keystore. Come spiegato nelle istruzioni in questo documento, è necessario inserire un archivio chiavi su ciascun processore di messaggi e ogni nodo del server di gestione a cui il file di configurazione locale può fare riferimento. È però importante anche archiviare una copia del keystore altrove per conservarla al sicuro e come backup.

Abilitazione della crittografia delle chiavi

Segui questi passaggi per criptare le chiavi private dei consumatori:

Prerequisiti

Prima di eseguire i passaggi descritti in questo documento, devi soddisfare i seguenti requisiti:

  • Devi installare o eseguire l'upgrade ad Apigee Edge per Private Cloud 4.50.00.10 o versioni successive.
  • Devi essere un amministratore di Apigee Edge for Private Cloud.

Passaggio 1: genera un archivio chiavi

Segui questi passaggi per creare un archivio chiavi in cui conservare la chiave di crittografia della chiave (KEK):

  1. Esegui il seguente comando per generare un keystore in cui archiviare una chiave che verrà utilizzata per criptare la KEK. Inserisci il comando esattamente come mostrato. (puoi specificare il nome di un archivio chiavi che preferisci):
    keytool -genseckey -alias KEYSTORE_NAME -keyalg AES -keysize 256 \
    -keystore kekstore.p12 -storetype PKCS12

    Quando richiesto, inserisci una password. Utilizzerai questa password nelle sezioni successive quando configurerai il server di gestione e l'elaboratore dei messaggi.

    Questo comando genera un file dell'archivio chiavi kekstore.p12 contenente una chiave con l'alias KEYSTORE_NAME.

  2. (Facoltativo) Verifica che il file sia stato generato correttamente con il seguente comando. Se il file è corretto, il comando restituisce una chiave con l'alias KEYSTORE_NAME:
    keytool -list -keystore kekstore.p12

Utilizzo degli archivi chiavi BCFKS per i sistemi operativi abilitati per FIPS

Se utilizzi Edge for Private Cloud su un sistema operativo compatibile con FIPS, devi generare un keystore di tipo BCFKS. Tale archivio chiavi può essere generato su una macchina non FIPS e quindi trasferito a un computer conforme a FIPS. Per generare il keystore, utilizza il seguente 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

Potrebbe essere necessario eseguire impostazioni Java aggiuntive sulla macchina in cui viene generato l'archivio chiavi. Potresti dover modificare il file di sicurezza Java della macchina (in genere in /usr/lib/jvm/jre/lib/security/java.security). In questo file, trova e modifica le seguenti proprietà:

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

Passaggio 2: configura il server di gestione

Configura quindi il server di gestione. Se hai installato i server di gestione su più nodi, devi ripetere questi passaggi su ogni nodo.

  1. Copia il file del keystore generato nel passaggio 1 in una directory sul nodo del server di gestione, ad esempio /opt/apigee/customer/application. Ad esempio:
    cp certs/kekstore.p12 /opt/apigee/customer/application
  2. Assicurati che il file sia leggibile dall'utente di apigee:
    chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
    chmod 400 /opt/apigee/customer/application/kekstore.p12
  3. Aggiungi le seguenti proprietà a /opt/apigee/customer/application/management-server.properties. Se il file non esiste, creane uno. Vedi anche Riferimento file di proprietà.
    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

    Tieni presente che KEK_PASSWORD potrebbe essere uguale a KEYSTORE_PASSWORD a seconda dello strumento utilizzato per generare il keystore.

  4. Riavvia il server di gestione utilizzando i seguenti comandi:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server wait_for_ready

    Quando il server di gestione è pronto, il comando wait_for_ready restituisce il seguente messaggio:

    Checking if management-server is up: management-server is up.
  5. Se hai installato server di gestione su più nodi, ripeti i passaggi 1-4 precedenti su ogni nodo del server di gestione.

Passaggio 3: crea un'app per sviluppatori

Ora che i server di gestione sono aggiornati, devi creare un'app sviluppatore per attivare la generazione della chiave utilizzata per criptare i dati delle credenziali client:

  1. Crea un'app per sviluppatori per attivare la creazione di una chiave di crittografia dei dati (KEK). Per la procedura, vedi Registrare un'app.
  2. Se vuoi, elimina l'app sviluppatore. Non è necessario tenerla a portata di mano dopo aver generato la chiave di crittografia.

Passaggio 4: configura i processori di messaggi

Finché la crittografia non viene attivata negli elaboratori dei messaggi, le richieste di runtime non potranno elaborare le credenziali criptate.

  1. Copia il file dell'archivio chiavi generato nel passaggio 1 in una directory sul nodo del processore di messaggi, ad esempio /opt/apigee/customer/application. Ad esempio:
    cp certs/kekstore.p12 /opt/apigee/customer/application
  2. Assicurati che il file sia leggibile dall'utente apigee:
    chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
  3. Aggiungi le seguenti proprietà a /opt/apigee/customer/application/message-processor.properties. Se il file non esiste, creane uno. Vedi anche Riferimento file di proprietà.
    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

    Tieni presente che KEK_PASSWORD potrebbe essere uguale a KEYSTORE_PASSWORD a seconda dello strumento utilizzato per generare il keystore.

  4. Riavviare l'elaborazione dei messaggi utilizzando i seguenti comandi:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor wait_for_ready

    Il comando wait_for_ready restituisce il seguente messaggio quando l'elaboratore dei messaggi è pronto per elaborare i messaggi:

    Checking if message-processor is up: message-processor is up.
  5. Se hai installato processori di messaggi su più nodi, ripeti i passaggi da 1 a 4 su ogni nodo del processore di messaggi.

Riepilogo

Tutte le app per sviluppatori che creerai d'ora in poi avranno il segreto delle credenziali criptato nel database Cassandra.

Utilizzo delle variabili di ambiente per le proprietà di configurazione

In alternativa, puoi impostare le seguenti proprietà di configurazione del gestore del server e dell'elaborazione dei messaggi utilizzando le variabili di ambiente. Se impostate, le variabili di ambiente sostituiscono le proprietà impostate nel file di configurazione dell'elaboratore dei messaggi o del server di gestione.

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

Le variabili di ambiente corrispondenti sono:

export KMSCRED_ENCRYPTION_KEYSTORE_PASS=KEYSTORE_PASSWORD
export KMSCRED_ENCRYPTION_KEK_PASS=KEK_PASSWORD

Se imposti queste variabili di ambiente, puoi omettere queste proprietà di configurazione dai file di configurazione sui nodi dell'elaboratore di messaggi e del server di gestione, in quanto verranno ignorate:

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

Riferimento ai file delle proprietà

Questa sezione descrive le proprietà di configurazione che devi impostare su tutti i nodi di elaborazione dei messaggi e dei server di gestione, come spiegato in precedenza in questo documento.

Proprietà Predefinito Descrizione
conf_keymanagement_kmscred.encryption.enabled false Deve essere true per attivare la crittografia delle chiavi.
conf_keymanagement_kmscred.encryption.allowFallback false Imposta allowFallback su true per assicurarti che le credenziali in testo non cifrato esistenti continuino a funzionare.
conf_keymanagement_kmscred.encryption.keystore.path N/D Fornisci il percorso al keystore KEK nel nodo dell'elaboratore dei messaggi o del server di gestione. Consulta Passaggio 2: configura il server di gestione e Passaggio 3: configura gli elaboratori dei messaggi.
conf_keymanagement_kmscred.encryption.kek.alias N/D Alias in base al quale la KEK è archiviata nell'archivio chiavi.
conf_keymanagement_kmscred.encryption.keystore.pass N/D Facoltativo se utilizzi variabili di ambiente per impostare queste proprietà. Consulta anche Utilizzare le variabili di ambiente per le proprietà di configurazione.
conf_keymanagement_kmscred.encryption.kek.pass N/D Facoltativo se utilizzi le variabili di ambiente per impostare queste proprietà. Consulta anche Utilizzare le variabili di ambiente per le proprietà di configurazione.