Importare ed esportare chiavi su OVHcloud KMS con BYOK
Scopri come importare ed esportare in modo sicuro materiale di chiave cifrato con OVHcloud KMS grazie all'incapsulamento RSA asimmetrico delle chiavi (BYOK)
Obiettivo
Bring Your Own Key (BYOK) ti permette di importare ed esportare materiale di chiave crittografico con OVHcloud Key Management Service (KMS) senza inviarlo in chiaro. Una coppia di chiavi RSA di trasporto protegge il materiale in transito: la chiave pubblica lo incapsula e solo il detentore della chiave privata può disincapsularlo.
Questa guida ti spiega come importare ed esportare una chiave con OVHcloud KMS utilizzando l'incapsulamento RSA asimmetrico delle chiavi (BYOK).
Il BYOK tramite KMIP non è ancora disponibile. Questa guida copre unicamente l'API REST regionale, la CLI OKMS e l'SDK Go.
Le chiavi con il livello di protezione HSM seguono regole aggiuntive, sia come chiavi di trasporto sia come chiave importata o esportata. Consulta Utilizzare il BYOK con chiavi HSM.
Prerequisiti
- Disporre di un account cliente OVHcloud.
- Aver ordinato un KMS OVHcloud.
- Aver configurato un metodo di autenticazione per il piano dati OKMS (token di accesso personale, account di servizio o certificato di accesso).
- Poter applicare una policy IAM sul tuo dominio OKMS; le azioni BYOK necessarie sono elencate in Configurare IAM per il BYOK.
- Opzionale: la CLI OKMS (versione 0.6.0 o superiore) o l'SDK Go installato per gli esempi nelle schede.
Procedura
Comprendere la cerimonia di incapsulamento RSA
La cerimonia coinvolge due ambienti e un operatore:
- Destinazione (Dst): il tuo dominio OKMS, in cui sarà archiviata la chiave importata.
- Sorgente (Src): il sistema che detiene attualmente il materiale di chiave (un altro KMS, un'applicazione o uno strumento come OpenSSL).
- Operator: l'entità che dispone delle autorizzazioni necessarie per accedere sia al dominio OKMS sia alla sorgente della chiave da importare. Può essere una persona che utilizza il CLI OKMS o un servizio che opera tramite l'API.
- Genera una coppia di chiavi RSA di trasporto su OVHcloud KMS con le operazioni
wrapKeyeunwrapKey. - Esporta la chiave di trasporto pubblica da OVHcloud KMS.
- Importa la chiave di trasporto pubblica nell'ambiente sorgente.
- Sulla sorgente, esporta il materiale di chiave incapsulato (cifrato) con la chiave di trasporto utilizzando
RSA-OAEPoRSA-OAEP-256. - Sulla destinazione, importa la chiave incapsulata con
POST /api/{okmsId}/v1/servicekeye un payloadwrappedKeys. Il KMS disincapsula il ciphertext con la chiave di trasporto privata e archivia la chiave di servizio risultante.
Le chiavi così importate hanno never_extractable impostato su false, perché il materiale esisteva al di fuori del KMS prima dell'importazione. Per estrarre successivamente una chiave in forma incapsulata, importala con extractable impostato su true (non può essere attivato in seguito) e segui Esportare una chiave incapsulata. Consulta Attributi di sensibilità delle chiavi di servizio per l'elenco completo degli attributi.
Per seguire questa guida ti servono due valori del tuo dominio OKMS: il suo endpoint regionale e il suo okmsId. Le chiamate all'API REST li contengono entrambi nell'URL, mentre il CLI OKMS e l'SDK Go li leggono dalla propria configurazione. Entrambi vengono restituiti dalla seguente chiamata API:
Sono visibili anche nella scheda Informazioni generali del .
Preferisci questa cerimonia all'importazione di chiave in chiaro ogni volta che la chiave deve rimanere affidabile durante il transito.
Configurare IAM per il BYOK
Applica una policy sulla risorsa del tuo dominio OKMS. Il suo URN è visualizzato nella scheda Informazioni generali del . Sostituisci <identity_urn> e <okms_urn> con i tuoi valori. Crea le policy tramite lo Spazio Cliente OVHcloud o l'API OVHcloud.
Importazione BYOK — leggere, creare o importare chiavi di servizio e disincapsulare con una chiave di trasporto:
Esportazione BYOK — importare una chiave di trasporto pubblica, aggiornare l'estraibilità e incapsulare una chiave per l'esportazione:
Per l'importazione, serviceKey/unwrapKey deve essere autorizzato sulla chiave di trasporto RSA referenziata da wrappingKeyId. Per l'esportazione, importa prima la chiave di trasporto pubblica di destinazione (create / import), poi autorizza serviceKey/wrapKey su questa chiave di trasporto e serviceKey/get sulla chiave esportata. serviceKey/update è richiesto per impostare extractable su false dopo l'esportazione.
Creare la chiave di trasporto RSA sul KMS di destinazione
Crea una chiave RSA dedicata all'incapsulamento. Per la cerimonia di importazione, imposta su questa chiave sia wrapKey sia unwrapKey; sono mutuamente esclusive con sign e verify.
Dimensioni delle chiavi RSA supportate: 2048, 3072 o 4096 bit.
SOFTWARE è il livello di protezione predefinito, quindi non è necessario indicarlo.
Conserva l'id della chiave restituita — ti servirà come wrappingKeyId al momento dell'importazione.
Ottenere la chiave di trasporto pubblica
Esporta la parte pubblica della chiave di trasporto e forniscila all'ambiente sorgente. Non condividere mai la chiave privata — rimane all'interno del KMS di destinazione.
La risposta include il materiale di chiave pubblica nell'array keys (JWK).
Incapsulare il materiale di chiave sorgente
Sull'ambiente sorgente, cifra il materiale di chiave con la chiave RSA pubblica di destinazione.
Questo passaggio avviene fuori da OVHcloud KMS: utilizza una libreria JOSE sull'ambiente sorgente.
Algoritmi di incapsulamento supportati (RFC 7518):
keyFormatType descrive il formato del materiale di chiave in chiaro prima dell'incapsulamento e dopo il disincapsulamento. Il ciphertext è sempre una stringa JWE Compact Serialization (l'algoritmo di incapsulamento è riportato nell'header JWE).
Dopo l'incapsulamento con la chiave pubblica di destinazione, invia nella richiesta di importazione il ciphertext JWE Compact Serialization ottenuto. Per un esempio in Go di questo passaggio di incapsulamento, consulta Esempio end-to-end in Go.
Importare la chiave incapsulata
Chiama POST /api/{okmsId}/v1/servicekey con un array wrappedKeys invece di keys in chiaro.
Ogni voce di wrappedKeys:
Puoi importare una chiave solo pubblica (class diventa PUBLIC_KEY) o una chiave privata (il KMS ricostruisce la parte pubblica; class diventa KEY_PAIR). Il materiale simmetrico è archiviato come SECRET_KEY.
Azioni IAM su questa chiamata: okms:apikms:serviceKey/create, okms:apikms:serviceKey/import e okms:apikms:serviceKey/unwrapKey sulla chiave di trasporto.
Valori di keyFormatType: RAW, JWK, PKCS1 o PKCS8.
Verificare la chiave importata
Conferma che la chiave esista e corrisponda al tipo e alle operazioni attesi.
Verifica che:
- lo stato (
state) della chiave siaactive(o attivala se il tuo workflow lo richiede). type,sizeeoperationscorrispondano a quanto ti aspettavi.- gli attributi di sensibilità sotto
attributesriflettano una chiave importata (never_extractablevalefalse).
Puoi poi utilizzare la chiave per encrypt, decrypt, sign o verify, come documentato in Utilizzare il tuo OVHcloud Key Management Service (KMS).
Esportare una chiave incapsulata
L'esportazione sicura è l'inverso dell'importazione: OVHcloud KMS cifra il materiale di chiave con una chiave di trasporto RSA e restituisce solo un ciphertext JWE. La chiave di trasporto privata deve risiedere nell'ambiente di destinazione — qui il sistema esterno che riceve la chiave, non OVHcloud KMS — affinché solo quell'ambiente possa disincapsulare il materiale.
Comprendere la cerimonia di esportazione
- Genera una coppia di chiavi RSA di trasporto sull'ambiente di destinazione (un altro KMS o uno strumento che riceverà la chiave).
- Importa la chiave di trasporto pubblica di destinazione in OVHcloud KMS con l'operazione
wrapKey. Questa chiave è ilwrappingKeyIdutilizzato al momento dell'esportazione. - Su OVHcloud KMS, esporta la chiave di servizio incapsulata da questa chiave di trasporto. La chiave deve essere stata creata o importata con
extractableimpostato sutrue. Successivamente, impostaextractablesufalsequando possibile. - Trasferisci il ciphertext verso la destinazione e disincapsulalo con la chiave di trasporto privata di destinazione.
Non generare la coppia di chiavi di trasporto di esportazione su OVHcloud KMS. Se la chiave di trasporto privata restasse in OVHcloud KMS, la destinazione non potrebbe disincapsulare il ciphertext. Solo la parte pubblica è importata in OVHcloud KMS per l'incapsulamento.
La chiave di trasporto referenziata da wrappingKeyId deve essere una chiave RSA nello stesso dominio OKMS, con l'utilizzo wrapKey. Per esportare una chiave memorizzata nell'HSM, consulta Utilizzare il BYOK con chiavi HSM. Le chiavi sensibili (materiale AES/oct e RSA/EC privato) possono essere estratte solo dopo l'incapsulamento — l'estrazione in chiaro non è supportata per queste chiavi.
Importare la chiave di trasporto pubblica di destinazione in OVHcloud KMS
Registra la chiave pubblica di destinazione affinché OVHcloud KMS possa incapsulare con essa la chiave esportata. Importala come chiave RSA solo pubblica con wrapKey (senza materiale privato).
Conserva l'id della chiave restituita come wrappingKeyId.
Attivare l'estrazione
La chiave che esporti deve essere estraibile, e questo viene deciso alla creazione o all'importazione della chiave. In seguito, extractable può solo passare da true a false: una volta impostato su false, non può mai più essere reimpostato su true. Una chiave creata o importata senza extractable impostato su true non potrà quindi mai essere esportata. Questa regola si applica sia alle chiavi SOFTWARE sia alle chiavi HSM.
Attivare l'estrazione riduce il perimetro di protezione della chiave, e una chiave creata con extractable impostato su true ha never_extractable impostato definitivamente su false. Crea una chiave estraibile solo se prevedi di migrarla.
Imposta extractable su true durante la creazione della chiave:
Per un'importazione, imposta "extractable": true nel corpo della richiesta (API REST), aggiungi --extractable (CLI OKMS) o passa okms.WithExtractable(true) (SDK Go).
Quando la chiave non deve più essere esportata, ad esempio dopo un'esportazione incapsulata riuscita (consulta Esportare la chiave incapsulata con la chiave di trasporto), disattiva l'estrazione. Questa operazione è irreversibile. Azione IAM: okms:apikms:serviceKey/update.
Esportare la chiave incapsulata con la chiave di trasporto
Chiama GET /api/{okmsId}/v1/servicekey/{keyId} con i parametri di query di incapsulamento seguenti. Quando questi parametri sono presenti, l'API restituisce wrappedKeys invece di keys in chiaro.
Azioni IAM: okms:apikms:serviceKey/get sulla chiave esportata, e okms:apikms:serviceKey/wrapKey sulla chiave di trasporto.
Esempio di risposta:
Disincapsulare il ciphertext sulla destinazione
Trasferisci il ciphertext verso l'ambiente di destinazione. Disincapsulalo con la chiave di trasporto privata di destinazione (la controparte della chiave pubblica che hai importato in OVHcloud KMS).
- Se la destinazione è un altro dominio OKMS, importa in quel dominio il materiale incapsulato con
wrappedKeyscome in Importare la chiave incapsulata, utilizzando l'ID della chiave di trasporto di quel dominio comewrappingKeyId. - Se la destinazione è un sistema esterno, utilizza la sua API nativa di disincapsulamento / importazione con la chiave di trasporto privata e lo stesso
keyFormatType/ algoritmo di incapsulamento dell'esportazione.
Utilizzare il BYOK con chiavi HSM
Con il livello di protezione HSM, il materiale di chiave viene incapsulato e disincapsulato all'interno dell'HSM: non compare mai in chiaro in OVHcloud KMS. Il formato JWE è lo stesso delle chiavi SOFTWARE (RSA-OAEP o RSA-OAEP-256 con A256GCM).
Il livello di protezione HSM non è disponibile in tutte le regioni. Per verificarne la disponibilità nella regione del tuo dominio OKMS, consulta l'elenco protectionLevel restituito per questa regione dalla seguente chiamata API:
La chiave di trasporto deve essere memorizzata nell'HSM ogni volta che la chiave importata o esportata vi è memorizzata, come riassume la tabella seguente:
Le importazioni nell'HSM descritte di seguito sono presentate solo con l'API REST.
Creare una chiave di trasporto HSM
Per importare una chiave nell'HSM, crea la chiave di trasporto con il livello di protezione HSM:
Esporta poi la sua chiave pubblica e incapsula il materiale di chiave sulla sorgente, come descritto in Ottenere la chiave di trasporto pubblica e Incapsulare il materiale di chiave sorgente.
Importare una chiave nell'HSM
Poiché l'HSM non espone mai il materiale disincapsulato, OVHcloud KMS non può dedurre il tipo di chiave. La richiesta di importazione differisce da quella di un'importazione SOFTWARE:
- Imposta
protectionLevelsuHSM. Anche la chiave di trasporto deve essere una chiaveHSM. - Dichiara
type:oct,RSAoEC. Non impostaresizenécurveperRSAedEC: l'HSM li legge dalla chiave. Peroct,sizeè opzionale (128,192o256). - Non impostare
keyFormatTypeinwrappedKeys. Il testo in chiaro incapsulato nel JWE deve essere costituito dai byte grezzi della chiave per una chiaveocte dalla chiave privata in PKCS#8 (DER) per una chiaveRSAoEC. - Chiavi supportate: AES a
128,192o256bit, RSA a2048,3072o4096bit, ECP-256,P-384oP-521. Una chiave pubblica da sola non può essere importata incapsulata nell'HSM: è possibile solo l'importazione in chiaro.
Una chiave di trasporto HSM può anche disincapsulare una chiave SOFTWARE: in questo caso, segui Importare la chiave incapsulata con keyFormatType.
Esportare una chiave dall'HSM
Solo le chiavi simmetriche (oct) possono essere esportate dall'HSM: l'HSM non rilascia mai le chiavi private RSA o EC. Come per una chiave SOFTWARE, la chiave deve essere stata creata o importata con extractable impostato su true, che non può essere attivato in seguito (consulta Attivare l'estrazione).
La chiave di trasporto deve essere memorizzata nell'HSM. Importa la chiave di trasporto pubblica di destinazione con il livello di protezione HSM:
Esporta poi la chiave impostando wrappedKeyFormat su RAW: l'HSM incapsula sempre i byte grezzi della chiave, quindi il payload del JWE decifrato è la chiave AES stessa (32 byte per una chiave a 256 bit).
Sulla destinazione, decifra il JWE con la chiave di trasporto privata, come descritto in Disincapsulare il ciphertext sulla destinazione.
Esempio end-to-end in Go
Gli esempi seguenti eseguono entrambe le cerimonie con una coppia di chiavi RSA, utilizzando l'SDK Go per le chiamate a OVHcloud KMS e go-jose per le operazioni JWE eseguite fuori da OVHcloud KMS. Entrambi gli esempi codificano il materiale di chiave in PKCS#8 (DER), che corrisponde al valore PKCS8 di keyFormatType.
Importare una chiave generata localmente
Il programma genera la chiave con la libreria standard di Go, la incapsula localmente con la chiave di trasporto pubblica e poi la importa. Il materiale di chiave non viene mai inviato in chiaro a OVHcloud KMS.
L'algoritmo di cifratura del contenuto JWE (enc) deve essere A256GCM.
Esportare una chiave e decifrare il JWE
La destinazione (qui, il programma locale) genera la coppia di chiavi di trasporto, importa solo la sua parte pubblica in OVHcloud KMS, poi decifra, con la parte privata, il JWE esportato.
Per saperne di più
Utilizzare il tuo OVHcloud Key Management Service (KMS)
Primi passi con OVHcloud Key Management Service (KMS)
Contatta la nostra Community di utenti.