Import i eksport kluczy w OVHcloud KMS za pomocą BYOK

Pokaż jako Markdown

Dowiedz się, jak bezpiecznie importować i eksportować zaszyfrowany materiał klucza w OVHcloud KMS przy użyciu asymetrycznego opakowywania kluczy RSA (BYOK)

Wprowadzenie

Bring Your Own Key (BYOK) umożliwia import i eksport materiału kryptograficznego klucza w OVHcloud Key Management Service (KMS) bez przesyłania go w postaci jawnej. Para kluczy transportowych RSA chroni materiał w trakcie przesyłania: klucz publiczny go opakowuje, a tylko posiadacz klucza prywatnego może go rozpakować.

Ten przewodnik wyjaśnia, jak zaimportować i wyeksportować klucz w OVHcloud KMS przy użyciu asymetrycznego opakowywania kluczy RSA (BYOK).

Info

BYOK przez KMIP nie jest jeszcze dostępne. Ten przewodnik obejmuje wyłącznie regionalne API REST, CLI OKMS oraz SDK Go.

Klucze utworzone z poziomem ochrony HSM nie mogą być obecnie używane do BYOK — ani jako klucze transportowe, ani jako opakowywany materiał klucza.

Wymagania początkowe

W praktyce

Zrozumienie ceremonii opakowywania RSA

Przepływ importu klucza BYOK RSA ze źródła do docelowego KMS

Ceremonia obejmuje dwa środowiska i operatora:

  • Miejsce docelowe (Dst): Twoja domena OKMS, w której zostanie przechowywany zaimportowany klucz.
  • Źródło (Src): system, który obecnie przechowuje materiał klucza (inny KMS, aplikacja lub narzędzie takie jak OpenSSL).
  • Operator: podmiot posiadający uprawnienia dostępu zarówno do domeny OKMS, jak i do źródła klucza do zaimportowania. Może to być osoba korzystająca z CLI OKMS lub usługa działająca poprzez API.
  1. Wygeneruj parę kluczy transportowych RSA w OVHcloud KMS z operacjami wrapKey i unwrapKey.
  2. Wyeksportuj publiczny klucz transportowy z OVHcloud KMS.
  3. Zaimportuj publiczny klucz transportowy do środowiska źródłowego.
  4. Po stronie źródła wyeksportuj materiał klucza opakowany (zaszyfrowany) kluczem transportowym, używając RSA-OAEP lub RSA-OAEP-256.
  5. Po stronie miejsca docelowego zaimportuj opakowany klucz za pomocą POST /api/{okmsId}/v1/servicekey i ładunku wrappedKeys. KMS rozpakowuje ciphertext prywatnym kluczem transportowym i zapisuje wynikowy klucz serwisowy.

Klucze zaimportowane w ten sposób mają never_extractable ustawione na false, ponieważ materiał istniał poza KMS przed importem. Aby później wyodrębnić klucz w formie opakowanej, ustaw extractable na true i postępuj zgodnie z sekcją Eksport opakowanego klucza. Pełną listę atrybutów znajdziesz w sekcji Atrybuty wrażliwości kluczy serwisowych.

Info

Aby wykonać czynności z tego przewodnika, potrzebujesz dwóch wartości swojej domeny OKMS: jej regionalnego endpointu oraz okmsId. Wywołania API REST zawierają obie w adresie URL, natomiast CLI OKMS i SDK Go odczytują je ze swojej konfiguracji. Obie są zwracane przez następujące wywołanie API:

GET/okms/resource

Są również widoczne w zakładce Informacje ogólne w .

Tip

Preferuj tę ceremonię zamiast importu klucza w postaci jawnej, gdy klucz musi pozostać zaufany podczas przesyłania.

Konfiguracja IAM dla BYOK

Zastosuj politykę do zasobu swojej domeny OKMS. Jego URN jest wyświetlany w zakładce Informacje ogólne w . Zastąp <identity_urn> i <okms_urn> swoimi wartościami. Utwórz polityki za pośrednictwem Panelu klienta OVHcloud lub API OVHcloud.

Import BYOK — odczyt, tworzenie lub import kluczy serwisowych oraz rozpakowywanie za pomocą klucza transportowego:

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

Eksport BYOK — import publicznego klucza transportowego, aktualizacja możliwości wyodrębnienia oraz opakowanie klucza do eksportu:

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

W przypadku importu serviceKey/unwrapKey musi być dozwolone na kluczu transportowym RSA wskazanym przez wrappingKeyId. W przypadku eksportu najpierw zaimportuj publiczny klucz transportowy miejsca docelowego (create / import), następnie zezwól na serviceKey/wrapKey na tym kluczu transportowym oraz serviceKey/get na eksportowanym kluczu. serviceKey/update jest wymagane, aby ustawić extractable przed eksportem (i po nim).

Utworzenie klucza transportowego RSA w docelowym KMS

Utwórz klucz RSA przeznaczony do opakowywania. Na potrzeby ceremonii importu ustaw na tym kluczu zarówno wrapKey, jak i unwrapKey; wzajemnie wykluczają się one z sign i verify.

Obsługiwane rozmiary kluczy RSA: 2048, 3072 lub 4096 bitów.

Info

SOFTWARE to domyślny poziom ochrony, więc nie musisz go określać.

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

Zapisz zwrócone id klucza — potrzebujesz go jako wrappingKeyId podczas importu.

Pobranie publicznego klucza transportowego

Wyeksportuj publiczną część klucza transportowego i przekaż ją środowisku źródłowemu. Nigdy nie udostępniaj klucza prywatnego — pozostaje on wewnątrz docelowego KMS.

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

Odpowiedź zawiera materiał klucza publicznego w tablicy keys (JWK).

Opakowanie materiału klucza źródłowego

W środowisku źródłowym zaszyfruj materiał klucza publicznym kluczem RSA miejsca docelowego.

Ten krok odbywa się poza OVHcloud KMS: w środowisku źródłowym użyj biblioteki JOSE.

Obsługiwane algorytmy opakowywania (RFC 7518):

AlgorytmOpis
RSA-OAEPRSAES-OAEP z SHA-1
RSA-OAEP-256RSAES-OAEP z SHA-256 (zalecane)

keyFormatType opisuje format jawnego materiału klucza przed opakowaniem i po rozpakowaniu. Ciphertext jest zawsze ciągiem JWE Compact Serialization (algorytm opakowywania jest przenoszony w nagłówku JWE).

keyFormatTypeTypowe zastosowanie
RAWKlucze symetryczne (oct) jako surowe bajty
JWKDokument JSON Web Key (RFC 7517)
PKCS1Materiał klucza RSA w kodowaniu PKCS#1
PKCS8Materiał klucza prywatnego w kodowaniu PKCS#8

Po opakowaniu publicznym kluczem miejsca docelowego prześlij uzyskaną wartość ciphertext w formacie JWE Compact Serialization w żądaniu importu.

Import opakowanego klucza

Wywołaj POST /api/{okmsId}/v1/servicekey z tablicą wrappedKeys zamiast jawnych keys.

MetodaŚcieżkaOpis
POST/api/{okmsId}/v1/servicekeyUtworzenie, import lub import opakowany klucza serwisowego
PoleWymaganeOpis
nameTakNazwa wyświetlana zaimportowanego klucza (1–32 znaki)
wrappedKeysTak (dla BYOK)Tablica bloków opakowanych kluczy
operationsTakZamierzone zastosowania zaimportowanego klucza
extractableNieCzy klucz będzie można później wyeksportować (false domyślnie; klucze wyłącznie publiczne domyślnie mają true)
type / size / curveNieWnioskowane z odszyfrowanego materiału, gdy obecne jest wrappedKeys

Każdy wpis wrappedKeys:

PoleWymaganeOpis
keyFormatTypeTakRAW, JWK, PKCS1 lub PKCS8
wrappingKeyIdTakUUID docelowego klucza transportowego RSA
ciphertextTakZaszyfrowany materiał klucza jako JWE Compact Serialization

Możesz zaimportować sam klucz publiczny (class staje się PUBLIC_KEY) lub klucz prywatny (KMS odtwarza część publiczną; class staje się KEY_PAIR). Materiał symetryczny jest przechowywany jako SECRET_KEY.

Akcje IAM przy tym wywołaniu: okms:apikms:serviceKey/create, okms:apikms:serviceKey/import oraz okms:apikms:serviceKey/unwrapKey na kluczu transportowym.

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

Wartości keyFormatType: RAW, JWK, PKCS1 lub PKCS8.

Weryfikacja zaimportowanego klucza

Potwierdź, że klucz istnieje i odpowiada oczekiwanemu typowi oraz operacjom.

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

Sprawdź, czy:

  • atrybut state klucza ma wartość active (lub aktywuj go, jeśli wymaga tego Twój przepływ pracy).
  • type, size i operations odpowiadają Twoim założeniom.
  • atrybuty wrażliwości w attributes odzwierciedlają zaimportowany klucz (never_extractable ma wartość false).

Następnie możesz używać klucza do operacji encrypt, decrypt, sign lub verify zgodnie z dokumentacją Korzystanie z OVHcloud Key Management Service (KMS).

Eksport opakowanego klucza

Bezpieczny eksport jest odwrotnością importu: OVHcloud KMS szyfruje materiał klucza kluczem transportowym RSA i zwraca wyłącznie ciphertext JWE. Prywatny klucz transportowy musi znajdować się w środowisku docelowym — czyli w systemie zewnętrznym, który otrzymuje klucz, a nie w OVHcloud KMS — aby tylko to środowisko mogło rozpakować materiał.

Zrozumienie ceremonii eksportu

  1. Wygeneruj parę kluczy transportowych RSA w środowisku docelowym (inny KMS lub narzędzie, które odbierze klucz).
  2. Zaimportuj publiczny klucz transportowy miejsca docelowego do OVHcloud KMS z operacją wrapKey (poziom ochrony SOFTWARE). Ten klucz to wrappingKeyId używany w momencie eksportu.
  3. W OVHcloud KMS ustaw extractable na true na kluczu serwisowym tuż przed eksportem, a następnie wyeksportuj go opakowany tym kluczem transportowym. Następnie, gdy to możliwe, przywróć extractable do false.
  4. Przenieś ciphertext do miejsca docelowego i rozpakuj go prywatnym kluczem transportowym miejsca docelowego.
Info

Nie generuj pary kluczy transportowych eksportu w OVHcloud KMS. Gdyby prywatny klucz transportowy pozostał w OVHcloud KMS, miejsce docelowe nie mogłoby rozpakować ciphertextu. Do OVHcloud KMS importowana jest wyłącznie część publiczna, służąca do opakowywania.

Klucz transportowy wskazany przez wrappingKeyId musi być kluczem RSA SOFTWARE w tej samej domenie OKMS z użyciem wrapKey. Klucze wrażliwe (materiał AES/oct oraz prywatny materiał RSA/EC) można wyodrębnić tylko po opakowaniu — wyodrębnianie w postaci jawnej nie jest obsługiwane dla tych kluczy.

Import publicznego klucza transportowego miejsca docelowego do OVHcloud KMS

Zarejestruj publiczny klucz miejsca docelowego, aby OVHcloud KMS mógł nim opakować eksportowany klucz. Zaimportuj go jako klucz RSA wyłącznie publiczny z wrapKey (bez materiału prywatnego).

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

Zapisz zwrócone id klucza jako wrappingKeyId.

Włączenie wyodrębniania

Eksportowany klucz musi być możliwy do wyodrębnienia. Preferuj ustawienie extractable na true tylko na czas operacji eksportu (przez PATCH), a następnie przywrócenie wartości false. W miarę możliwości pozostawiaj klucze bez możliwości wyodrębnienia przy tworzeniu: ustawienie klucza jako możliwego do wyodrębnienia trwale ustawia never_extractable na false.

Warning

Włączenie wyodrębniania zmniejsza granicę ochrony klucza. Ustawiaj extractable na true tylko wtedy, gdy musisz zmigrować klucz, i przywracaj wartość false potem, gdy to możliwe.

Akcja 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
  }'

Po udanym eksporcie opakowanym (patrz sekcja Eksport klucza opakowanego kluczem transportowym) wyłącz ponownie wyodrębnianie:

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
  }'

Eksport klucza opakowanego kluczem transportowym

Wywołaj GET /api/{okmsId}/v1/servicekey/{keyId} z poniższymi parametrami zapytania opakowywania. Gdy te parametry są obecne, API zwraca wrappedKeys zamiast jawnych keys.

Parametr zapytaniaWymaganeOpis
wrappingKeyIdTakUUID publicznego klucza transportowego miejsca docelowego zaimportowanego do OVHcloud KMS
wrappedKeyFormatTakRAW, JWK, PKCS1 lub PKCS8 — format jawny przed opakowaniem
wrappingAlgorithmTakRSA-OAEP lub RSA-OAEP-256
MetodaŚcieżkaOpis
GET/api/{okmsId}/v1/servicekey/{keyId}Pobranie metadanych lub eksport materiału klucza w formie opakowanej

Akcje IAM: okms:apikms:serviceKey/get na eksportowanym kluczu oraz okms:apikms:serviceKey/wrapKey na kluczu transportowym.

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

Przykładowa odpowiedź:

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

Rozpakowanie ciphertextu w miejscu docelowym

Przenieś ciphertext do środowiska docelowego. Rozpakuj go prywatnym kluczem transportowym miejsca docelowego (odpowiednikiem klucza publicznego zaimportowanego do OVHcloud KMS).

  • Jeśli miejscem docelowym jest inna domena OKMS, zaimportuj tam opakowany materiał za pomocą wrappedKeys jak w Import opakowanego klucza, używając identyfikatora klucza transportowego tej domeny jako wrappingKeyId.
  • Jeśli miejscem docelowym jest system zewnętrzny, użyj jego natywnego API rozpakowywania / importu z prywatnym kluczem transportowym oraz tym samym keyFormatType / algorytmem opakowywania, którego użyto przy eksporcie.

Sprawdź również

Korzystanie z OVHcloud Key Management Service (KMS)

Metody uwierzytelniania OKMS

Pierwsze kroki z OVHcloud Key Management Service (KMS)

Dołącz do grona naszych użytkowników.

Czy ta strona była pomocna?