En este tema, se muestra cómo importar una clave criptográfica a Cloud HSM o Cloud Key Management Service.
Para obtener más detalles sobre la importación de claves, incluidas las limitaciones y restricciones, consulta Importa claves.
Puedes completar los pasos en este tema en 5 a 10 minutos, sin incluir los pasos de Antes de comenzar. Unir la clave de forma manual agrega complejidad a la tarea.
Antes de comenzar
Se recomienda que crees un proyecto nuevo para probar esta función, a fin de facilitar la limpieza después de realizar las pruebas y asegurarte de que tengas permisos de IAM adecuados para importar una clave.
Antes de importar una clave, debes preparar el proyecto, el sistema local y la clave en sí misma.
Prepara el proyecto
- Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
-
En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Descubre cómo confirmar que tienes habilitada la facturación en un proyecto.
- Habilita la API necesaria.
- Instala e inicializa el SDK de Cloud.
-
El usuario que realiza la importación necesita los siguientes permisos de IAM para crear claves, llaveros de claves y trabajos de importación. Si el usuario no es el propietario del proyecto, puedes asignar ambas funciones predefinidas:
roles/editor
roles/cloudkms.importer
Para obtener más información sobre las funciones de IAM y los permisos disponibles para Cloud KMS, consulta Permisos y funciones.
Prepara el sistema local
Para preparar el sistema local, elige una de las siguientes opciones. Se recomienda la unión automática de claves para la mayoría de los usuarios.
- Si deseas permitir que la herramienta de línea de comandos de
gcloud
una tus claves de forma automática antes de transmitirlas a Google Cloud, debes instalar la biblioteca de criptografía de Pyca en tu sistema local. El trabajo de importación que une y protege la clave de manera local antes de enviarla a Google Cloud usa la biblioteca de Pyca. - Si deseas unir tus claves de forma manual, debes configurar OpenSSL para la unión manual de claves.
Prepara la clave
Verifica que el algoritmo y la longitud de tu clave sean compatibles. Los algoritmos permitidos para una clave dependen de si la clave se usa para la encriptación simétrica, la encriptación asimétrica o la firma asimétrica, así como si la clave se almacena en el software o en un HSM. Especifica el algoritmo de la clave como parte de la solicitud de importación.
Por separado, también debes verificar cómo se codifica la clave y hacer los ajustes necesarios.
Lo siguiente no se puede cambiar en una versión de clave después de su creación o importación:
El nivel de protección de la clave indica si la clave persiste en el software, en un HSM o en un sistema de administración de claves externo. El material de claves no se puede mover de uno de estos entornos de almacenamiento a otro. Todas las versiones de clave tienen el mismo nivel de protección.
El propósito de la clave indica si las versiones de la clave se usan para la encriptación simétrica, la encriptación asimétrica o la firma asimétrica. El propósito de una clave limita los algoritmos posibles que se pueden usar para crear versiones de esa clave. Todas las versiones de clave tienen el mismo propósito.
Si no tienes una clave que desees importar, pero quieres validar el procedimiento de importación de claves, puedes crear una clave simétrica en el sistema local con el siguiente comando:
openssl rand 32 > ${HOME}/test.bin
Usa esta clave solo para pruebas. Es posible que una clave creada de esta manera no sea adecuada para el uso en la producción.
Si necesitas unir la clave manualmente, hazlo antes de continuar con los procedimientos de este tema.
Crea el llavero de claves y la clave de destino
Una clave de Cloud KMS es un objeto de contenedor que contiene cero o más versiones de claves. Cada versión de clave contiene una clave criptográfica.
Cuando importas una clave a Cloud KMS o Cloud HSM, la clave importada se convierte en una versión de clave nueva en una clave Cloud KMS o Cloud HSM existente. En el resto del tema, esta clave se denomina clave de destino. La clave de destino debe existir antes de que puedas importar material de clave a ella.
Importar una versión de clave no tiene ningún efecto en las versiones existentes de esa clave. Sin embargo, se recomienda crear una clave vacía cuando pruebes la importación de claves. Una clave vacía no tiene una versión, no está activa y no se puede usar.
La clave existe en un llavero de claves. En este tema, este llavero de claves se denomina llavero de claves de destino. La ubicación del llavero de claves de destino determina la ubicación en la que el material de clave está disponible después de la importación. Las claves de Cloud HSM no se pueden crear ni importar en algunas ubicaciones. Después de crear una clave, no se puede mover a una ubicación o ubicación de la clave diferente.
Sigue estos pasos para crear una clave vacía en un llavero de claves nuevo mediante la herramienta de línea de comandos de gcloud
o Google Cloud Console.
IU web
Ve a la página Claves criptográficas en Cloud Console.
Haz clic en Crear llavero de claves.
En el campo Nombre del llavero de claves, ingresa el nombre de tu llavero de claves.
Selecciona una ubicación en el menú desplegable Ubicación.
Haga clic en Crear. Se abrirá la página de detalles del llavero de claves.
Haz clic en Crear clave.
Selecciona Clave importada. Esto evita que se cree una versión inicial de la clave.
Ingresa el nombre en el campo Nombre de la clave.
Establece el Nivel de protección como Software o HSM.
[Opcional] Para las claves importadas, la rotación automática está inhabilitada de forma predeterminada. Si habilitas la rotación automática, las versiones de clave nuevas se generarán en Cloud KMS, y la versión de clave importada ya no será la versión de clave predeterminada después de una rotación.
[De manera opcional, si deseas agregar etiquetas a tu clave][4], haz clic en Agregar etiqueta en el campo Etiquetas.
Haga clic en Crear.
Línea de comandos
Para usar Cloud KMS en la línea de comandos, primero Instala o actualiza a la versión más reciente del SDK de Cloud.
Crea el llavero de claves de destino. Si pretendes importar a una clave de Cloud HSM, selecciona una ubicación que admita Cloud HSM.
gcloud kms keyrings create key-ring-name \ --location location
Obtén más información sobre cómo crear llaveros de claves.
Crea la clave de destino.
- Establece el propósito de la clave:
- Para una clave simétrica, establece el propósito como
encryption
. - Para una clave asimétrica, configura el propósito como
asymmetric-signing
oasymmetric-encryption
.
- Para una clave simétrica, establece el propósito como
- Evita que se cree una versión inicial con la marca
--skip-initial-version-creation
. - Opcional: No especifiques una política de rotación. Si habilitas la rotación automática, las versiones de claves nuevas se generarán en Cloud KMS, y la versión de clave importada ya no será la versión de clave predeterminada después de una rotación.
gcloud kms keys create key-name \ --location location \ --keyring key-ring-name \ --purpose purpose \ --skip-initial-version-creation
Puedes obtener más información sobre cómo crear claves de Cloud KMS o claves de Cloud HSM.
- Establece el propósito de la clave:
Python
Para ejecutar este código, primero configura un entorno de desarrollo de Python y, luego, instala el SDK de Python para Cloud KMS.
API
En estos ejemplos, se usa curl como un cliente HTTP para demostrar el uso de la API. Para obtener más información sobre el control de acceso, consulta Accede a la API de Cloud KMS.
curl "https://cloudkms.googleapis.com/v1/projects/project-id/locations/location-id/keyRings?keyRingId=key-ring-name" \ --request "POST" \ --header "authorization: Bearer token" \ --header "content-type: application/json" \ --header "x-goog-user-project: project-id" \ --data "{}"
Consulta la documentación sobre la API de KeyRing.create
para obtener más información.
curl "https://cloudkms.googleapis.com/v1/projects/project-id/locations/location-id/keyRings/key-ring-name/cryptoKeys?cryptoKeyId=key-name&skipInitialVersionCreation=true" \ --request "POST" \ --header "authorization: Bearer token" \ --header "content-type: application/json" \ --header "x-goog-user-project: project-id" \ --data "{"purpose":"purpose", "versionTemplate":{"protectionLevel":"protection-level","algorithm":"algorithm"}}"
Consulta la documentación sobre la API de CryptoKey.create
para obtener más información.
El llavero de claves y la clave se crearon, pero la clave no contiene material, no tiene versión y no está activa. Luego, crea un trabajo de importación.
Crea el trabajo de importación
Un trabajo de importación define las características de las claves que importa, incluidas las propiedades que no se pueden cambiar una vez que se importa la clave.
El nivel de protección define si las claves que resultan de este trabajo de importación residen en software, en un HSM o en un sistema de administración de claves externo. El nivel de protección no se puede cambiar después de que la clave se importa.
El método de importación define el algoritmo usado para crear la clave de unión que protege las claves importadas durante el tránsito de tu sistema local al proyecto de Google Cloud de destino. Puedes elegir una clave RSA de 3072 bits o 4096 bits. A menos que tengas requisitos específicos, se recomienda la clave de unión de 3072 bits.
Puedes crear un trabajo de importación con la herramienta de gcloud
, Cloud Console o la API de Cloud Key Management Service.
IU web
Ve a la página Claves criptográficas en Cloud Console.
Haz clic en el nombre del llavero de claves de destino.
Configura el Nivel de protección en Software o HSM. Usa el mismo nivel de protección que configuraste para la clave de destino.
Haz clic en Crear trabajo de importación.
En el campo Nombre, ingresa el nombre de tu trabajo de importación.
En el menú desplegable Método de importación, configura el método de importación en RSA de 3072 bits o RSA de 4096 bits.
Haga clic en Crear.
Línea de comandos
Para usar Cloud KMS en la línea de comandos, primero Instala o actualiza a la versión más reciente del SDK de Cloud.
Usa un comando como el siguiente para crear un trabajo de importación.
gcloud kms import-jobs create import-job \ --location location \ --keyring key-ring-name \ --import-method import-method \ --protection-level protection-level
- Usa el mismo llavero de claves y la misma ubicación que usa la clave de destino.
- Establece el nivel de protección en
software
ohsm
. - Configura el método de importación como
rsa-oaep-3072-sha1-aes-256
orsa-oaep-4096-sha1-aes-256
.
Python
Para ejecutar este código, primero configura un entorno de desarrollo de Python y, luego, instala el SDK de Python para Cloud KMS.
API
En estos ejemplos, se usa curl como un cliente HTTP para demostrar el uso de la API. Para obtener más información sobre el control de acceso, consulta Accede a la API de Cloud KMS.
Crea una instancia de la
ImportJob
y especifica los valores para laImportJob.protectionLevel
yImportJob.importMethod
.Llama al método
ImportJob.create
con tu instancia deImportJob
como cuerpo de la solicitud.
Verifica el estado del trabajo de importación
El estado inicial de un trabajo de importación es PENDING_GENERATION
. Cuando el estado es ACTIVE
, puedes usarlo para importar claves.
Un trabajo de importación vence después de tres días. Si el trabajo de importación venció, debes crear uno nuevo.
Puedes comprobar el estado de un trabajo de importación con la herramienta de línea de comandos de gcloud
, Google Cloud Console o la API de Cloud Key Management Service.
IU web
Ve a la página Claves criptográficas en Cloud Console.
Haz clic en el nombre del llavero de claves que contiene tu trabajo de importación.
Haz clic en la pestaña Trabajos de importación en la parte superior de la página.
El estado aparecerá en Estado junto al nombre de tu trabajo de importación.
Línea de comandos
Para usar Cloud KMS en la línea de comandos, primero Instala o actualiza a la versión más reciente del SDK de Cloud.
Cuando un trabajo de importación está activo, puedes usarlo para importar claves. Esto puede tardar unos minutos. Usa este comando para verificar que el trabajo de importación esté activo. Usa la ubicación y el llavero de claves en los que creaste el trabajo de importación.
gcloud kms import-jobs describe import-job \ --location location \ --keyring key-ring-name \ --format="value(state)"
state: ACTIVE
Python
Para ejecutar este código, primero configura un entorno de desarrollo de Python y, luego, instala el SDK de Python para Cloud KMS.
API
En estos ejemplos, se usa curl como un cliente HTTP para demostrar el uso de la API. Para obtener más información sobre el control de acceso, consulta Accede a la API de Cloud KMS.
Llama al método ImportJob.get
y verifica el campo state
. Si state
es PENDING_GENERATION
, el trabajo de importación todavía se está creando.
Vuelve a verificar periódicamente el estado hasta que sea ACTIVE
.
En cuanto el trabajo de importación esté activo, puedes realizar una solicitud para importar una clave.
Evita la modificación de trabajos de importación
El trabajo de importación determina muchas características de la clave importada, incluido el algoritmo de la clave y si una clave importada es una de HSM o de software. Puedes configurar los permisos de administración de identidades y accesos para evitar que los usuarios creen trabajos de importación, mientras permites que usen trabajos de importación para importar claves.
- Otorga solo a los administradores de claves el permiso
importjobs.create
. - Otorga el permiso
importjobs.useToImport
para un trabajo de importación específico al operador que usará ese trabajo a fin de importar claves. - Cuando crees el trabajo de importación, especifica el nivel de protección y el algoritmo para las claves importadas con él.
Hasta que el trabajo de importación caduque, los usuarios que tienen el permiso importjobs.useToImport
y no tienen el permiso importjobs.create
para un trabajo de importación determinado pueden importar claves, pero no pueden modificar las características del trabajo de importación.
Importa la clave
Después de verificar el estado del trabajo de importación, puedes realizar una solicitud de importación.
Usas diferentes marcas para realizar la solicitud de importación, según si deseas que la herramienta de línea de comandos de gcloud
se una a tu clave de forma automática o si ya la uniste de forma manual.
Sin importar si uniste tu clave de forma manual o automática, debes configurar un algoritmo compatible que coincida con la longitud de la clave real que se importará y especifique el propósito de la clave.
Las claves con propósito
ENCRYPT_DECRYPT
usan el algoritmogoogle-symmetric-encryption
y tienen una longitud de 32.Las claves con el propósito
ASYMMETRIC_ENCRYPT
oASYMMETRIC_SIGN
admiten una variedad de algoritmos y longitudes.El propósito de la clave no se puede cambiar después de crearla, pero las versiones de la clave posteriores se pueden crear en longitudes diferentes a la versión inicial.
Importa y une una clave de forma automática
Si deseas usar la unión automática, debes usar la herramienta de línea de comandos de gcloud
.
Usa un comando como el siguiente. Establece --target-key-file
en la ubicación de la clave separada para unir y, luego, importar. No establezcas -rsa-aes-wrapped-key-file
.
De forma opcional, puedes establecer la marca --public-key-file
en la ubicación en la que ya se descargó la clave pública. Cuando importas una gran cantidad de claves, esto evita que la clave pública se descargue durante cada importación. Por ejemplo, podrías escribir una secuencia de comandos que descargue la clave pública una vez y, luego, proporcionar su ubicación cuando importaba cada clave.
gcloud kms keys versions import \ --import-job import-job \ --location location \ --keyring key-ring-name \ --key key-name \ --algorithm algorithm-name \ --target-key-file path-to-unwrapped-key-to-import
La clave de unión asociada al trabajo de importación une la clave, que se transmite a Google Cloud y se importa como una versión de clave nueva en la clave de destino.
Importa una clave unida de forma manual
Sigue las instrucciones de esta sección para importar una clave que uniste manualmente. Configura --rsa-aes-wrapped-key-file
en la ubicación de la clave que uniste manualmente.
No establezcas --target-key-file
.
De forma opcional, puedes establecer la marca --public-key-file
en la ubicación en la que ya se descargó la clave pública. Cuando importas una gran cantidad de claves, esto evita que la clave pública se descargue durante cada importación. Por ejemplo, podrías escribir una secuencia de comandos que descargue la clave pública una vez y, luego, proporcionar su ubicación cuando importaba cada clave.
IU web
Abre la página Claves criptográficas en Cloud Console.
Haz clic en el nombre del llavero de claves que contiene tu trabajo de importación. Se mostrará la clave de destino junto con cualquier otra clave en el llavero de claves.
Haz clic en el nombre de la clave de destino y, luego, en Importar versión de clave.
Selecciona tu trabajo de importación en el menú desplegable Seleccionar trabajo de importación.
En el selector Subir la clave unida (Upload the wrapped key), selecciona la clave que ya uniste.
Si importas una clave asimétrica, selecciona el algoritmo en el menú desplegable Algoritmo. Tu página Importar versión de clave debe ser similar a la que se muestra a continuación:
Haga clic en Import.
Línea de comandos
Para usar Cloud KMS en la línea de comandos, primero Instala o actualiza a la versión más reciente del SDK de Cloud.
Usa un comando como el siguiente.
gcloud kms keys versions import \ --import-job import-job \ --location location \ --keyring key-ring-name \ --key key-name \ --algorithm algorithm-name \ --rsa-aes-wrapped-key-file path-to-wrapped-key-to-import
Para obtener más información, consulta el resultado del comando gcloud kms keys versions import --help
.
Python
Para ejecutar este código, primero configura un entorno de desarrollo de Python y, luego, instala el SDK de Python para Cloud KMS.
API
En estos ejemplos, se usa curl como un cliente HTTP para demostrar el uso de la API. Para obtener más información sobre el control de acceso, consulta Accede a la API de Cloud KMS.
Para el cuerpo de la solicitud del método
cryptoKeyVersions.import
, define el campoalgorithm
como el algoritmo de la clave que se está importando. No es necesario que este valor coincida con laversionTemplate
de laCryptoKey
que está importando esta versión. El campoalgorithm
es del tipoCryptoKeyVersionAlgorithm
.Además, para el cuerpo de la solicitud, establece el campo
wrappedKeyMaterial
en el material de clave que ya uniste.Llama al método
cryptoKeyVersions.import
. La respuestacryptoKeyVersions.import
es del tipoCryptoKeyVersion
. Cuando una clave se importa con éxito, su estado esENABLED
y puedes usarla en Cloud KMS.
Se inicia la solicitud de importación de claves. Puedes supervisar su estado.
Verifica el estado de la clave importada
El estado inicial de una clave importada es PENDING_IMPORT
. Cuando el estado es ENABLED
, la clave se importó correctamente. Si la importación falla, el estado es IMPORT_FAILED
.
Puedes comprobar el estado de una solicitud de importación con la herramienta de línea de comandos de gcloud
, Google Cloud Console o la API de Cloud Key Management Service.
IU web
Abre la página Claves criptográficas en Cloud Console.
Haz clic en el nombre del llavero de claves que contiene tu trabajo de importación.
Haz clic en la pestaña Trabajos de importación en la parte superior de la página.
El estado aparecerá en Estado junto al nombre de tu trabajo de importación.
Línea de comandos
Para usar Cloud KMS en la línea de comandos, primero Instala o actualiza a la versión más reciente del SDK de Cloud.
Usa el comando versions list
para verificar el estado. Usa la misma ubicación, el llavero de claves de destino y la clave de destino que creaste antes en este tema.
gcloud kms keys versions list \ --keyring keyring \ --location location \ --key key-name
Python
Para ejecutar este código, primero configura un entorno de desarrollo de Python y, luego, instala el SDK de Python para Cloud KMS.
API
En estos ejemplos, se usa curl como un cliente HTTP para demostrar el uso de la API. Para obtener más información sobre el control de acceso, consulta Accede a la API de Cloud KMS.
Llama al método ImportJob.get
y verifica el campo state
. Si state
es PENDING_GENERATION
, el trabajo de importación todavía se está creando.
Vuelve a verificar periódicamente el estado hasta que sea ACTIVE
.
Después de importar la clave, su estado cambia a Activa. En el caso de las claves simétricas, debes configurar la versión de la clave importada como la versión principal antes de poder usar la clave.
Claves simétricas: Configura la versión principal
Este paso es obligatorio cuando se importan claves simétricas y no es relevante para claves asimétricas. Una clave asimétrica no tiene una versión primaria. Debes usar la herramienta de línea de comandos de gcloud
para configurar la versión principal.
gcloud kms keys set-primary-version key-name --version=version-number
¿Qué sigue?
- Verifica una clave importada y el material de claves; puedes usar la clave para firmar o proteger datos.
- Solucionar problemas de importación de una clave con errores