Import i eksport kluczy w OVHcloud KMS za pomocą BYOK
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).
BYOK przez KMIP nie jest jeszcze dostępne. Ten przewodnik obejmuje wyłącznie regionalne API REST, CLI OKMS oraz SDK Go.
Klucze z poziomem ochrony HSM podlegają dodatkowym regułom, zarówno jako klucze transportowe, jak i jako importowany lub eksportowany klucz. Zobacz Użycie BYOK z kluczami HSM.
Wymagania początkowe
- Konto klienta OVHcloud.
- Zamówiona usługa OVHcloud KMS.
- Skonfigurowana metoda uwierzytelniania dla płaszczyzny danych OKMS (osobisty token dostępu, konto serwisowe lub certyfikat dostępu).
- Możliwość zastosowania polityki IAM w domenie OKMS; wymagane akcje BYOK są wymienione w sekcji Konfiguracja IAM dla BYOK.
- Opcjonalnie: zainstalowane CLI OKMS (wersja 0.6.0 lub nowsza) lub SDK Go na potrzeby przykładów w kartach.
W praktyce
Zrozumienie ceremonii opakowywania RSA
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.
- Wygeneruj parę kluczy transportowych RSA w OVHcloud KMS z operacjami
wrapKeyiunwrapKey. - Wyeksportuj publiczny klucz transportowy z OVHcloud KMS.
- Zaimportuj publiczny klucz transportowy do środowiska źródłowego.
- Po stronie źródła wyeksportuj materiał klucza opakowany (zaszyfrowany) kluczem transportowym, używając
RSA-OAEPlubRSA-OAEP-256. - Po stronie miejsca docelowego zaimportuj opakowany klucz za pomocą
POST /api/{okmsId}/v1/servicekeyi ładunkuwrappedKeys. 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, zaimportuj go z extractable ustawionym na true (nie można tego włączyć później) i postępuj zgodnie z sekcją Eksport opakowanego klucza. Pełną listę atrybutów znajdziesz w sekcji Atrybuty wrażliwości kluczy serwisowych.
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:
Są również widoczne w zakładce Informacje ogólne w .
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:
Eksport BYOK — import publicznego klucza transportowego, aktualizacja możliwości wyodrębnienia oraz opakowanie klucza do eksportu:
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 na false po eksporcie.
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.
SOFTWARE to domyślny poziom ochrony, więc nie musisz go określać.
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.
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):
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).
Po opakowaniu publicznym kluczem miejsca docelowego prześlij uzyskaną wartość ciphertext w formacie JWE Compact Serialization w żądaniu importu. Przykład w Go dla tego kroku opakowywania znajdziesz w sekcji Przykład end-to-end w Go.
Import opakowanego klucza
Wywołaj POST /api/{okmsId}/v1/servicekey z tablicą wrappedKeys zamiast jawnych keys.
Każdy wpis wrappedKeys:
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.
Wartości keyFormatType: RAW, JWK, PKCS1 lub PKCS8.
Weryfikacja zaimportowanego klucza
Potwierdź, że klucz istnieje i odpowiada oczekiwanemu typowi oraz operacjom.
Sprawdź, czy:
- atrybut
stateklucza ma wartośćactive(lub aktywuj go, jeśli wymaga tego Twój przepływ pracy). type,sizeioperationsodpowiadają Twoim założeniom.- atrybuty wrażliwości w
attributesodzwierciedlają zaimportowany klucz (never_extractablema 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
- Wygeneruj parę kluczy transportowych RSA w środowisku docelowym (inny KMS lub narzędzie, które odbierze klucz).
- Zaimportuj publiczny klucz transportowy miejsca docelowego do OVHcloud KMS z operacją
wrapKey. Ten klucz towrappingKeyIdużywany w momencie eksportu. - W OVHcloud KMS wyeksportuj klucz serwisowy opakowany tym kluczem transportowym. Klucz musi zostać utworzony lub zaimportowany z
extractableustawionym natrue. Następnie, gdy to możliwe, ustawextractablenafalse. - Przenieś ciphertext do miejsca docelowego i rozpakuj go prywatnym kluczem transportowym miejsca docelowego.
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 w tej samej domenie OKMS z użyciem wrapKey. Aby wyeksportować klucz przechowywany w HSM, zobacz Użycie BYOK z kluczami HSM. 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).
Zapisz zwrócone id klucza jako wrappingKeyId.
Włączenie wyodrębniania
Eksportowany klucz musi być możliwy do wyodrębnienia, a decyzja o tym zapada podczas tworzenia lub importu klucza. Później extractable można zmienić tylko z true na false: po ustawieniu na false nie można go już nigdy przywrócić do true. Klucza utworzonego lub zaimportowanego bez extractable ustawionego na true nie będzie więc nigdy można wyeksportować. Ta reguła dotyczy zarówno kluczy SOFTWARE, jak i kluczy HSM.
Włączenie wyodrębniania zmniejsza granicę ochrony klucza, a klucz utworzony z extractable ustawionym na true ma trwale ustawione never_extractable na false. Twórz klucz możliwy do wyodrębnienia tylko wtedy, gdy planujesz jego migrację.
Ustaw extractable na true podczas tworzenia klucza:
W przypadku importu ustaw "extractable": true w treści żądania (API REST), dodaj --extractable (CLI OKMS) lub przekaż okms.WithExtractable(true) (SDK Go).
Gdy klucz nie musi już być eksportowany, na przykład po udanym eksporcie opakowanym (patrz sekcja Eksport klucza opakowanego kluczem transportowym), wyłącz wyodrębnianie. Tej operacji nie można cofnąć. Akcja IAM: okms:apikms:serviceKey/update.
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.
Akcje IAM: okms:apikms:serviceKey/get na eksportowanym kluczu oraz okms:apikms:serviceKey/wrapKey na kluczu transportowym.
Przykładowa odpowiedź:
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ą
wrappedKeysjak w Import opakowanego klucza, używając identyfikatora klucza transportowego tej domeny jakowrappingKeyId. - 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.
Użycie BYOK z kluczami HSM
Przy poziomie ochrony HSM materiał klucza jest opakowywany i rozpakowywany wewnątrz HSM: nigdy nie pojawia się w postaci jawnej w OVHcloud KMS. Format JWE jest taki sam jak dla kluczy SOFTWARE (RSA-OAEP lub RSA-OAEP-256 z A256GCM).
Poziom ochrony HSM nie jest dostępny we wszystkich regionach. Aby sprawdzić jego dostępność w regionie swojej domeny OKMS, zapoznaj się z listą protectionLevel zwracaną dla tego regionu przez następujące wywołanie API:
Klucz transportowy musi być przechowywany w HSM zawsze wtedy, gdy przechowywany jest w nim importowany lub eksportowany klucz, co podsumowuje poniższa tabela:
Opisane poniżej operacje importu do HSM są przedstawione wyłącznie dla API REST.
Utworzenie klucza transportowego HSM
Aby zaimportować klucz do HSM, utwórz klucz transportowy z poziomem ochrony HSM:
Następnie wyeksportuj jego klucz publiczny i opakuj materiał klucza w źródle, jak opisano w sekcjach Pobranie publicznego klucza transportowego i Opakowanie materiału klucza źródłowego.
Import klucza do HSM
Ponieważ HSM nigdy nie ujawnia rozpakowanego materiału, OVHcloud KMS nie może wywnioskować typu klucza. Żądanie importu różni się od importu SOFTWARE:
- Ustaw
protectionLevelnaHSM. Klucz transportowy również musi być kluczemHSM. - Zadeklaruj
type:oct,RSAlubEC. Nie ustawiajsizeanicurvedlaRSAiEC: HSM odczytuje je z klucza. Dlaoctparametrsizejest opcjonalny (128,192lub256). - Nie ustawiaj
keyFormatTypewwrappedKeys. Tekst jawny opakowany w JWE musi zawierać surowe bajty klucza w przypadku kluczaoctoraz klucz prywatny w formacie PKCS#8 (DER) w przypadku kluczaRSAlubEC. - Obsługiwane klucze: AES
128,192lub256bitów, RSA2048,3072lub4096bitów, ECP-256,P-384lubP-521. Samego klucza publicznego nie można zaimportować do HSM w postaci opakowanej; możliwy jest tylko import w postaci jawnej.
Klucz transportowy HSM może również rozpakować klucz SOFTWARE: w takim przypadku postępuj zgodnie z sekcją Import opakowanego klucza, podając keyFormatType.
Eksport klucza z HSM
Z HSM można eksportować tylko klucze symetryczne (oct): HSM nigdy nie udostępnia kluczy prywatnych RSA ani EC. Podobnie jak w przypadku klucza SOFTWARE, klucz musi zostać utworzony lub zaimportowany z extractable ustawionym na true, czego nie można włączyć później (zobacz Włączenie wyodrębniania).
Klucz transportowy musi być przechowywany w HSM. Zaimportuj publiczny klucz transportowy miejsca docelowego z poziomem ochrony HSM:
Następnie wyeksportuj klucz, ustawiając wrappedKeyFormat na RAW: HSM zawsze opakowuje surowe bajty klucza, więc odszyfrowana zawartość JWE to sam klucz AES (32 bajty w przypadku klucza 256-bitowego).
W miejscu docelowym odszyfruj JWE prywatnym kluczem transportowym, jak opisano w sekcji Rozpakowanie ciphertextu w miejscu docelowym.
Przykład end-to-end w Go
Poniższe przykłady przeprowadzają obie ceremonie z parą kluczy RSA, używając SDK Go do wywołań OVHcloud KMS oraz go-jose do operacji JWE wykonywanych poza OVHcloud KMS. Oba przykłady kodują materiał klucza w formacie PKCS#8 (DER), co odpowiada wartości PKCS8 pola keyFormatType.
Import klucza wygenerowanego lokalnie
Program generuje klucz za pomocą standardowej biblioteki Go, opakowuje go lokalnie publicznym kluczem transportowym, a następnie go importuje. Klucz nigdy nie trafia do OVHcloud KMS w postaci jawnej.
Algorytm szyfrowania treści JWE (enc) musi mieć wartość A256GCM.
Eksport klucza i odszyfrowanie JWE
Miejsce docelowe (tutaj lokalny program) generuje parę kluczy transportowych, importuje do OVHcloud KMS tylko jej część publiczną, a następnie odszyfrowuje wyeksportowany JWE częścią prywatną.
Sprawdź również
Korzystanie z OVHcloud Key Management Service (KMS)
Pierwsze kroki z OVHcloud Key Management Service (KMS)
Dołącz do grona naszych użytkowników.