Abilitazione della crittografia della chiave segreta

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

Panoramica

Tradizionalmente, Apigee Edge per il cloud privato ha fornito la crittografia facoltativa per i dati KVM (Key Value Map) e i token di accesso OAuth.

La tabella seguente descrive le opzioni di crittografia per i dati at-rest in Apigee per il cloud privato:

Entità Crittografia abilitata per impostazione predefinita Crittografia disponibile come opzione Documentazione correlata
KVM No Vedi Informazioni sui KVM criptati.
Token di accesso OAuth No Consulta la sezione Hashing dei token per una maggiore sicurezza.
Segreti utente app sviluppatore No Per attivarla, esegui i passaggi di configurazione in questo documento.

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

  • Crea un archivio chiavi per archiviare una chiave di crittografia della chiave (KEK). Apigee utilizza questa chiave criptata per criptare le chiavi private necessarie per criptare i dati.
  • Modifica le proprietà della configurazione su tutti i nodi del server di gestione e dell'elaboratore dei messaggi.
  • Crea un'app sviluppatore per attivare la creazione della chiave.
  • Riavvia i nodi.

Queste attività sono spiegate in questo documento.

Informazioni importanti sulla funzionalità di crittografia delle chiavi

I passaggi in questo documento spiegano come abilitare la funzionalità KEK, che consente ad Apigee di criptare le chiavi secret utilizzate per criptare i secret dei consumer delle app dello sviluppatore quando sono archiviati at-rest nel database Cassandra.

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

Le operazioni di scrittura eseguite su un'entità non criptata verranno criptate al momento del salvataggio dell'operazione. Ad esempio, se revochi un token non criptato e poi lo approvi in un secondo momento, il token appena approvato verrà criptato.

Tenere al sicuro le chiavi

Assicurati di conservare una copia dell'archivio chiavi in cui è conservata la KEK in un luogo sicuro. Ti consigliamo di utilizzare un tuo meccanismo sicuro per salvare una copia dell'archivio chiavi. Come spiegato nelle istruzioni di questo documento, è necessario inserire un archivio chiavi in ogni processore dei messaggi e nodo del server di gestione in cui il file di configurazione locale può fare riferimento. Tuttavia, è importante anche archiviare una copia dell'archivio chiavi altrove per tenerla in sicurezza e come backup.

Attivazione della crittografia della chiave

Per la crittografia della chiave segreta del cliente, segui questi passaggi:

Prerequisiti

Prima di eseguire la procedura descritta 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 per il cloud privato.

Passaggio 1: genera un archivio chiavi

Per creare un archivio chiavi in cui inserire la chiave di crittografia della chiave (KEK), segui questi passaggi:

  1. Esegui questo comando per generare un archivio chiavi per archiviare una chiave che verrà utilizzata per criptare la KEK. Inserisci il comando esattamente come mostrato. Puoi specificare il nome dell'archivio chiavi desiderato:
    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 il processore di messaggi.

    Questo comando genera un file di archivio chiavi kekstore.p12 contenente una chiave con 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

Passaggio 2: configura il server di gestione

e configura il server di gestione. Se hai server di gestione installati su più nodi, devi ripetere questi passaggi su ciascun nodo.

  1. Copia il file dell'archivio chiavi 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, crealo. 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 può essere uguale a KEYSTORE_PASSWORD, a seconda dello strumento utilizzato per generare l'archivio chiavi.

  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 server di gestione installati su più nodi, ripeti i passaggi da 1 a 4 precedenti su ciascun 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 del client:

  1. Crea un'app sviluppatore per attivare la creazione di una chiave di crittografia dei dati (KEK). Per i passaggi da seguire, consulta la sezione Registrazione di un'app.
  2. Se vuoi, elimina l'app dello sviluppatore. Non è necessario tenerlo a portata di mano dopo aver generato la chiave di crittografia.

Passaggio 4: configura i processori dei messaggi

Finché la crittografia non viene attivata nei processori dei messaggi, le richieste di runtime non saranno in grado di elaborare le credenziali criptate.

  1. Copia il file dell'archivio chiavi generato nel passaggio 1 in una directory sul nodo del processore dei 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 di 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, crealo. 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 può essere uguale a KEYSTORE_PASSWORD a seconda dello strumento utilizzato per generare l'archivio chiavi.

  4. Riavvia il processore di 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 messaggio seguente quando il processore di messaggi è pronto per elaborare i messaggi:

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

Riepilogo

D'ora in poi, per tutte le app per sviluppatori che crei verrà criptato il secret delle credenziali at-rest nel database Cassandra.

Utilizzo delle variabili di ambiente per le proprietà di configurazione

In alternativa, puoi impostare le seguenti proprietà di configurazione del processore dei messaggi e del server di gestione utilizzando le variabili di ambiente. Se impostate, le variabili di ambiente sostituiscono le proprietà impostate nel file di configurazione del processore di 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 dei messaggi e del server di gestione, in quanto verranno ignorate:

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

Riferimento file proprietà

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

Proprietà Predefinito Descrizione
conf_keymanagement_kmscred.encryption.enabled false Deve essere true per abilitare la crittografia della chiave.
conf_keymanagement_kmscred.encryption.allowFallback false Imposta allowFallback su true per assicurarti che le tue credenziali in testo non crittografato esistenti continuino a funzionare.
conf_keymanagement_kmscred.encryption.keystore.path N/A Specifica il percorso dell'archivio chiavi KEK sul nodo del processore di messaggi o del server di gestione. Vedi Passaggio 2: configura il server di gestione e Passaggio 3: configura i processori dei messaggi.
conf_keymanagement_kmscred.encryption.kek.alias N/A Alias in base al quale la KEK è archiviata nell'archivio chiavi.
conf_keymanagement_kmscred.encryption.keystore.pass N/A Facoltativo se utilizzi le 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/A Facoltativo se utilizzi le variabili di ambiente per impostare queste proprietà. Consulta anche Utilizzare le variabili di ambiente per le proprietà di configurazione.