Crear y gestionar una instancia de Cloud HSM de un solo inquilino

En esta guía se explica cómo crear, aprovisionar y gestionar una instancia de Cloud HSM de un solo inquilino con la CLI de Google Cloud. Después de crear y aprovisionar la instancia, puedes crear y usar claves en la instancia mediante la Google Cloud consola, la API Cloud Key Management Service, la CLI de gcloud y las bibliotecas de cliente.

Para crear y gestionar tu instancia, necesitas la autenticación por cuórum. Cuando creas una instancia, defines el número de aprobaciones de miembros del quórum que se necesitan para ejecutar operaciones de la instancia. Los miembros del quórum siempre deben tener al menos este número de claves de control disponibles para mantener el control administrativo de tu instancia.

Antes de empezar

  1. Consulta y aplica las prácticas recomendadas de Cloud HSM de un solo inquilino al crear y mantener tu instancia.
  2. Decide con cuántos miembros del quórum quieres empezar. Se pueden añadir miembros adicionales del quórum más adelante, si los miembros del quórum actuales lo aprueban. El número mínimo de miembros del quórum es tres.
  3. Decide cuántos miembros del quórum se necesitan para aprobar las propuestas. No puedes cambiar este número después de crear la instancia. Los miembros del quórum siempre deben tener acceso a este número de claves de control para mantener la instancia. El tamaño mínimo del quórum es de dos. El tamaño del quórum necesario debe ser inferior al número de miembros del quórum.
  4. Decide cómo te asegurarás de que la instancia se actualice a tiempo. Debes monitorizar el disableDate de la instancia y proponer, aprobar y ejecutar una operación de actualización de la instancia antes de la fecha límite para evitar tiempos de inactividad no deseados.
  5. Para obtener los permisos que necesitas para crear, gestionar y usar instancias de HSM de un solo inquilino de Cloud, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en el proyecto o en un recurso principal:

    • Crear propuestas: Proponente de HSM de un solo inquilino de Cloud KMS (cloudkms.hsmSingleTenantProposer)
    • Aprobar propuestas: Miembro de quórum de HSM de un solo inquilino de Cloud KMS (cloudkms.hsmSingleTenantQuorumMember)
    • Ejecutar propuestas: Ejecutor de HSM de un solo inquilino de Cloud KMS (cloudkms.hsmSingleTenantExecutor)
    • Crear claves: Creador de claves de HSM de un solo inquilino de Cloud KMS (roles/cloudkms.hsmSingleTenantKeyCreator)

    Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar acceso a proyectos, carpetas y organizaciones.

    También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.

  6. Genera un par de claves RSA-2048 para la autenticación de dos factores (2FA) para cada miembro del quórum. Te recomendamos que utilices tokens físicos para tus llaves de control. Sigue los estándares de tu organización para crear pares de claves RSA-2048 en tokens físicos.

    Para hacer una demostración, en esta guía se usa OpenSSL para crear tres claves RSA-2048 respaldadas por software:

        openssl genrsa -out rsaprivate1.pem
        openssl genrsa -out rsaprivate2.pem
        openssl genrsa -out rsaprivate3.pem
    
        openssl rsa -in rsaprivate1.pem  -out rsapub1.pem --pubout
        openssl rsa -in rsaprivate2.pem  -out rsapub2.pem --pubout
        openssl rsa -in rsaprivate3.pem  -out rsapub3.pem --pubout
        

    Almacena las claves privadas de forma segura, ya que las necesitas para aprobar propuestas. Ten a mano las claves públicas, ya que las necesitarás para crear la instancia de Cloud HSM de un solo inquilino.

  7. Elige una ubicación de Cloud KMS que admita Cloud HSM de un solo inquilino. Para identificar las ubicaciones compatibles, consulta la lista de ubicaciones de la página Ubicaciones de Cloud KMS. En el filtro Compatibilidad con HSM, selecciona Admite HSM de un solo arrendatario.

Crear y aprovisionar una instancia

Para crear y aprovisionar una instancia de Single-tenant Cloud HSM, debes usar la CLI de gcloud para crear el recurso de instancia, crear una propuesta para registrar tus claves de autenticación y, a continuación, aprobar y ejecutar la propuesta.

Crear la instancia

Este paso debe completarlo un administrador de instancias con el rol Proponente de HSM de un solo inquilino de Cloud KMS.

  1. Configura el proyecto predeterminado.

    gcloud config set project PROJECT_ID
    

    Sustituye PROJECT_ID por el identificador de tu proyecto.

  2. Crea la instancia de Cloud HSM de un solo inquilino.

    gcloud kms single-tenant-hsm create --location=LOCATION \
        --total-approver-count=QUORUM_MEMBER_COUNT \
        --single-tenant-hsm-instance-id=INSTANCE_ID
    

    Haz los cambios siguientes:

    • LOCATION: la ubicación en la que quieres crear tu instancia, por ejemplo, us-central1.
    • QUORUM_MEMBER_COUNT: número total de miembros del quórum. También es el número de claves de control que has creado anteriormente. El valor mínimo es 3. Se pueden añadir claves adicionales más adelante con la aprobación del quórum. Debes tener al menos un miembro más del quórum que el tamaño de quórum necesario para recuperarte después de perder una clave de control.
    • INSTANCE_ID: el identificador que quieras usar para la instancia (por ejemplo, example-sthsm-instance). Puedes omitir la marca --single-tenant-hsm-instance-id para que Cloud HSM asigne un UUID.
  3. Comprueba el estado de la instancia.

    gcloud kms single-tenant-hsm describe INSTANCE_ID \
        --location=LOCATION
    

    Haz los cambios siguientes:

    • INSTANCE_ID: el identificador de tu instancia.
    • LOCATION: la ubicación en la que has creado la instancia.

    Si el estado es PENDING_TWO_FACTOR_AUTH_REGISTRATION, puedes aprovisionar la instancia. Por lo general, se tarda entre 5 y 30 minutos en llegar a este estado.

Aprovisionar la instancia

  1. Crea una propuesta para registrar tus claves de autenticación de dos factores con la operación register_two_factor_auth_keys. Para completar este paso, se necesita el rol Proponente de HSM de un solo inquilino de Cloud KMS. A diferencia de la mayoría de las propuestas, la propuesta register_two_factor_auth_keys requiere retos firmados de todos los miembros del quórum.

        gcloud kms single-tenant-hsm proposal create INSTANCE_ID 
    --single-tenant-hsm-instance-proposal-id PROPOSAL_ID
    --location LOCATION
    --operation-type register_two_factor_auth_keys
    --required-approver-count MEMBERS_REQUIRED_FOR_APPROVAL
    --two-factor-public-key-pems=PUBLIC_KEY_LIST

    Haz los cambios siguientes:

    • INSTANCE_ID: el identificador de tu instancia.
    • PROPOSAL_ID el identificador único que quiere usar en esta propuesta (por ejemplo, set-up-2fa).
    • LOCATION: la ubicación en la que has creado tu instancia.
    • MEMBERS_REQUIRED_FOR_APPROVAL: número de miembros del quórum que deben aprobar una propuesta para que se pueda ejecutar la operación. El valor mínimo es 2. Este valor no se puede cambiar después de aprovisionar la instancia. Los miembros de tu quórum siempre deben tener acceso al menos a este número de claves de control para conservar el control administrativo de la instancia.
    • PUBLIC_KEY_LIST: una lista separada por comas de las rutas a las partes de clave pública de todas tus claves de control. Por ejemplo, rsapub1.pem,rsapub2.pem,rsapub3.pem. El número de claves públicas de esta lista debe coincidir con el valor de QUORUM_MEMBER_COUNT que hayas usado anteriormente.
  2. Consulta el estado de la propuesta y espera a que cambie a PENDING.

      gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \
          --single_tenant_hsm_instance INSTANCE_ID \
          --location LOCATION
      

    Haz los cambios siguientes:

    • INSTANCE_ID: el identificador de su instancia.
    • PROPOSAL_ID el identificador de la propuesta, por ejemplo, set-up-2fa.
    • LOCATION: la ubicación en la que has creado tu instancia.

    Cuando el estado sea PENDING, podrás firmar los desafíos.

  3. Obtener los retos de la propuesta. Para aprovisionar una instancia de HSM en la nube de un solo inquilino, se necesitan retos firmados de todos los miembros del quórum.

      gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \
          --single_tenant_hsm_instance INSTANCE_ID \
          --location LOCATION \
          --format="json[](quorumParameters.challenges)"
      

    Este comando devuelve una matriz de retos en formato JSON.

  4. Para cada clave, decodifica el reto con `basenc --base64url -d` y fírmalo con la clave privada correspondiente.

      echo CHALLENGE_N | basenc --base64url -d > decoded-challenge-N.txt
      openssl dgst -sign PRIVATE_KEY_N -out signed-challenge-N.txt decoded-challenge-N.txt
      

    Haz los cambios siguientes:

    • N: el número del reto. Por ejemplo, 1 para el primer reto, 2 para el segundo, etc.
    • CHALLENGE_N: el contenido del reto número N del resultado del paso anterior.
    • PRIVATE_KEY_N: la ruta al número de clave privada N, por ejemplo, rsaprivate1.pem para el primer reto.
  5. Aprobar la propuesta subiendo los desafíos firmados. Puedes subirlos con un solo comando o con varios. Este paso requiere el rol Miembro de quórum de HSM de un solo inquilino de Cloud KMS.

      gcloud kms single-tenant-hsm proposal approve PROPOSAL_ID \
          --location LOCATION \
          --single_tenant_hsm_instance INSTANCE_ID \
          --quorum-challenge-replies="SIGNED_QUORUM_CHALLENGE_LIST"
      

    Sustituye SIGNED_QUORUM_CHALLENGE_LIST por una matriz con formato JSON de retos, donde cada elemento de la lista es una tupla que contiene la ruta al reto firmado y la ruta a la clave pública correspondiente. Por ejemplo, [('signed-challenge-1.txt','rsapub1.pem'), ('signed-challenge-2.txt','rsapub2.pem')] para enviar los dos primeros retos firmados en un solo comando.

    Una vez que hayas subido el número necesario de retos firmados, el estado de la propuesta cambiará a APPROVED.

  6. Una vez que se haya aprobado la propuesta, usa el comando execute para completar la operación register_two_factor_auth_keys. Para completar este paso, debes tener el rol Ejecutor de HSM de un solo inquilino de Cloud KMS y hacerlo en un plazo de 24 horas después de crear la propuesta.

        gcloud kms single-tenant-hsm proposal execute PROPOSAL_ID 
    --single_tenant_hsm_instance INSTANCE_ID --location LOCATION

    Se trata de una operación de larga duración que aprovisiona usuarios y crea copias de seguridad. La instancia se convierte en ACTIVE al cabo de entre 20 y 30 minutos.

  7. Una vez que la instancia esté ACTIVE, consulta sus detalles para ver la disableDate:

        gcloud kms single-tenant-hsm describe INSTANCE_ID 
    --location=LOCATION

    Anota el disableDate de la instancia. Debes completar una operación refresh_single_tenant_hsm_instance antes de esa hora o tu instancia se inhabilitará.

Ver instancias

Los usuarios con cualquiera de los siguientes roles pueden ver una lista de instancias de Cloud HSM de un solo inquilino y sus estados:

  • Proposer de HSM de un solo inquilino de Cloud KMS
  • Miembro de quórum de HSM de un solo inquilino de Cloud KMS
  • Ejecutor de HSM de un solo inquilino de Cloud KMS
  • Lector de Cloud KMS
  • Administrador de Cloud KMS

Asegúrate de revisar el estado de tus instancias con regularidad. Las instancias deben actualizarse periódicamente para mantener el estado Activa.

Se pueden usar las instancias que tengan el estado Activo. Los desarrolladores que necesiten crear o importar claves en instancias de Cloud HSM de un solo inquilino necesitan el identificador de recurso de la instancia. El identificador de recurso tiene el siguiente formato:

projects/INSTANCE_PROJECT/locations/LOCATION/singleTenantHsmInstances/INSTANCE_NAME

Para ver las instancias de tu organización y encontrar sus identificadores de recursos, sigue estos pasos:

Consola

  1. En la Google Cloud consola, ve a la página Infraestructura de KMS.

    Ir a la infraestructura de KMS

  2. En la tarjeta Instancia de HSM de un solo arrendatario, haz clic en Ver. En la página Instancia de HSM de un solo arrendatario se muestra una lista de todas las instancias de HSM de un solo arrendatario de Cloud que tienes permiso para ver.

  3. Para ver los detalles de una instancia, haz clic en su nombre. En la página Detalles de la instancia de HSM de un solo arrendatario se muestran los detalles de la instancia seleccionada, incluido el identificador de recurso completo de la instancia y una lista de propuestas creadas para la instancia.

  4. Opcional: Para ver o descargar las claves públicas asociadas a las claves de autenticación de dos factores (2FA) actuales de los miembros del quórum, haz clic en Descargar clave pública. Puedes comparar las claves públicas con tus claves privadas de autenticación de dos factores para verificar qué claves de control están activas.

gcloud

Para ver una lista de las instancias que ya tienes, usa el método kms single-tenant-hsm list.

gcloud kms single-tenant-hsm list projects/PROJECT_ID/locations/LOCATION

Haz los cambios siguientes:

  • PROJECT_ID: identificador del proyecto en el que quieres ver las instancias de Cloud HSM de un solo inquilino.
  • LOCATION: la ubicación en la que quieres ver las instancias de Cloud HSM de un solo inquilino.

Consulta los detalles de una instancia con el método kms single-tenant-hsm describe.

gcloud kms single-tenant-hsm describe --location=LOCATION \
    --singletenanthsminstance=INSTANCE_ID

Haz los cambios siguientes:

  • LOCATION: la ubicación en la que quieres ver las instancias de Cloud HSM de un solo inquilino.
  • INSTANCE_ID: la instancia de la que quieres ver los detalles.

Usar la instancia

Mientras tu instancia esté ACTIVE, puedes crear y usar claves. Puedes crear claves de Cloud HSM de un solo inquilino en cualquier conjunto de claves que se encuentre en la misma ubicación que una instancia de Cloud HSM de un solo inquilino activa.

Para crear claves de Cloud HSM de un solo inquilino, se necesita el rol Creador de claves de HSM de un solo inquilino de Cloud KMS, además del rol Administrador de Cloud KMS.

Una vez creadas, no se necesitan permisos especiales para usar las claves de Cloud HSM de un solo inquilino.

Crear clave

Cuando creas una clave de Cloud HSM de un solo inquilino, debes especificar la instancia de Cloud HSM de un solo inquilino en la que quieres crearla. De lo contrario, el proceso es similar al de crear cualquier otra clave. Para obtener instrucciones detalladas, consulta el artículo Crear una clave.

Importar una clave

Cuando importas material de clave en una clave de Cloud HSM de un solo inquilino, debes especificar la instancia de Cloud HSM de un solo inquilino en la que quieres almacenarlo. De lo contrario, el proceso es similar al de importar cualquier otra clave. Para obtener instrucciones detalladas, consulta el artículo Importar una versión de una clave en Cloud Key Management Service.

Usar una llave

Una vez creada la clave, usar una clave de Cloud HSM de un solo inquilino es igual que usar cualquier otra clave de Cloud HSM. No es necesario especificar la instancia de Single-tenant Cloud HSM para usar la clave.

Mantener una instancia

Una vez aprovisionada la instancia, eres responsable de mantenerla. Para mantener la instancia, debes crear propuestas de operaciones de mantenimiento, obtener la aprobación del quórum y, a continuación, ejecutar la operación aprobada. Solo puede haber una propuesta activa a la vez. Si decides no seguir adelante con una propuesta, no podrás proponer otra operación hasta que elimines la propuesta activa o hasta que caduque.

Debes actualizar tu instancia antes del disableDate. Si necesitas comprobar el disableDate de una instancia, puedes ver los detalles de la instancia.

Ver propuestas de instancias

Para ver las propuestas de una instancia, sigue estos pasos:

Consola

  1. En la Google Cloud consola, ve a la página Infraestructura de KMS.

    Ir a la infraestructura de KMS

  2. En la tarjeta Instancia de HSM de un solo arrendatario, haga clic en Ver. En la página Instancia de HSM de un solo arrendatario se muestra una lista de todas las instancias de HSM de un solo arrendatario de Cloud que tienes permiso para ver.

  3. Busca la instancia en la que quieras ver las propuestas y haz clic en su nombre. La página Detalles de la instancia de HSM de un solo arrendatario muestra información sobre la instancia, incluida una lista de propuestas creadas para la instancia.

  4. Opcional: Para filtrar la lista de propuestas, haz clic en la barra Filtrar e introduce los criterios de filtro. Por ejemplo, puede filtrar la lista para ver solo la propuesta que está pendiente de aprobación o solo las propuestas que se han completado correctamente.

gcloud

  • Consulta una lista de propuestas con el método kms single-tenant-hsm proposal list.

    gcloud kms single-tenant-hsm proposal list --location=LOCATION \
        --singletenanthsminstance=INSTANCE_ID

    Haz los cambios siguientes:

    • LOCATION: la ubicación en la que quieres ver las instancias de Cloud HSM de un solo inquilino.
    • INSTANCE_ID: el identificador de la instancia de Cloud HSM de un solo arrendatario de la que quieras ver las propuestas.

Actualizar una instancia

Puedes actualizar una instancia para mantenerla al día y evitar tiempos de inactividad no planificados. Esta operación requiere autenticación de quórum. Una vez aprobada la propuesta, la operación tarda entre 15 y 30 minutos en completarse.

Cuando actualizas una instancia, el disableDate se establece en 120 días a partir del momento de la actualización.

  1. Crea una propuesta para actualizar la instancia con el tipo de operación refresh_single_tenant_hsm_instance. Para este paso, se necesita el rol Proponente de HSM de un solo inquilino de Cloud KMS.

        gcloud kms single-tenant-hsm proposal create INSTANCE_ID \
            --location LOCATION \
            --single-tenant-hsm-instance-proposal-id PROPOSAL_ID \
            --operation-type refresh_single_tenant_hsm_instance
        

    Haz los cambios siguientes:

    • INSTANCE_ID: identificador de la instancia.
    • LOCATION: la ubicación en la que has creado la instancia.
    • PROPOSAL_ID: el identificador único que quieras usar para esta propuesta (por ejemplo, refresh_instance).
  2. Consulta el estado de la propuesta y espera a que cambie a PENDING.

      gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \
          --single_tenant_hsm_instance INSTANCE_ID \
          --location LOCATION
      

    Haz los cambios siguientes:

    • INSTANCE_ID: el identificador de tu instancia.
    • PROPOSAL_ID el identificador de la propuesta, por ejemplo, refresh_instance.
    • LOCATION: la ubicación en la que has creado tu instancia.

    Cuando el estado sea PENDING, podrás firmar los desafíos.

  3. Obtener los retos de la propuesta.

      gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \
          --single_tenant_hsm_instance INSTANCE_ID \
          --location LOCATION \
          --format="json[](quorumParameters.challenges)"
      

    Este comando devuelve una matriz de retos en formato JSON.

  4. Por cada reto devuelto en el paso anterior, decodifica el reto con basenc --base64url -d y fírmalo con una clave privada.

      echo CHALLENGE_N | basenc --base64url -d > decoded-challenge-N.txt
      openssl dgst -sign PRIVATE_KEY_N -out signed-challenge-N.txt decoded-challenge-N.txt
      

    Haz los cambios siguientes:

    • N: el número del reto. Por ejemplo, 1 para el primer reto, 2 para el segundo, etc.
    • CHALLENGE_N: el contenido del reto número N del resultado del paso anterior.
    • PRIVATE_KEY_N: la ruta al número de clave privada N, por ejemplo, rsaprivate1.pem para el primer reto.
  5. Aprobar la propuesta subiendo los desafíos firmados. Puedes subirlos con un solo comando o con varios. Este paso requiere el rol Miembro de quórum de HSM de un solo inquilino de Cloud KMS.

      gcloud kms single-tenant-hsm proposal approve PROPOSAL_ID \
          --location LOCATION \
          --single_tenant_hsm_instance INSTANCE_ID \
          --quorum-challenge-replies="SIGNED_QUORUM_CHALLENGE_LIST"
      

    Sustituye SIGNED_QUORUM_CHALLENGE_LIST por una matriz con formato JSON de retos, donde cada elemento de la lista es una tupla que contiene la ruta al reto firmado y la ruta a la clave pública correspondiente. Por ejemplo, [('signed-challenge-1.txt','rsapub1.pem'), ('signed-challenge-2.txt','rsapub2.pem')] para enviar los dos primeros retos firmados en un solo comando.

    Una vez que hayas subido el número necesario de retos firmados, el estado de la propuesta cambiará a APPROVED.

  6. Ejecuta la propuesta. Para completar este paso, debes tener el rol Ejecutor de HSM de un solo inquilino de Cloud KMS y hacerlo en un plazo de 24 horas después de crear la propuesta.

        gcloud kms single-tenant-hsm proposal execute  PROPOSAL_ID \
        --single_tenant_hsm_instance INSTANCE_ID --location LOCATION
        

    Una vez completada la operación, la instancia permanece en el estado `ACTIVE` y el disableDate se establece en 120 días a partir del momento de la actualización.

Añadir un miembro del quórum

Puedes añadir un miembro del quórum a una instancia. Esta operación requiere autenticación por cuórum. Una vez aprobada la propuesta, la operación tarda entre 15 y 30 minutos en completarse.

  1. Genera un nuevo par de claves RSA-2048 para el nuevo miembro del quórum. Sigue los estándares de tu organización para crear pares de claves RSA-2048 en tokens físicos.

    Guarda la clave privada de forma segura, ya que la necesitarás para aprobar propuestas. Ten a mano la clave pública, ya que la necesitarás para añadir el nuevo miembro del quórum a la instancia de Cloud HSM de un solo inquilino.

  2. Crea una propuesta para añadir un miembro del quórum a la instancia mediante la operación add_quorum_member. Para este paso, se necesita el rol Proponente de HSM de un solo inquilino de Cloud KMS.

        gcloud kms single-tenant-hsm proposal create INSTANCE_ID \
            --location LOCATION \
            --single-tenant-hsm-instance-proposal-id PROPOSAL_ID \
            --operation-type add_quorum_member \
            --two_factor_public_key_pem PATH_TO_PUBLIC_KEY
        

    Haz los cambios siguientes:

    • INSTANCE_ID: identificador de la instancia.
    • LOCATION: la ubicación en la que has creado la instancia.
    • PROPOSAL_ID: el identificador único que quieras usar para esta propuesta (por ejemplo, add_quorum_member).
    • PATH_TO_PUBLIC_KEY: la ruta a la nueva clave pública. Por ejemplo, rsapub4.pem.
  3. Consulta el estado de la propuesta y espera a que cambie a PENDING.

      gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \
          --single_tenant_hsm_instance INSTANCE_ID \
          --location LOCATION
      

    Haz los cambios siguientes:

    • INSTANCE_ID: el identificador de tu instancia.
    • PROPOSAL_ID el identificador de la propuesta, por ejemplo, add_quorum_member.
    • LOCATION: la ubicación en la que has creado tu instancia.

    Cuando el estado sea PENDING, podrás firmar los desafíos.

  4. Obtener los retos de la propuesta. Para añadir un nuevo miembro del quórum, se necesitan retos firmados de un quórum de miembros actuales, además de un reto firmado del nuevo miembro con la nueva clave.

      gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \
          --single_tenant_hsm_instance INSTANCE_ID \
          --location LOCATION \
          --format="json[](requiredActionQuorumParameters.requiredChallenges,requiredActionQuorumParameters.quorumChallenges)"
      

    Este comando devuelve una matriz de retos en formato JSON. El campo requiredActionQuorumParameters.requiredChallenges contiene un reto para la nueva clave que estás registrando. El campo requiredActionQuorumParameters.quorumChallenges contiene retos para un quórum de las claves existentes. Debes firmar todos los retos del objeto requiredActionQuorumParameters.

  5. Por cada reto devuelto en el paso anterior, decodifica el reto con basenc --base64url -d y fírmalo con una clave privada.

      echo CHALLENGE_N | basenc --base64url -d > decoded-challenge-N.txt
      openssl dgst -sign PRIVATE_KEY_N -out signed-challenge-N.txt decoded-challenge-N.txt
      

    Haz los cambios siguientes:

    • N: el número del reto. Por ejemplo, 1 para el primer reto, 2 para el segundo, etc.
    • CHALLENGE_N: el contenido del reto número N del resultado del paso anterior.
    • PRIVATE_KEY_N: la ruta al número de clave privada N, por ejemplo, rsaprivate1.pem para el primer reto.
  6. Aprobar la propuesta subiendo los retos firmados. Puedes subirlos con un solo comando o con varios. Este paso requiere el rol Miembro de quórum de HSM de un solo inquilino de Cloud KMS.

      gcloud kms single-tenant-hsm proposal approve PROPOSAL_ID \
          --location LOCATION \
          --single_tenant_hsm_instance INSTANCE_ID \
          --quorum-challenge-replies="SIGNED_QUORUM_CHALLENGE_LIST" \
          --required-challenge-replies="SIGNED_REQUIRED_CHALLENGE_LIST"
      

    Haz los cambios siguientes:

    • SIGNED_QUORUM_CHALLENGE_LIST: una matriz con formato JSON de retos firmados con claves privadas que ya están registradas. Cada elemento de la lista es una tupla que contiene la ruta al reto firmado y la ruta a la clave pública correspondiente. Por ejemplo, [('signed-challenge-1.txt','rsapub1.pem'), ('signed-challenge-2.txt','rsapub2.pem')] para enviar los dos primeros retos firmados en un solo comando.
    • SIGNED_REQUIRED_CHALLENGE_LIST: un array con formato JSON que contiene el reto firmado con la nueva clave privada, donde el único elemento de la lista es una tupla que contiene la ruta al reto firmado y la ruta a la clave pública correspondiente (por ejemplo, [('signed-challenge-newkey.txt','rsapub-newkey.pem')]).

    Una vez que hayas subido el número necesario de retos firmados, el estado de la propuesta cambiará a APPROVED.

  7. Ejecuta la propuesta. Para completar este paso, debes tener el rol Ejecutor de HSM de un solo inquilino de Cloud KMS y hacerlo en un plazo de 24 horas después de crear la propuesta.

        gcloud kms single-tenant-hsm proposal execute  PROPOSAL_ID \
        --single_tenant_hsm_instance INSTANCE_ID --location LOCATION
        

    Una vez completada la operación, el nuevo miembro del quórum podrá participar en los retos para aprobar propuestas. La clave pública que has añadido ahora se incluye en la lista de claves públicas de los detalles de la instancia.

Quitar un miembro del quórum

Si tienes más miembros del quórum que el tamaño de quórum necesario, puedes quitar un miembro del quórum de una instancia. Esta operación requiere autenticación de quórum. Una vez aprobada la propuesta, la operación tarda entre 15 y 30 minutos en completarse.

  1. Crea una propuesta para quitar un miembro del quórum de la instancia mediante la operación remove_quorum_member. Para este paso, se necesita el rol Proponente de HSM de un solo inquilino de Cloud KMS.

        gcloud kms single-tenant-hsm proposal create INSTANCE_ID \
            --location LOCATION \
            --single-tenant-hsm-instance-proposal-id PROPOSAL_ID \
            --operation-type remove_quorum_member \
            --two_factor_public_key_pem PATH_TO_PUBLIC_KEY
        

    Haz los cambios siguientes:

    • INSTANCE_ID: identificador de la instancia.
    • LOCATION: la ubicación en la que has creado la instancia.
    • PROPOSAL_ID: el identificador único que quieras usar para esta propuesta (por ejemplo, remove_quorum_member).
    • PATH_TO_PUBLIC_KEY: la ruta a la clave pública que quieras quitar de la instancia. Por ejemplo, rsapub3.pem. Una vez completada la operación, la clave privada correspondiente no se podrá usar para aprobar propuestas.
  2. Consulta el estado de la propuesta y espera a que cambie a PENDING.

      gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \
          --single_tenant_hsm_instance INSTANCE_ID \
          --location LOCATION
      

    Haz los cambios siguientes:

    • INSTANCE_ID: el identificador de su instancia.
    • PROPOSAL_ID el identificador de la propuesta, por ejemplo, remove_quorum_member.
    • LOCATION: la ubicación en la que has creado tu instancia.

    Cuando el estado sea PENDING, podrás firmar los desafíos.

  3. Obtener los retos de la propuesta.

      gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \
          --single_tenant_hsm_instance INSTANCE_ID \
          --location LOCATION \
          --format="json[](quorumParameters.challenges)"
      

    Este comando devuelve una matriz de retos en formato JSON.

  4. Por cada reto devuelto en el paso anterior, decodifica el reto con basenc --base64url -d y fírmalo con una clave privada.

      echo CHALLENGE_N | basenc --base64url -d > decoded-challenge-N.txt
      openssl dgst -sign PRIVATE_KEY_N -out signed-challenge-N.txt decoded-challenge-N.txt
      

    Haz los cambios siguientes:

    • N: el número del reto. Por ejemplo, 1 para el primer reto, 2 para el segundo, etc.
    • CHALLENGE_N: el contenido del reto número N del resultado del paso anterior.
    • PRIVATE_KEY_N: la ruta al número de clave privada N, por ejemplo, rsaprivate1.pem para el primer reto.
  5. Aprobar la propuesta subiendo los desafíos firmados. Puedes subirlos con un solo comando o con varios. Este paso requiere el rol Miembro de quórum de HSM de un solo inquilino de Cloud KMS.

      gcloud kms single-tenant-hsm proposal approve PROPOSAL_ID \
          --location LOCATION \
          --single_tenant_hsm_instance INSTANCE_ID \
          --quorum-challenge-replies="SIGNED_QUORUM_CHALLENGE_LIST"
      

    Sustituye SIGNED_QUORUM_CHALLENGE_LIST por una matriz con formato JSON de retos, donde cada elemento de la lista es una tupla que contiene la ruta al reto firmado y la ruta a la clave pública correspondiente. Por ejemplo, [('signed-challenge-1.txt','rsapub1.pem'), ('signed-challenge-2.txt','rsapub2.pem')] para enviar los dos primeros retos firmados en un solo comando.

    Una vez que hayas subido el número necesario de retos firmados, el estado de la propuesta cambiará a APPROVED.

  6. Ejecuta la propuesta. Para completar este paso, debes tener el rol Ejecutor de HSM de un solo inquilino de Cloud KMS y hacerlo en un plazo de 24 horas después de crear la propuesta.

        gcloud kms single-tenant-hsm proposal execute  PROPOSAL_ID \
        --single_tenant_hsm_instance INSTANCE_ID --location LOCATION
        

    Una vez completada la operación, el miembro del quórum eliminado ya no podrá participar en las verificaciones para aprobar propuestas. La clave pública que has eliminado ya no se incluye en la lista de claves públicas de los detalles de la instancia.

Inhabilitar una instancia

Puedes inhabilitar una instancia para bloquear temporalmente el acceso a todas sus claves. Esta operación requiere autenticación de quórum. Una vez aprobada la propuesta, la operación tarda entre 15 y 30 minutos en completarse.

Mientras una instancia esté inhabilitada, las claves almacenadas en ella seguirán apareciendo como ACTIVE, pero no se podrán usar. Si intentas realizar operaciones criptográficas con una clave en una instancia inhabilitada, se producirá un error.

  1. Crea una propuesta para inhabilitar la instancia con el tipo de operación disable_single_tenant_hsm_instance. Para este paso, se necesita el rol Proponente de HSM de un solo inquilino de Cloud KMS.

        gcloud kms single-tenant-hsm proposal create INSTANCE_ID \
            --location LOCATION \
            --single-tenant-hsm-instance-proposal-id PROPOSAL_ID \
            --operation-type disable_single_tenant_hsm_instance
        

    Haz los cambios siguientes:

    • INSTANCE_ID: identificador de la instancia.
    • LOCATION: la ubicación en la que has creado la instancia.
    • PROPOSAL_ID: el identificador único que quieras usar para esta propuesta (por ejemplo, disable_instance).
  2. Consulta el estado de la propuesta y espera a que cambie a PENDING.

      gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \
          --single_tenant_hsm_instance INSTANCE_ID \
          --location LOCATION
      

    Haz los cambios siguientes:

    • INSTANCE_ID: el identificador de su instancia.
    • PROPOSAL_ID el identificador de la propuesta, por ejemplo, disable_instance.
    • LOCATION: la ubicación en la que has creado tu instancia.

    Cuando el estado sea PENDING, podrás firmar los desafíos.

  3. Obtener los retos de la propuesta.

      gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \
          --single_tenant_hsm_instance INSTANCE_ID \
          --location LOCATION \
          --format="json[](quorumParameters.challenges)"
      

    Este comando devuelve una matriz de retos en formato JSON.

  4. Por cada reto devuelto en el paso anterior, decodifica el reto con basenc --base64url -d y fírmalo con una clave privada.

      echo CHALLENGE_N | basenc --base64url -d > decoded-challenge-N.txt
      openssl dgst -sign PRIVATE_KEY_N -out signed-challenge-N.txt decoded-challenge-N.txt
      

    Haz los cambios siguientes:

    • N: el número del reto. Por ejemplo, 1 para el primer reto, 2 para el segundo, etc.
    • CHALLENGE_N: el contenido del reto número N del resultado del paso anterior.
    • PRIVATE_KEY_N: la ruta al número de clave privada N, por ejemplo, rsaprivate1.pem para el primer reto.
  5. Aprobar la propuesta subiendo los desafíos firmados. Puedes subirlos con un solo comando o con varios. Este paso requiere el rol Miembro de quórum de HSM de un solo inquilino de Cloud KMS.

      gcloud kms single-tenant-hsm proposal approve PROPOSAL_ID \
          --location LOCATION \
          --single_tenant_hsm_instance INSTANCE_ID \
          --quorum-challenge-replies="SIGNED_QUORUM_CHALLENGE_LIST"
      

    Sustituye SIGNED_QUORUM_CHALLENGE_LIST por una matriz con formato JSON de retos, donde cada elemento de la lista es una tupla que contiene la ruta al reto firmado y la ruta a la clave pública correspondiente. Por ejemplo, [('signed-challenge-1.txt','rsapub1.pem'), ('signed-challenge-2.txt','rsapub2.pem')] para enviar los dos primeros retos firmados en un solo comando.

    Una vez que hayas subido el número necesario de retos firmados, el estado de la propuesta cambiará a APPROVED.

  6. Ejecuta la propuesta. Para completar este paso, debes tener el rol Ejecutor de HSM de un solo inquilino de Cloud KMS y hacerlo en un plazo de 24 horas después de crear la propuesta.

        gcloud kms single-tenant-hsm proposal execute  PROPOSAL_ID \
        --single_tenant_hsm_instance INSTANCE_ID --location LOCATION
        

    Una vez completada la operación, la instancia permanece en el estado DISABLED y no se puede usar hasta que se vuelva a habilitar.

Habilitar una instancia

Puedes volver a habilitar una instancia de DISABLED para restaurar el acceso a ella y a sus claves. Esta operación requiere autenticación de quórum. Una vez aprobada la propuesta, la operación tarda entre 15 y 30 minutos en completarse.

  1. Crea una propuesta para habilitar la instancia con el tipo de operación enable_single_tenant_hsm_instance. Para este paso, se necesita el rol Proponente de HSM de un solo inquilino de Cloud KMS.

        gcloud kms single-tenant-hsm proposal create INSTANCE_ID \
            --location LOCATION \
            --single-tenant-hsm-instance-proposal-id PROPOSAL_ID \
            --operation-type enable_single_tenant_hsm_instance
        

    Haz los cambios siguientes:

    • INSTANCE_ID: identificador de la instancia.
    • LOCATION: la ubicación en la que has creado la instancia.
    • PROPOSAL_ID: el identificador único que quieras usar para esta propuesta (por ejemplo, enable_instance).
  2. Consulta el estado de la propuesta y espera a que cambie a PENDING.

      gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \
          --single_tenant_hsm_instance INSTANCE_ID \
          --location LOCATION
      

    Haz los cambios siguientes:

    • INSTANCE_ID: el identificador de su instancia.
    • PROPOSAL_ID el identificador de la propuesta, por ejemplo, enable_instance.
    • LOCATION: la ubicación en la que has creado tu instancia.

    Cuando el estado sea PENDING, podrás firmar los desafíos.

  3. Obtener los retos de la propuesta.

      gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \
          --single_tenant_hsm_instance INSTANCE_ID \
          --location LOCATION \
          --format="json[](quorumParameters.challenges)"
      

    Este comando devuelve una matriz de retos en formato JSON.

  4. Por cada reto devuelto en el paso anterior, decodifica el reto con basenc --base64url -d y fírmalo con una clave privada.

      echo CHALLENGE_N | basenc --base64url -d > decoded-challenge-N.txt
      openssl dgst -sign PRIVATE_KEY_N -out signed-challenge-N.txt decoded-challenge-N.txt
      

    Haz los cambios siguientes:

    • N: el número del reto. Por ejemplo, 1 para el primer reto, 2 para el segundo, etc.
    • CHALLENGE_N: el contenido del reto número N del resultado del paso anterior.
    • PRIVATE_KEY_N: la ruta al número de clave privada N, por ejemplo, rsaprivate1.pem para el primer reto.
  5. Aprobar la propuesta subiendo los desafíos firmados. Puedes subirlos con un solo comando o con varios. Este paso requiere el rol Miembro de quórum de HSM de un solo inquilino de Cloud KMS.

      gcloud kms single-tenant-hsm proposal approve PROPOSAL_ID \
          --location LOCATION \
          --single_tenant_hsm_instance INSTANCE_ID \
          --quorum-challenge-replies="SIGNED_QUORUM_CHALLENGE_LIST"
      

    Sustituye SIGNED_QUORUM_CHALLENGE_LIST por una matriz con formato JSON de retos, donde cada elemento de la lista es una tupla que contiene la ruta al reto firmado y la ruta a la clave pública correspondiente. Por ejemplo, [('signed-challenge-1.txt','rsapub1.pem'), ('signed-challenge-2.txt','rsapub2.pem')] para enviar los dos primeros retos firmados en un solo comando.

    Una vez que hayas subido el número necesario de retos firmados, el estado de la propuesta cambiará a APPROVED.

  6. Ejecuta la propuesta. Para completar este paso, debes tener el rol Ejecutor de HSM de un solo inquilino de Cloud KMS y hacerlo en un plazo de 24 horas después de crear la propuesta.

        gcloud kms single-tenant-hsm proposal execute  PROPOSAL_ID \
        --single_tenant_hsm_instance INSTANCE_ID --location LOCATION
        

    Una vez completada la operación, la instancia vuelve al estado `ACTIVE` y el disableDate se establece en 120 días a partir del momento de la actualización.

Eliminar una instancia

Puedes eliminar una instancia para destruirla de forma permanente, así como sus claves. Esta operación requiere autenticación de quórum. Una vez aprobada la propuesta, la operación tarda entre 15 y 30 minutos en completarse.

Una vez que se elimina una instancia, las claves almacenadas en ella siguen apareciendo como ACTIVE, pero no se pueden usar. Si intentas realizar operaciones criptográficas con una clave de una instancia eliminada, se producirá un error.

  1. Crea una propuesta para eliminar la instancia con el tipo de operación delete_single_tenant_hsm_instance. Para este paso, se necesita el rol Proponente de HSM de un solo inquilino de Cloud KMS.

        gcloud kms single-tenant-hsm proposal create INSTANCE_ID \
            --location LOCATION \
            --single-tenant-hsm-instance-proposal-id PROPOSAL_ID \
            --operation-type delete_single_tenant_hsm_instance
        

    Haz los cambios siguientes:

    • INSTANCE_ID: identificador de la instancia que quieres eliminar.
    • LOCATION: la ubicación en la que has creado la instancia.
    • PROPOSAL_ID: el identificador único que quieras usar para esta propuesta (por ejemplo, delete_instance).
  2. Consulta el estado de la propuesta y espera a que cambie a PENDING.

      gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \
          --single_tenant_hsm_instance INSTANCE_ID \
          --location LOCATION
      

    Haz los cambios siguientes:

    • INSTANCE_ID: el identificador de su instancia.
    • PROPOSAL_ID el identificador de la propuesta, por ejemplo, delete_instance.
    • LOCATION: la ubicación en la que has creado tu instancia.

    Cuando el estado sea PENDING, podrás firmar los desafíos.

  3. Obtener los retos de la propuesta.

      gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \
          --single_tenant_hsm_instance INSTANCE_ID \
          --location LOCATION \
          --format="json[](quorumParameters.challenges)"
      

    Este comando devuelve una matriz de retos en formato JSON.

  4. Por cada reto devuelto en el paso anterior, decodifica el reto con basenc --base64url -d y fírmalo con una clave privada.

      echo CHALLENGE_N | basenc --base64url -d > decoded-challenge-N.txt
      openssl dgst -sign PRIVATE_KEY_N -out signed-challenge-N.txt decoded-challenge-N.txt
      

    Haz los cambios siguientes:

    • N: el número del reto. Por ejemplo, 1 para el primer reto, 2 para el segundo, etc.
    • CHALLENGE_N: el contenido del reto número N del resultado del paso anterior.
    • PRIVATE_KEY_N: la ruta al número de clave privada N, por ejemplo, rsaprivate1.pem para el primer reto.
  5. Aprobar la propuesta subiendo los desafíos firmados. Puedes subirlos con un solo comando o con varios. Este paso requiere el rol Miembro de quórum de HSM de un solo inquilino de Cloud KMS.

      gcloud kms single-tenant-hsm proposal approve PROPOSAL_ID \
          --location LOCATION \
          --single_tenant_hsm_instance INSTANCE_ID \
          --quorum-challenge-replies="SIGNED_QUORUM_CHALLENGE_LIST"
      

    Sustituye SIGNED_QUORUM_CHALLENGE_LIST por una matriz con formato JSON de retos, donde cada elemento de la lista es una tupla que contiene la ruta al reto firmado y la ruta a la clave pública correspondiente. Por ejemplo, [('signed-challenge-1.txt','rsapub1.pem'), ('signed-challenge-2.txt','rsapub2.pem')] para enviar los dos primeros retos firmados en un solo comando.

    Una vez que hayas subido el número necesario de retos firmados, el estado de la propuesta cambiará a APPROVED.

  6. Asegúrate de que quieres eliminar la instancia y destruir criptográficamente todos los datos encriptados con las claves creadas en esta instancia. Después, ejecuta la propuesta. Para completar este paso, debes tener el rol Ejecutor de HSM de un solo inquilino de Cloud KMS y hacerlo en un plazo de 24 horas después de crear la propuesta.

    Advertencia: El siguiente comando es irreversible. Se pueden perder datos de forma permanente. Google no puede ayudarte a recuperar las claves de una instancia eliminada.
        gcloud kms single-tenant-hsm proposal execute  PROPOSAL_ID \
        --single_tenant_hsm_instance INSTANCE_ID --location LOCATION
        

    Una vez completada la operación, se elimina la instancia.

Eliminar una propuesta

Si decides no aprobar ni ejecutar una propuesta, puedes eliminarla antes de que caduque. Si eliminas una propuesta pendiente, no podrás aprobarla y podrás crear una nueva. Si elimina una propuesta aprobada, no podrá ejecutar la operación.

  • Elimina una propuesta con el comando proposal delete. Para ello, se necesita el rol Proponente de HSM de un solo inquilino de Cloud KMS.

        gcloud kms single-tenant-hsm proposal delete PROPOSAL_ID \
            --location LOCATION \
            --single_tenant_hsm_instance INSTANCE_ID
        

    Haz los cambios siguientes:

    • INSTANCE_ID: identificador de la instancia.
    • LOCATION: la ubicación en la que has creado la instancia.
    • PROPOSAL_ID: identificador único de la propuesta que quieres eliminar. Por ejemplo, proposal_to_delete.

Siguientes pasos