Importar y exportar claves en OVHcloud KMS con BYOK
Descubra cómo importar y exportar de forma segura material de clave cifrado con OVHcloud KMS mediante el encapsulado de clave RSA asimétrico (BYOK)
Objetivo
Bring Your Own Key (BYOK) le permite importar y exportar material de clave criptográfico con OVHcloud Key Management Service (KMS) sin enviarlo en claro. Un par de claves RSA de transporte protege el material en tránsito: la clave pública lo encapsula y solo el titular de la clave privada puede desencapsularlo.
Esta guía le explica cómo importar y exportar una clave con OVHcloud KMS utilizando el encapsulado de clave RSA asimétrico (BYOK).
El BYOK a través de KMIP aún no está disponible. Esta guía cubre únicamente la API REST regional, la CLI OKMS y el SDK Go.
Las claves con el nivel de protección HSM siguen reglas adicionales, tanto como claves de transporte como clave importada o exportada. Consulte Utilizar el BYOK con claves HSM.
Requisitos
- Disponer de una cuenta de cliente de OVHcloud.
- Haber contratado un KMS de OVHcloud.
- Haber configurado un método de autenticación para el plano de datos OKMS (token de acceso personal, cuenta de servicio o certificado de acceso).
- Poder aplicar una política IAM en su dominio OKMS; las acciones BYOK necesarias se enumeran en Configurar IAM para el BYOK.
- Opcional: la CLI OKMS (versión 0.6.0 o superior) o el SDK Go instalados para los ejemplos en pestañas.
Procedimiento
Comprender la ceremonia de encapsulado RSA
La ceremonia implica dos entornos y un operador:
- Destino (Dst): su dominio OKMS, donde se almacenará la clave importada.
- Origen (Src): el sistema que actualmente posee el material de clave (otro KMS, una aplicación o una herramienta como OpenSSL).
- Operator: la entidad que dispone de los permisos necesarios para acceder tanto al dominio OKMS como al origen de la clave que se va a importar. Puede ser una persona que utiliza el CLI OKMS o un servicio que actúa a través de la API.
- Genere un par de claves RSA de transporte en el KMS de OVHcloud con las operaciones
wrapKeyyunwrapKey. - Exporte la clave de transporte pública desde el KMS de OVHcloud.
- Importe la clave de transporte pública en el entorno de origen.
- En el origen, exporte el material de clave encapsulado (cifrado) con la clave de transporte utilizando
RSA-OAEPoRSA-OAEP-256. - En el destino, importe la clave encapsulada con
POST /api/{okmsId}/v1/servicekeyy una carga útilwrappedKeys. El KMS desencapsula el ciphertext con la clave de transporte privada y almacena la clave de servicio resultante.
Las claves así importadas tienen never_extractable definido en false, porque el material existía fuera del KMS antes de la importación. Para extraer posteriormente una clave en forma encapsulada, impórtela con extractable en true (no puede activarse después) y siga Exportar una clave encapsulada. Consulte Atributos de sensibilidad de las claves de servicio para la lista completa de atributos.
Para seguir esta guía necesita dos valores de su dominio OKMS: su endpoint regional y su okmsId. Las llamadas a la API REST incluyen ambos en la URL, mientras que el CLI OKMS y el SDK Go los leen de su configuración. Ambos se obtienen mediante la siguiente llamada a la API:
También aparecen en la pestaña Información general del .
Prefiera esta ceremonia a la importación de clave en claro siempre que la clave deba seguir siendo de confianza durante el tránsito.
Configurar IAM para el BYOK
Aplique una política sobre el recurso de su dominio OKMS. Su URN se muestra en la pestaña Información general del . Sustituya <identity_urn> y <okms_urn> por sus valores. Cree las políticas a través del área de cliente de OVHcloud o de la API de OVHcloud.
Importación BYOK — leer, crear o importar claves de servicio y desencapsular con una clave de transporte:
Exportación BYOK — importar una clave de transporte pública, actualizar la extraibilidad y encapsular una clave para la exportación:
Para la importación, serviceKey/unwrapKey debe estar autorizado sobre la clave de transporte RSA referenciada por wrappingKeyId. Para la exportación, importe primero la clave de transporte pública de destino (create / import), luego autorice serviceKey/wrapKey sobre esa clave de transporte y serviceKey/get sobre la clave exportada. serviceKey/update es necesario para definir extractable en false después de la exportación.
Crear la clave de transporte RSA en el KMS de destino
Cree una clave RSA dedicada al encapsulado. Para la ceremonia de importación, defina tanto wrapKey como unwrapKey en esta clave; son mutuamente excluyentes con sign y verify.
Tamaños de clave RSA admitidos: 2048, 3072 o 4096 bits.
SOFTWARE es el nivel de protección por defecto, por lo que no es necesario indicarlo.
Conserve el id de la clave devuelta: lo necesitará como wrappingKeyId durante la importación.
Obtener la clave de transporte pública
Exporte la parte pública de la clave de transporte y proporciónela al entorno de origen. No comparta nunca la clave privada: permanece dentro del KMS de destino.
La respuesta incluye el material de clave pública en el array keys (JWK).
Encapsular el material de clave de origen
En el entorno de origen, cifre el material de clave con la clave RSA pública de destino.
Este paso se realiza fuera de OVHcloud KMS: utilice una biblioteca JOSE en el entorno de origen.
Algoritmos de encapsulado admitidos (RFC 7518):
keyFormatType describe el formato del material de clave en claro antes del encapsulado y después del desencapsulado. El ciphertext es siempre una cadena JWE Compact Serialization (el algoritmo de encapsulado va en el encabezado JWE).
Tras el encapsulado con la clave pública de destino, envíe el ciphertext JWE Compact Serialization resultante en la solicitud de importación. Para un ejemplo en Go de este paso de encapsulado, consulte Ejemplo de extremo a extremo en Go.
Importar la clave encapsulada
Llame a POST /api/{okmsId}/v1/servicekey con un array wrappedKeys en lugar de keys en claro.
Cada entrada de wrappedKeys:
Puede importar una clave solo pública (class se convierte en PUBLIC_KEY) o una clave privada (el KMS reconstruye la parte pública; class se convierte en KEY_PAIR). El material simétrico se almacena como SECRET_KEY.
Acciones IAM en esta llamada: okms:apikms:serviceKey/create, okms:apikms:serviceKey/import, y okms:apikms:serviceKey/unwrapKey sobre la clave de transporte.
Valores de keyFormatType: RAW, JWK, PKCS1 o PKCS8.
Verificar la clave importada
Confirme que la clave existe y corresponde al tipo y a las operaciones esperados.
Verifique que:
- el
statede la clave esactive(o actívela si su flujo de trabajo lo exige). type,sizeyoperationscoinciden con lo esperado.- los atributos de sensibilidad bajo
attributesreflejan una clave importada (never_extractablevalefalse).
A continuación puede utilizar la clave para encrypt, decrypt, sign o verify, como se documenta en Utilizar su OVHcloud Key Management Service (KMS).
Exportar una clave encapsulada
La exportación segura es la inversa de la importación: OVHcloud KMS cifra el material de clave con una clave de transporte RSA y solo devuelve un ciphertext JWE. La clave de transporte privada debe residir en el entorno de destino — aquí el sistema externo que recibe la clave, no OVHcloud KMS — para que solo ese entorno pueda desencapsular el material.
Comprender la ceremonia de exportación
- Genere un par de claves RSA de transporte en el entorno de destino (otro KMS o una herramienta que recibirá la clave).
- Importe la clave de transporte pública de destino en OVHcloud KMS con la operación
wrapKey. Esta clave es elwrappingKeyIdutilizado en el momento de la exportación. - En OVHcloud KMS, exporte la clave de servicio encapsulada por esta clave de transporte. La clave debe haberse creado o importado con
extractableentrue. Defina despuésextractableenfalsecuando sea posible. - Transfiera el ciphertext al destino y desencapsúlelo con la clave de transporte privada de destino.
No genere el par de claves de transporte de exportación en OVHcloud KMS. Si la clave de transporte privada permaneciera en OVHcloud KMS, el destino no podría desencapsular el ciphertext. Solo la parte pública se importa en OVHcloud KMS para el encapsulado.
La clave de transporte referenciada por wrappingKeyId debe ser una clave RSA en el mismo dominio OKMS, con el uso wrapKey. Para exportar una clave almacenada en el HSM, consulte Utilizar el BYOK con claves HSM. Las claves sensibles (material AES/oct y RSA/EC privado) solo pueden extraerse después del encapsulado: la extracción en claro no está admitida para estas claves.
Importar la clave de transporte pública de destino en OVHcloud KMS
Registre la clave pública de destino para que OVHcloud KMS pueda encapsular con ella la clave exportada. Impórtela como clave RSA solo pública con wrapKey (sin material privado).
Conserve el id de la clave devuelta como wrappingKeyId.
Activar la extracción
La clave que exporta debe ser extraíble, y esto se decide al crear o importar la clave. Después, extractable solo puede cambiar de true a false: una vez definido en false, nunca puede volver a definirse en true. Por lo tanto, una clave creada o importada sin extractable en true nunca podrá exportarse. Esta regla se aplica tanto a las claves SOFTWARE como a las claves HSM.
Activar la extracción reduce la frontera de protección de la clave, y una clave creada con extractable en true tiene never_extractable definido en false de forma permanente. Cree una clave extraíble solo si tiene previsto migrarla.
Defina extractable en true al crear la clave:
Para una importación, defina "extractable": true en el cuerpo de la solicitud (API REST), añada --extractable (CLI OKMS) o pase okms.WithExtractable(true) (SDK Go).
Cuando la clave ya no necesite exportarse, por ejemplo tras una exportación encapsulada correcta (consulte Exportar la clave encapsulada por la clave de transporte), desactive la extracción. Esta operación es irreversible. Acción IAM: okms:apikms:serviceKey/update.
Exportar la clave encapsulada por la clave de transporte
Llame a GET /api/{okmsId}/v1/servicekey/{keyId} con los parámetros de consulta de encapsulado siguientes. Cuando estos parámetros están presentes, la API devuelve wrappedKeys en lugar de keys en claro.
Acciones IAM: okms:apikms:serviceKey/get sobre la clave exportada, y okms:apikms:serviceKey/wrapKey sobre la clave de transporte.
Ejemplo de respuesta:
Desencapsular el ciphertext en el destino
Transfiera el ciphertext al entorno de destino. Desencapsúlelo con la clave de transporte privada de destino (la contraparte de la clave pública que importó en OVHcloud KMS).
- Si el destino es otro dominio OKMS, importe allí el material encapsulado con
wrappedKeyscomo en Importar la clave encapsulada, utilizando el identificador de la clave de transporte de ese dominio comowrappingKeyId. - Si el destino es un sistema externo, utilice su API nativa de desencapsulado / importación con la clave de transporte privada y el mismo
keyFormatType/ algoritmo de encapsulado que durante la exportación.
Utilizar el BYOK con claves HSM
Con el nivel de protección HSM, el material de clave se encapsula y desencapsula dentro del HSM: nunca aparece en claro en OVHcloud KMS. El formato JWE es el mismo que para las claves SOFTWARE (RSA-OAEP o RSA-OAEP-256 con A256GCM).
El nivel de protección HSM no está disponible en todas las regiones. Para comprobar su disponibilidad en la región de su dominio OKMS, consulte la lista protectionLevel devuelta para esa región por la siguiente llamada a la API:
La clave de transporte debe estar almacenada en el HSM siempre que la clave importada o exportada esté almacenada en él, como resume la tabla siguiente:
Las importaciones en el HSM descritas a continuación solo se presentan con la API REST.
Crear una clave de transporte HSM
Para importar una clave en el HSM, cree la clave de transporte con el nivel de protección HSM:
A continuación, exporte su clave pública y encapsule el material de clave en el origen, como se describe en Obtener la clave de transporte pública y Encapsular el material de clave de origen.
Importar una clave en el HSM
Como el HSM nunca expone el material desencapsulado, OVHcloud KMS no puede deducir el tipo de clave. La solicitud de importación difiere de la de una importación SOFTWARE:
- Defina
protectionLevelenHSM. La clave de transporte también debe ser una claveHSM. - Declare
type:oct,RSAoEC. No definasizenicurveparaRSAyEC: el HSM los lee a partir de la clave. Paraoct,sizees opcional (128,192o256). - No defina
keyFormatTypeenwrappedKeys. El texto en claro encapsulado en el JWE debe corresponder a los bytes en bruto de la clave para una claveoct, y a la clave privada en PKCS#8 (DER) para una claveRSAoEC. - Claves admitidas: AES de
128,192o256bits, RSA de2048,3072o4096bits, ECP-256,P-384oP-521. Una clave pública sola no puede importarse encapsulada en el HSM: solo es posible la importación en claro.
Una clave de transporte HSM también puede desencapsular una clave SOFTWARE: en ese caso, siga Importar la clave encapsulada con keyFormatType.
Exportar una clave desde el HSM
Solo las claves simétricas (oct) pueden exportarse desde el HSM: el HSM nunca libera las claves privadas RSA o EC. Al igual que con una clave SOFTWARE, la clave debe haberse creado o importado con extractable en true, lo que no puede activarse después (consulte Activar la extracción).
La clave de transporte debe estar almacenada en el HSM. Importe la clave de transporte pública de destino con el nivel de protección HSM:
A continuación, exporte la clave definiendo wrappedKeyFormat en RAW: el HSM siempre encapsula los bytes en bruto de la clave, por lo que la carga útil del JWE descifrado es la propia clave AES (32 bytes para una clave de 256 bits).
En el destino, descifre el JWE con la clave de transporte privada, como se describe en Desencapsular el ciphertext en el destino.
Ejemplo de extremo a extremo en Go
Los siguientes ejemplos realizan ambas ceremonias con un par de claves RSA, utilizando el SDK Go para las llamadas a OVHcloud KMS y go-jose para las operaciones JWE realizadas fuera de OVHcloud KMS. Ambos ejemplos codifican el material de clave en PKCS#8 (DER), lo que corresponde al valor PKCS8 de keyFormatType.
Importar una clave generada localmente
El programa genera la clave con la biblioteca estándar de Go, la encapsula localmente con la clave de transporte pública y luego la importa. El material de clave nunca se envía en claro a OVHcloud KMS.
El algoritmo de cifrado del contenido JWE (enc) debe ser A256GCM.
Exportar una clave y descifrar el JWE
El destino (en este caso, el programa local) genera el par de claves de transporte, importa únicamente su parte pública en OVHcloud KMS y, a continuación, descifra, con la parte privada, el JWE exportado.
Más información
Utilizar su OVHcloud Key Management Service (KMS)
Métodos de autenticación de OKMS
Primeros pasos con OVHcloud Key Management Service (KMS)
Interactúe con nuestra comunidad de usuarios.