Importare ed esportare chiavi su OVHcloud KMS con BYOK

Vedi come Markdown

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).

Info

Il BYOK tramite KMIP non è ancora disponibile. Questa guida copre unicamente l'API REST regionale, la CLI OKMS e l'SDK Go.

Le chiavi create con il livello di protezione HSM non possono attualmente essere utilizzate per il BYOK, né come chiavi di trasporto né come materiale di chiave incapsulato.

Prerequisiti

Procedura

Comprendere la cerimonia di incapsulamento RSA

Flusso di importazione di chiave BYOK RSA dalla sorgente al KMS di destinazione

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.
  1. Genera una coppia di chiavi RSA di trasporto su OVHcloud KMS con le operazioni wrapKey e unwrapKey.
  2. Esporta la chiave di trasporto pubblica da OVHcloud KMS.
  3. Importa la chiave di trasporto pubblica nell'ambiente sorgente.
  4. Sulla sorgente, esporta il materiale di chiave incapsulato (cifrato) con la chiave di trasporto utilizzando RSA-OAEP o RSA-OAEP-256.
  5. Sulla destinazione, importa la chiave incapsulata con POST /api/{okmsId}/v1/servicekey e un payload wrappedKeys. 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, imposta extractable su true e segui Esportare una chiave incapsulata. Consulta Attributi di sensibilità delle chiavi di servizio per l'elenco completo degli attributi.

Info

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:

GET/okms/resource

Sono visibili anche nella scheda Informazioni generali del .

Tip

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:

{
  "name": "okms-byok-import",
  "description": "Import wrapped keys into an OKMS domain using RSA BYOK",
  "identities": ["<identity_urn>"],
  "resources": [{ "urn": "<okms_urn>" }],
  "action": [
    "okms:apikms:serviceKey/get",
    "okms:apikms:serviceKey/create",
    "okms:apikms:serviceKey/unwrapKey",
    "okms:apikms:serviceKey/import"
  ]
}

Esportazione BYOK — importare una chiave di trasporto pubblica, aggiornare l'estraibilità e incapsulare una chiave per l'esportazione:

{
  "name": "okms-byok-export",
  "description": "Export wrapped keys from an OKMS domain using RSA BYOK",
  "identities": ["<identity_urn>"],
  "resources": [{ "urn": "<okms_urn>" }],
  "action": [
    "okms:apikms:serviceKey/get",
    "okms:apikms:serviceKey/create",
    "okms:apikms:serviceKey/import",
    "okms:apikms:serviceKey/update",
    "okms:apikms:serviceKey/wrapKey"
  ]
}
Info

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 prima (e 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.

Info

SOFTWARE è il livello di protezione predefinito, quindi non è necessario indicarlo.

API REST
CLI OKMS
SDK Go
curl -X POST "https://<region>.okms.ovh.net/api/<okmsId>/v1/servicekey" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "byok-transport-rsa",
    "type": "RSA",
    "size": 4096,
    "operations": ["wrapKey", "unwrapKey"]
  }'

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.

API REST
CLI OKMS
SDK Go
curl -X GET "https://<region>.okms.ovh.net/api/<okmsId>/v1/servicekey/<transport-key-id>?format=jwk" \
  -H "Authorization: Bearer <token>"

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):

AlgoritmoDescrizione
RSA-OAEPRSAES-OAEP con SHA-1
RSA-OAEP-256RSAES-OAEP con SHA-256 (consigliato)

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).

keyFormatTypeUtilizzo tipico
RAWChiavi simmetriche (oct) sotto forma di byte grezzi
JWKDocumento JSON Web Key (RFC 7517)
PKCS1Materiale di chiave RSA in codifica PKCS#1
PKCS8Materiale di chiave privata in codifica PKCS#8

Dopo l'incapsulamento con la chiave pubblica di destinazione, invia nella richiesta di importazione il ciphertext JWE Compact Serialization ottenuto.

Importare la chiave incapsulata

Chiama POST /api/{okmsId}/v1/servicekey con un array wrappedKeys invece di keys in chiaro.

MetodoPercorsoDescrizione
POST/api/{okmsId}/v1/servicekeyCreare, importare o importare in modo incapsulato una chiave di servizio
CampoObbligatorioDescrizione
nameNome visualizzato della chiave importata (1–32 caratteri)
wrappedKeys (per il BYOK)Array di blocchi di chiavi incapsulate
operationsUtilizzi previsti della chiave importata
extractableNoIndica se la chiave può essere esportata successivamente (false per impostazione predefinita; le chiavi solo pubbliche passano a true per impostazione predefinita)
type / size / curveNoDedotti dal materiale decifrato quando wrappedKeys è presente

Ogni voce di wrappedKeys:

CampoObbligatorioDescrizione
keyFormatTypeRAW, JWK, PKCS1 o PKCS8
wrappingKeyIdUUID della chiave di trasporto RSA di destinazione
ciphertextMateriale di chiave cifrato in formato JWE Compact Serialization

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.

API REST
CLI OKMS
SDK Go
curl -X POST "https://<region>.okms.ovh.net/api/<okmsId>/v1/servicekey" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "imported-aes-byok",
    "operations": ["encrypt", "decrypt"],
    "wrappedKeys": [
      {
        "keyFormatType": "JWK",
        "wrappingKeyId": "<transport-key-id>",
        "ciphertext": "<jwe-compact-serialization>"
      }
    ]
  }'

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.

API REST
CLI OKMS
SDK Go
curl -X GET "https://<region>.okms.ovh.net/api/<okmsId>/v1/servicekey/<imported-key-id>" \
  -H "Authorization: Bearer <token>"

Verifica che:

  • lo stato (state) della chiave sia active (o attivala se il tuo workflow lo richiede).
  • type, size e operations corrispondano a quanto ti aspettavi.
  • gli attributi di sensibilità sotto attributes riflettano una chiave importata (never_extractable vale false).

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

  1. Genera una coppia di chiavi RSA di trasporto sull'ambiente di destinazione (un altro KMS o uno strumento che riceverà la chiave).
  2. Importa la chiave di trasporto pubblica di destinazione in OVHcloud KMS con l'operazione wrapKey (livello di protezione SOFTWARE). Questa chiave è il wrappingKeyId utilizzato al momento dell'esportazione.
  3. Su OVHcloud KMS, imposta extractable su true sulla chiave di servizio subito prima dell'esportazione, poi esportala incapsulata da questa chiave di trasporto. Successivamente, riporta extractable su false quando possibile.
  4. Trasferisci il ciphertext verso la destinazione e disincapsulalo con la chiave di trasporto privata di destinazione.
Info

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 SOFTWARE nello stesso dominio OKMS, con l'utilizzo wrapKey. 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).

API REST
CLI OKMS
SDK Go
curl -X POST "https://<region>.okms.ovh.net/api/<okmsId>/v1/servicekey" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "byok-export-transport-pub",
    "type": "RSA",
    "operations": ["wrapKey"],
    "keys": [
      {
        "kty": "RSA",
        "n": "<base64url-modulus>",
        "e": "<base64url-exponent>",
        "key_ops": ["wrapKey"]
      }
    ]
  }'

Conserva l'id della chiave restituita come wrappingKeyId.

Attivare l'estrazione

La chiave che esporti deve essere estraibile. Preferisci impostare extractable su true unicamente per l'operazione di esportazione (tramite PATCH), poi riportarlo su false in seguito. Lascia le chiavi non estraibili alla creazione ogni volta che è possibile: rendere una chiave estraibile imposta definitivamente never_extractable su false.

Warning

Attivare l'estrazione riduce il perimetro di protezione della chiave. Imposta extractable su true solo quando devi migrare la chiave, e riportalo su false in seguito quando possibile.

Azione IAM: okms:apikms:serviceKey/update.

API REST
CLI OKMS
SDK Go
curl -X PATCH "https://<region>.okms.ovh.net/api/<okmsId>/v1/servicekey/<key-id>" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "extractable": true
  }'

Dopo un'esportazione incapsulata riuscita (consulta Esportare la chiave incapsulata con la chiave di trasporto), disattiva di nuovo l'estrazione:

API REST
CLI OKMS
SDK Go
curl -X PATCH "https://<region>.okms.ovh.net/api/<okmsId>/v1/servicekey/<key-id>" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "extractable": false
  }'

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.

Parametro di queryObbligatorioDescrizione
wrappingKeyIdUUID della chiave di trasporto pubblica di destinazione importata in OVHcloud KMS
wrappedKeyFormatRAW, JWK, PKCS1 o PKCS8 — formato in chiaro prima dell'incapsulamento
wrappingAlgorithmRSA-OAEP o RSA-OAEP-256
MetodoPercorsoDescrizione
GET/api/{okmsId}/v1/servicekey/{keyId}Ottenere i metadati, o esportare il materiale di chiave in forma incapsulata

Azioni IAM: okms:apikms:serviceKey/get sulla chiave esportata, e okms:apikms:serviceKey/wrapKey sulla chiave di trasporto.

API REST
CLI OKMS
SDK Go
curl -X GET "https://<region>.okms.ovh.net/api/<okmsId>/v1/servicekey/<key-id>?wrappingKeyId=<wrapping-key-id>&wrappedKeyFormat=JWK&wrappingAlgorithm=RSA-OAEP-256" \
  -H "Authorization: Bearer <token>"

Esempio di risposta:

{
  "id": "<key-id>",
  "name": "imported-aes-byok",
  "type": "oct",
  "class": "SECRET_KEY",
  "size": 256,
  "operations": ["encrypt", "decrypt"],
  "wrappedKeys": [
    {
      "keyFormatType": "JWK",
      "wrappingKeyId": "<wrapping-key-id>",
      "ciphertext": "<jwe-compact-serialization>"
    }
  ]
}

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 wrappedKeys come in Importare la chiave incapsulata, utilizzando l'ID della chiave di trasporto di quel dominio come wrappingKeyId.
  • 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.

Per saperne di più

Utilizzare il tuo OVHcloud Key Management Service (KMS)

Metodi di autenticazione OKMS

Primi passi con OVHcloud Key Management Service (KMS)

Contatta la nostra Community di utenti.

Questa pagina ti è stata utile?