Schlüssel auf OVHcloud KMS mit BYOK importieren und exportieren

Als Markdown ansehen

Erfahren Sie, wie Sie verschlüsseltes Schlüsselmaterial sicher mit OVHcloud KMS mittels asymmetrischer RSA-Umschließung (BYOK) importieren und exportieren

Ziel

Bring Your Own Key (BYOK) ermöglicht Ihnen, kryptografisches Schlüsselmaterial mit dem OVHcloud Key Management Service (KMS) zu importieren und zu exportieren, ohne es im Klartext zu übertragen. Ein RSA-Transportschlüsselpaar schützt das Material während der Übertragung: Der öffentliche Schlüssel umschließt es, und nur der Inhaber des privaten Schlüssels kann die Umschließung wieder aufheben.

Diese Anleitung erklärt, wie Sie einen Schlüssel mit OVHcloud KMS mittels asymmetrischer RSA-Umschließung (BYOK) importieren und exportieren.

Info

KMIP-BYOK ist noch nicht verfügbar. Diese Anleitung behandelt ausschließlich die regionale REST-API, die OKMS CLI und das Go SDK.

Schlüssel, die mit der Schutzstufe HSM erstellt wurden, können derzeit nicht für BYOK verwendet werden – weder als Transportschlüssel noch als umschlossenes Schlüsselmaterial.

Voraussetzungen

In der praktischen Anwendung

Die Zeremonie der RSA-Umschließung verstehen

Ablauf des BYOK-RSA-Schlüsselimports von der Quelle zum Ziel-KMS

An der Zeremonie sind zwei Umgebungen und ein Operator beteiligt:

  • Ziel (Dst): Ihre OKMS-Domain, in der der importierte Schlüssel gespeichert wird.
  • Quelle (Src): das System, das derzeit das Schlüsselmaterial hält (ein anderes KMS, eine Anwendung oder ein Werkzeug wie OpenSSL).
  • Operator: die Entität mit den Berechtigungen, sowohl auf die OKMS-Domain als auch auf die Quelle des zu importierenden Schlüssels zuzugreifen. Dies kann eine Person sein, die die OKMS CLI verwendet, oder ein Dienst, der über die API arbeitet.
  1. Erzeugen Sie ein RSA-Transportschlüsselpaar auf dem OVHcloud KMS mit den Operationen wrapKey und unwrapKey.
  2. Exportieren Sie den öffentlichen Transportschlüssel aus dem OVHcloud KMS.
  3. Importieren Sie den öffentlichen Transportschlüssel in die Quellumgebung.
  4. Exportieren Sie auf der Quelle das Schlüsselmaterial umschlossen (verschlüsselt) mit dem Transportschlüssel mittels RSA-OAEP oder RSA-OAEP-256.
  5. Importieren Sie auf dem Ziel den umschlossenen Schlüssel mit POST /api/{okmsId}/v1/servicekey und einer wrappedKeys-Nutzlast. Das KMS hebt die Umschließung des Ciphertexts mit dem privaten Transportschlüssel auf und speichert den resultierenden Serviceschlüssel.

Bei so importierten Schlüsseln ist never_extractable auf false gesetzt, weil das Material vor dem Import außerhalb des KMS existierte. Um einen Schlüssel später in umschlossener Form zu extrahieren, setzen Sie extractable auf true und folgen Sie Einen umschlossenen Schlüssel exportieren. Die vollständige Attributliste finden Sie unter Sensitivitätsattribute von Serviceschlüsseln.

Info

Für diese Anleitung benötigen Sie zwei Werte Ihrer OKMS-Domain: ihren regionalen Endpoint und ihre okmsId. Die REST-API-Aufrufe enthalten beide in der URL, während die OKMS CLI und das Go SDK sie aus ihrer Konfiguration lesen. Beide werden vom folgenden API-Aufruf zurückgegeben:

GET/okms/resource

Sie werden auch im Tab Allgemeine Informationen im angezeigt.

Tip

Bevorzugen Sie diese Zeremonie gegenüber dem Klartext-Schlüsselimport, wenn der Schlüssel während der Übertragung vertrauenswürdig bleiben muss.

IAM für BYOK konfigurieren

Wenden Sie eine Richtlinie auf die Ressource Ihrer OKMS-Domain an. Deren URN wird im Tab Allgemeine Informationen im angezeigt. Ersetzen Sie <identity_urn> und <okms_urn> durch Ihre Werte. Erstellen Sie Richtlinien über das OVHcloud Kundencenter oder die OVHcloud API.

BYOK-Import — Serviceschlüssel lesen, erstellen oder importieren und mit einem Transportschlüssel die Umschließung aufheben:

{
  "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"
  ]
}

BYOK-Export — einen öffentlichen Transportschlüssel importieren, die Extrahierbarkeit aktualisieren und einen Schlüssel für den Export umschließen:

{
  "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

Für den Import muss serviceKey/unwrapKey auf dem RSA-Transportschlüssel erlaubt sein, der über wrappingKeyId referenziert wird. Für den Export importieren Sie zuerst den öffentlichen Ziel-Transportschlüssel (create / import) und erlauben Sie anschließend serviceKey/wrapKey auf diesem Transportschlüssel sowie serviceKey/get auf dem zu exportierenden Schlüssel. serviceKey/update ist erforderlich, um extractable vor (und nach) dem Export zu setzen.

Den RSA-Transportschlüssel auf dem Ziel-KMS erstellen

Erstellen Sie einen RSA-Schlüssel, der ausschließlich der Umschließung dient. Setzen Sie für die Import-Zeremonie auf diesem Schlüssel sowohl wrapKey als auch unwrapKey; sie schließen sich mit sign und verify gegenseitig aus.

Unterstützte RSA-Schlüsselgrößen: 2048, 3072 oder 4096 Bit.

Info

SOFTWARE ist die Standard-Schutzstufe, Sie müssen sie daher nicht angeben.

REST-API
OKMS CLI
Go SDK
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"]
  }'

Speichern Sie die zurückgegebene Schlüssel-id — Sie benötigen sie beim Import als wrappingKeyId.

Den öffentlichen Transportschlüssel abrufen

Exportieren Sie den öffentlichen Teil des Transportschlüssels und stellen Sie ihn der Quellumgebung zur Verfügung. Geben Sie den privaten Schlüssel niemals weiter — er verbleibt im Ziel-KMS.

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

Die Antwort enthält das öffentliche Schlüsselmaterial im Array keys (JWK).

Das Quell-Schlüsselmaterial umschließen

Verschlüsseln Sie in der Quellumgebung das Schlüsselmaterial mit dem öffentlichen RSA-Zielschlüssel.

Dieser Schritt erfolgt außerhalb von OVHcloud KMS: Verwenden Sie in der Quellumgebung eine JOSE-Bibliothek.

Unterstützte Algorithmen für die Umschließung (RFC 7518):

AlgorithmusBeschreibung
RSA-OAEPRSAES-OAEP mit SHA-1
RSA-OAEP-256RSAES-OAEP mit SHA-256 (empfohlen)

keyFormatType beschreibt das Format des Klartext-Schlüsselmaterials vor der Umschließung und nach dem Aufheben der Umschließung. Der Ciphertext ist stets eine JWE Compact Serialization-Zeichenkette (der Algorithmus der Umschließung steht im JWE-Header).

keyFormatTypeTypische Verwendung
RAWSymmetrische (oct) Schlüssel als Rohbytes
JWKJSON-Web-Key-Dokument (RFC 7517)
PKCS1RSA-Schlüsselmaterial in PKCS#1-Kodierung
PKCS8Privates Schlüsselmaterial in PKCS#8-Kodierung

Nach dem Umschließen mit dem öffentlichen Zielschlüssel senden Sie den entstandenen JWE-Compact-Serialization-ciphertext in der Importanfrage.

Den umschlossenen Schlüssel importieren

Rufen Sie POST /api/{okmsId}/v1/servicekey mit einem wrappedKeys-Array anstelle von Klartext-keys auf.

MethodePfadBeschreibung
POST/api/{okmsId}/v1/servicekeyEinen Serviceschlüssel erstellen, importieren oder umschlossen importieren
FeldErforderlichBeschreibung
nameJaAnzeigename des importierten Schlüssels (1–32 Zeichen)
wrappedKeysJa (für BYOK)Array umschlossener Schlüsselblöcke
operationsJaVorgesehene Verwendungen des importierten Schlüssels
extractableNeinOb der Schlüssel später exportiert werden kann (standardmäßig false; rein öffentliche Schlüssel standardmäßig true)
type / size / curveNeinWerden aus dem entschlüsselten Material abgeleitet, wenn wrappedKeys vorhanden ist

Jeder wrappedKeys-Eintrag:

FeldErforderlichBeschreibung
keyFormatTypeJaRAW, JWK, PKCS1 oder PKCS8
wrappingKeyIdJaUUID des RSA-Transportschlüssels am Ziel
ciphertextJaVerschlüsseltes Schlüsselmaterial als JWE Compact Serialization

Sie können einen öffentlichen Schlüssel allein importieren (class wird zu PUBLIC_KEY) oder einen privaten Schlüssel (das KMS rekonstruiert den öffentlichen Teil; class wird zu KEY_PAIR). Symmetrisches Material wird als SECRET_KEY gespeichert.

IAM-Aktionen bei diesem Aufruf: okms:apikms:serviceKey/create, okms:apikms:serviceKey/import und okms:apikms:serviceKey/unwrapKey auf dem Transportschlüssel.

REST-API
OKMS CLI
Go SDK
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>"
      }
    ]
  }'

keyFormatType-Werte: RAW, JWK, PKCS1 oder PKCS8.

Den importierten Schlüssel prüfen

Bestätigen Sie, dass der Schlüssel existiert und dem erwarteten Typ sowie den erwarteten Operationen entspricht.

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

Prüfen Sie Folgendes:

  • der state des Schlüssels ist active (oder aktivieren Sie ihn, falls Ihr Workflow dies erfordert).
  • type, size und operations entsprechen Ihren Absichten.
  • die Sensitivitätsattribute unter attributes spiegeln einen importierten Schlüssel wider (never_extractable ist false).

Anschließend können Sie den Schlüssel für encrypt, decrypt, sign oder verify verwenden, wie in OVHcloud Key Management Service (KMS) verwenden beschrieben.

Einen umschlossenen Schlüssel exportieren

Der sichere Export ist die Umkehrung des Imports: OVHcloud KMS verschlüsselt das Schlüsselmaterial mit einem RSA-Transportschlüssel und liefert nur einen JWE-Ciphertext zurück. Der private Transportschlüssel muss in der Ziel-Umgebung liegen — hier das externe System, das den Schlüssel empfängt, nicht OVHcloud KMS —, damit nur diese Umgebung die Umschließung des Materials aufheben kann.

Die Export-Zeremonie verstehen

  1. Erzeugen Sie ein RSA-Transportschlüsselpaar in der Ziel-Umgebung (ein anderes KMS oder ein Werkzeug, das den Schlüssel empfängt).
  2. Importieren Sie den öffentlichen Ziel-Transportschlüssel in OVHcloud KMS mit der Operation wrapKey (Schutzstufe SOFTWARE). Dieser Schlüssel ist die beim Export verwendete wrappingKeyId.
  3. Setzen Sie auf OVHcloud KMS extractable unmittelbar vor dem Export auf dem Serviceschlüssel auf true, und exportieren Sie ihn anschließend umschlossen durch diesen Transportschlüssel. Setzen Sie extractable danach nach Möglichkeit wieder auf false.
  4. Übertragen Sie den Ciphertext an das Ziel und heben Sie seine Umschließung mit dem privaten Ziel-Transportschlüssel auf.
Info

Erzeugen Sie das Export-Transportschlüsselpaar nicht auf OVHcloud KMS. Bliebe der private Transportschlüssel in OVHcloud KMS, könnte das Ziel die Umschließung des Ciphertexts nicht aufheben. Nur der öffentliche Teil wird für die Umschließung in OVHcloud KMS importiert.

Der über wrappingKeyId referenzierte Transportschlüssel muss ein SOFTWARE-RSA-Schlüssel in derselben OKMS-Domain mit der Verwendung wrapKey sein. Sensible Schlüssel (AES/oct sowie privates RSA/EC-Material) können nur nach der Umschließung extrahiert werden — die Extraktion im Klartext wird für diese Schlüssel nicht unterstützt.

Den öffentlichen Ziel-Transportschlüssel in OVHcloud KMS importieren

Registrieren Sie den öffentlichen Zielschlüssel, damit OVHcloud KMS den exportierten Schlüssel damit umschließen kann. Importieren Sie ihn als rein öffentlichen RSA-Schlüssel mit wrapKey (ohne privates Material).

REST-API
OKMS CLI
Go SDK
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"]
      }
    ]
  }'

Speichern Sie die zurückgegebene Schlüssel-id als wrappingKeyId.

Extraktion aktivieren

Der zu exportierende Schlüssel muss extrahierbar sein. Setzen Sie extractable idealerweise nur für den Exportvorgang auf true (via PATCH) und danach wieder auf false. Lassen Sie Schlüssel bei der Erstellung nach Möglichkeit nicht extrahierbar: Wenn Sie einen Schlüssel extrahierbar machen, wird never_extractable dauerhaft auf false gesetzt.

Warning

Das Aktivieren der Extraktion verringert die Schutzgrenze des Schlüssels. Setzen Sie extractable nur dann auf true, wenn Sie den Schlüssel migrieren müssen, und setzen Sie es danach nach Möglichkeit wieder auf false.

IAM-Aktion: okms:apikms:serviceKey/update.

REST-API
OKMS CLI
Go SDK
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
  }'

Deaktivieren Sie die Extraktion nach einem erfolgreichen umschlossenen Export (siehe Den mit dem Transportschlüssel umschlossenen Schlüssel exportieren) erneut:

REST-API
OKMS CLI
Go SDK
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
  }'

Den mit dem Transportschlüssel umschlossenen Schlüssel exportieren

Rufen Sie GET /api/{okmsId}/v1/servicekey/{keyId} mit den unten stehenden Abfrageparametern für die Umschließung auf. Sind diese Parameter vorhanden, liefert die API wrappedKeys statt Klartext-keys.

AbfrageparameterErforderlichBeschreibung
wrappingKeyIdJaUUID des öffentlichen Ziel-Transportschlüssels, der in OVHcloud KMS importiert wurde
wrappedKeyFormatJaRAW, JWK, PKCS1 oder PKCS8 — Klartextformat vor der Umschließung
wrappingAlgorithmJaRSA-OAEP oder RSA-OAEP-256
MethodePfadBeschreibung
GET/api/{okmsId}/v1/servicekey/{keyId}Metadaten abrufen oder Schlüsselmaterial in umschlossener Form exportieren

IAM-Aktionen: okms:apikms:serviceKey/get auf dem exportierten Schlüssel und okms:apikms:serviceKey/wrapKey auf dem Transportschlüssel.

REST-API
OKMS CLI
Go SDK
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>"

Beispiel einer Antwort:

{
  "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>"
    }
  ]
}

Die Umschließung des Ciphertexts am Ziel aufheben

Übertragen Sie den ciphertext in die Zielumgebung. Heben Sie seine Umschließung mit dem privaten Ziel-Transportschlüssel auf (dem Gegenstück des öffentlichen Schlüssels, den Sie in OVHcloud KMS importiert haben).

  • Ist das Ziel eine andere OKMS-Domain, importieren Sie das umschlossene Material dort mit wrappedKeys wie unter Den umschlossenen Schlüssel importieren, und verwenden Sie die ID des Transportschlüssels dieser Domain als wrappingKeyId.
  • Ist das Ziel ein externes System, nutzen Sie dessen native API zum Aufheben der Umschließung bzw. zum Import mit dem privaten Transportschlüssel, demselben keyFormatType und demselben Algorithmus für die Umschließung wie beim Export.

Weiterführende Informationen

OVHcloud Key Management Service (KMS) verwenden

OKMS-Authentifizierungsmethoden

Erste Schritte mit OVHcloud Key Management Service (KMS)

Treten Sie unserer User Community bei.

War diese Seite hilfreich?