Importar una versión de clave en Cloud KMS

En esta guía se explica cómo importar una clave criptográfica en Cloud HSM o Cloud Key Management Service como una nueva versión de la clave.

Para obtener más información sobre la importación de claves, incluidas las limitaciones y restricciones, consulta el artículo sobre la importación de claves.

Puedes completar los pasos de esta guía en un plazo de entre 5 y 10 minutos, sin incluir los pasos de la sección Antes de empezar. Encapsular la clave manualmente añade complejidad a la tarea.

Antes de empezar

Te recomendamos que crees un proyecto para probar esta función, de modo que te resulte más fácil eliminarlo después de las pruebas y que tengas los permisos de gestión de identidades y accesos (IAM) adecuados para importar una clave.

Antes de importar una clave, debes preparar el proyecto, el sistema local y la propia clave.

Preparar el proyecto

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the required API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. Install the Google Cloud CLI.

  6. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

  7. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the required API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  11. Install the Google Cloud CLI.

  12. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

  13. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  14. El usuario que realice la importación debe tener los siguientes permisos de gestión de identidades y accesos para crear conjuntos de claves, claves y trabajos de importación. Si el usuario no es el propietario del proyecto, puedes asignarle ambos roles predefinidos:

    • roles/editor
    • roles/cloudkms.importer

    Para obtener más información sobre los roles y permisos de gestión de identidades y accesos disponibles en Cloud KMS, consulta Permisos y roles.

  15. Preparar el sistema local

    Prepara el sistema local eligiendo una de las siguientes opciones. Se recomienda la envoltura automática de claves para la mayoría de los usuarios.

    Preparar 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 el cifrado simétrico, el cifrado asimétrico o la firma asimétrica, así como de si la clave se almacena en software o en un HSM. Especifica el algoritmo de la clave como parte de la solicitud de importación.

    Por otro lado, también debes verificar cómo se codifica la clave y hacer los ajustes necesarios.

    No se puede cambiar lo siguiente en una versión de clave después de crearla o importarla:

    • El nivel de protección indica si la clave se conserva en el software, en un HSM multiinquilino, en un HSM de un solo inquilino o en un sistema de gestió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 una clave tienen el mismo nivel de protección.

    • El propósito indica si las versiones de la clave se usan para el cifrado simétrico, el cifrado asimétrico o la firma asimétrica. La finalidad de la clave limita los algoritmos que se pueden usar para crear versiones de esa clave. Todas las versiones de una clave tienen el mismo propósito.

    Si no tienes ninguna clave para importar, pero quieres validar el procedimiento para importar 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 hacer pruebas. Es posible que una clave creada de esta forma no sea adecuada para usarla en producción.

    Si necesitas envolver la clave manualmente, hazlo antes de continuar con los procedimientos de esta guía.

    Crear la clave de destino y el conjunto de claves

    Una clave de Cloud KMS es un objeto contenedor que contiene cero o más versiones de clave. Cada versión de la clave contiene una clave criptográfica.

    Cuando importas una clave en Cloud KMS o Cloud HSM, la clave importada se convierte en una nueva versión de una clave de Cloud KMS o Cloud HSM. En el resto de esta guía, esta clave se denomina clave de destino. La clave de destino debe existir para poder importar material de clave en ella.

    Importar una versión de una clave no afecta a las versiones que ya tenga esa clave. Sin embargo, se recomienda crear una clave vacía al probar la importación de claves. Una clave vacía no tiene versión, no está activa y no se puede usar.

    También puedes especificar que la clave que has creado solo pueda contener versiones importadas, lo que evita que se generen versiones nuevas por error en Cloud KMS.

    Una clave existe en un conjunto de claves. En esta guía, este conjunto de claves se denomina conjunto de claves de destino. La ubicación del conjunto de claves de destino determina la ubicación en la que estará disponible el material de clave después de la importación. Las claves de Cloud HSM no se pueden crear ni importar en algunas ubicaciones. Una vez creada una clave, no se puede mover a otro llavero ni a otra ubicación.

    Sigue estos pasos para crear una clave vacía en un nuevo conjunto de claves con la CLI de Google Cloud o la consola. Google Cloud

    Consola

    1. En la consola de Google Cloud , ve a la página Gestión de claves.

      Ir a Administración de claves

    2. Haz clic en Crear conjunto de claves.

    3. En el campo Nombre del conjunto de claves, introduce el nombre del conjunto de claves.

    4. En Tipo de ubicación, seleccione un tipo de ubicación y una ubicación.

    5. Haz clic en Crear. Se abrirá la página Crear clave.

    6. En el campo Nombre de la clave, introduce el nombre de la clave.

    7. En Nivel de protección, selecciona Software, HSM o HSM de un solo arrendatario.

    8. Si has seleccionado HSM de único propietario, selecciona la instancia de HSM de único propietario en la que quieras crear la clave.

    9. En Material de clave, selecciona Clave importada y, a continuación, haz clic en Continuar. De esta forma, se evita que se cree una versión inicial de la clave.

    10. Define el Propósito y el Algoritmo de la clave y, a continuación, haz clic en Continuar.

    11. Opcional: Si quieres que esta clave contenga solo versiones de claves importadas, selecciona Restringir versiones de claves a importación únicamente. De esta forma, evitarás crear por error nuevas versiones de claves en Cloud KMS.

    12. Opcional: En el caso de las claves importadas, la rotación automática está inhabilitada de forma predeterminada. Para habilitar la rotación automática, selecciona un valor en el campo Periodo de rotación de claves.

      Si habilitas la rotación automática, se generarán nuevas versiones de la clave en Cloud KMS y la versión de la clave importada dejará de ser la versión predeterminada después de una rotación.

    13. Haz clic en Crear.

    gcloud

    Para usar Cloud KMS en la línea de comandos, primero debes instalar o actualizar a la versión más reciente de la CLI de Google Cloud.

    1. Crea el conjunto de claves de destino. Elige una ubicación que sea compatible con el nivel de protección que quieras usar. Para obtener más información sobre las ubicaciones admitidas, consulta Ubicaciones de Cloud KMS.

      gcloud kms keyrings create KEY_RING \
        --location LOCATION
      

      Más información sobre cómo crear conjuntos de claves

    2. Crea la clave de destino con el comando kms keys create y la marca --skip-initial-version-creation. De esta forma, se crea una clave sin versión inicial, por lo que el material de clave importado tendrá la versión 1. Usa la marca --import-only para evitar que Cloud KMS genere material de claves para las nuevas versiones de las claves. Si se define esta marca, se deben importar las nuevas versiones de la clave. Las claves creadas como --import-only deben rotarse manualmente.

      gcloud kms keys create KEY_NAME \
        --location LOCATION \
        --keyring KEY_RING \
        --purpose PURPOSE \
        --protection-level PROTECTION_LEVEL \
        --skip-initial-version-creation \
        --import-only
      

      Haz los cambios siguientes:

      • KEY_NAME: el nombre que quieras usar para la clave.
      • LOCATION: la ubicación del conjunto de claves.
      • KEY_RING: el conjunto de claves en el que quieres crear la clave.
      • PURPOSE: el propósito que quieres usar para la clave.
      • PROTECTION_LEVEL: el nivel de protección que quieras usar para la clave (por ejemplo, HSM).

      Para crear una clave de Cloud HSM de un solo inquilino, añade la marca --cryptoKeyBackend a este comando y añade el identificador de recurso de la instancia de Cloud HSM de un solo inquilino en la que quieras importar la clave:

      --crypto-key-backend="projects/INSTANCE_PROJECT/locations/LOCATION/singleTenantHsmInstances/INSTANCE_NAME"

    Go

    Para ejecutar este código, primero debes configurar un entorno de desarrollo de Go e instalar el SDK de Go de Cloud KMS.

    import (
    	"context"
    	"fmt"
    	"io"
    
    	kms "cloud.google.com/go/kms/apiv1"
    	"cloud.google.com/go/kms/apiv1/kmspb"
    )
    
    // createKeyForImport creates a new asymmetric signing key in Cloud HSM.
    func createKeyForImport(w io.Writer, parent, id string) error {
    	// parent := "projects/my-project/locations/us-east1/keyRings/my-key-ring"
    	// id := "my-imported-key"
    
    	// Create the client.
    	ctx := context.Background()
    	client, err := kms.NewKeyManagementClient(ctx)
    	if err != nil {
    		return fmt.Errorf("failed to create kms client: %w", err)
    	}
    	defer client.Close()
    
    	// Build the request.
    	req := &kmspb.CreateCryptoKeyRequest{
    		Parent:      parent,
    		CryptoKeyId: id,
    		CryptoKey: &kmspb.CryptoKey{