En este documento, se proporciona una descripción general de Cloud HSM y se muestra cómo crear y usar claves de encriptación protegidas con HSM en Cloud Key Management Service.
¿Qué es Cloud HSM?
Cloud HSM es un servicio de Módulo de seguridad de hardware (HSM) alojado en la nube que te permite alojar claves de encriptación y realizar operaciones criptográficas en un clúster de HSM certificados con el nivel 3 del estándar FIPS 140-2. Google administra el clúster de HSM por ti, de modo que no necesitas preocuparte por el agrupamiento en clústeres, el escalamiento ni la aplicación de parches. Debido a que Cloud HSM usa Cloud KMS como frontend, puedes aprovechar todas las comodidades y características que ofrece Cloud KMS.
Crea un llavero de claves
Cuando creas una clave, debes agregarla a un llavero de claves en una ubicación Google Clouddeterminada. Puedes crear un llavero de claves nuevo o usar uno existente. En este tema, crearás un llavero de claves nuevo y le agregarás una nueva.
Crea un llavero de claves en una Google Cloud ubicación que sea compatible con Cloud HSM.
Console
Ve a la página Administración de claves en la consola de Google Cloud .
Haz clic en Crear llavero de claves.
En Nombre del llavero de claves, ingresa un nombre para tu llavero de claves.
En Ubicación del llavero de claves, selecciona una ubicación, como
"us-east1".Haz clic en Crear.
gcloud
-
In the Google Cloud console, activate Cloud Shell.
-
En tu entorno, ejecuta el comando
gcloud kms keyrings create:gcloud kms keyrings create KEY_RING \ --location LOCATIONReemplaza lo siguiente:
KEY_RING: el nombre del llavero de claves que incluye la claveLOCATION: la ubicación de Cloud KMS del llavero de claves.
Para obtener información sobre todas las marcas y los valores posibles, ejecuta el comando con la marca
--help. PROJECT_ID: Es el ID del proyecto que contiene el llavero de claves.KEY_RING: el nombre del llavero de claves que incluye la claveLOCATION: la ubicación de Cloud KMS del llavero de claves.
C#
Para ejecutar este código, primero configura un entorno de desarrollo de C# e instala el SDK de C# para Cloud KMS.
Go
Para ejecutar este código, primero configura un entorno de desarrollo de Go y, luego, instala el SDK de Go para Cloud KMS.
Java
Para ejecutar este código, primero configura un entorno de desarrollo de Java y, luego, instala el SDK de Java para Cloud KMS.
Node.js
Para ejecutar este código, primero configura un entorno de desarrollo de Node.js y, luego, instala el SDK de Node.js para Cloud KMS.
PHP
Para ejecutar este código, primero obtén información sobre cómo usar PHP en Google Cloud y, luego, instala el SDK de PHP para Cloud KMS.
Python
Para ejecutar este código, primero configura un entorno de desarrollo de Python y, luego, instala el SDK de Python para Cloud KMS.
Ruby
Para ejecutar este código, primero configura un entorno de desarrollo de Ruby y, luego, instala el SDK de Ruby 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/keyRings?key_ring_id=KEY_RING" \
--request "POST" \
--header "authorization: Bearer TOKEN"
Reemplaza lo siguiente:
Consulta la documentación sobre la API de KeyRing.create para obtener más información.
Crea una clave
Sigue estos pasos para crear una clave de Cloud HSM en el llavero de claves y la ubicación especificados.
Console
Ve a la página Administración de claves en la consola de Google Cloud .
Haz clic en el nombre del llavero de claves para el que crearás la clave.
Haz clic en Crear clave.
En ¿Qué tipo de clave quieres crear?, elige Clave generada.
En el campo Nombre de la clave, ingresa el nombre de tu clave.
Haz clic en el menú desplegable Nivel de protección y selecciona HSM o HSM de un solo arrendatario.
Si seleccionaste HSM de usuario único, selecciona la instancia de HSM de usuario único en la que deseas crear la clave.
Haz clic en el menú desplegable Propósito y selecciona Encriptación/desencriptación simétrica.
Acepta los valores predeterminados de Período de rotación y A partir del.
Haz clic en Crear.
gcloud
Para usar Cloud KMS en la línea de comandos, primero instala o actualiza a la versión más reciente de Google Cloud CLI.
To create a Multi-tenant Cloud HSM key, run the `kms keys create` command
with the `hsm` protection level.
gcloud kms keys create KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--purpose "encryption" \
--protection-level "hsm"
Reemplaza lo siguiente:
KEY_NAME: Es el nombre que deseas usar para la clave.KEY_RING: Es el nombre del llavero de claves en el que deseas crear la clave.LOCATION: Es la ubicación del llavero de claves.
Para obtener información sobre todas las marcas y los valores posibles, ejecuta el comando con la marca --help.
Para crear una clave de Cloud HSM de usuario único, ejecuta el comando kms keys create con el nivel de protección hsm-single-tenant y especifica la instancia de Cloud HSM de usuario único en la que deseas crear la clave. La instancia de HSM de Cloud de un solo arrendatario debe estar en la misma ubicación que el llavero.
gcloud kms keys create KEY_NAME
--keyring KEY_RING
--location LOCATION
--purpose "encryption"
--protection-level "hsm-single-tenant"
--crypto-key-backend="projects/INSTANCE_PROJECT/locations/LOCATION/singleTenantHsmInstances/INSTANCE_NAME"
Reemplaza lo siguiente:
KEY_NAME: Es el nombre que deseas usar para la clave.KEY_RING: Es el nombre del llavero de claves en el que deseas crear la clave.LOCATION: Es la ubicación del llavero de claves.PROTECTION_LEVEL: Es el nivel de protección de la clave que deseas crear.INSTANCE_PROJECT: Es el identificador del proyecto en el que se encuentra tu instancia de HSM de Cloud de un solo arrendatario.INSTANCE_NAME: Es el nombre de la instancia de Cloud HSM de un solo arrendatario en la que deseas crear la clave. Para obtener más información sobre las instancias de Cloud HSM de usuario único, consulta Crea y administra una instancia de Cloud HSM de usuario único.
C#
Para ejecutar este código, primero configura un entorno de desarrollo de C# e instala el SDK de C# para Cloud KMS.
Go
Para ejecutar este código, primero configura un entorno de desarrollo de Go y, luego, instala el SDK de Go para Cloud KMS.
Java
Para ejecutar este código, primero configura un entorno de desarrollo de Java y, luego, instala el SDK de Java para Cloud KMS.
Node.js
Para ejecutar este código, primero configura un entorno de desarrollo de Node.js y, luego, instala el SDK de Node.js para Cloud KMS.
PHP
Para ejecutar este código, primero obtén información sobre cómo usar PHP en Google Cloud y, luego, instala el SDK de PHP para Cloud KMS.
Python
Para ejecutar este código, primero configura un entorno de desarrollo de Python y, luego, instala el SDK de Python para Cloud KMS.
Ruby
Para ejecutar este código, primero configura un entorno de desarrollo de Ruby y, luego, instala el SDK de Ruby 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 crear una clave de Cloud HSM de varios inquilinos, usa el método CryptoKey.create con el nivel de protección HSM:
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys?crypto_key_id=KEY_NAME" \
--request "POST" \
--header "authorization: Bearer TOKEN" \
--header "content-type: application/json" \
--data '{"purpose": "ENCRYPT_DECRYPT", "versionTemplate": {
"protectionLevel": "HSM", "algorithm": "ALGORITHM" }}'
Reemplaza lo siguiente:
PROJECT_ID: Es el ID del proyecto que contiene el llavero de claves.LOCATION: la ubicación de Cloud KMS del llavero de claves.KEY_RING: el nombre del llavero de claves que incluye la claveKEY_NAME: el nombre de la clave.ALGORITHM: Es el algoritmo que deseas usar, por ejemplo,GOOGLE_SYMMETRIC_ENCRYPTION. Para ver todos los algoritmos admitidos, consulta Algoritmos y propósitos de clave.
Para crear una clave de Cloud HSM de usuario único, usa el método CryptoKey.create con el nivel de protección HSM_SINGLE_TENANT:
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys?crypto_key_id=KEY_NAME" \
--request "POST" \
--header "authorization: Bearer TOKEN" \
--header "content-type: application/json" \
--data '{"purpose": "ENCRYPT_DECRYPT", "versionTemplate": {
"protectionLevel": "HSM_SINGLE_TENANT", "algorithm": "ALGORITHM",
"cryptoKeyBackend": "projects/INSTANCE_PROJECT/locations/LOCATION/singleTenantHsmInstances/INSTANCE_NAME" }}'
Reemplaza lo siguiente:
PROJECT_ID: Es el ID del proyecto que contiene el llavero de claves.LOCATION: la ubicación de Cloud KMS del llavero de claves.KEY_RING: el nombre del llavero de claves que incluye la claveKEY_NAME: el nombre de la clave.ALGORITHM: Es el algoritmo que deseas usar, por ejemplo,GOOGLE_SYMMETRIC_ENCRYPTION. Para ver todos los algoritmos admitidos, consulta Algoritmos y propósitos de clave.INSTANCE_PROJECT: Es el identificador del proyecto en el que se encuentra tu instancia de HSM de Cloud de un solo inquilino.INSTANCE_NAME: Es el nombre de la instancia de Cloud HSM de un solo arrendatario en la que deseas crear la clave. Para obtener más información sobre las instancias de Cloud HSM de usuario único, consulta Crea y administra una instancia de Cloud HSM de usuario único.
Encripta datos
Ahora que tienes una clave, puedes usarla para encriptar texto o contenido binario.
gcloud
Para usar Cloud KMS en la línea de comandos, primero instala o actualiza a la versión más reciente de Google Cloud CLI.
gcloud kms encrypt \
--key KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--plaintext-file FILE_TO_ENCRYPT \
--ciphertext-file ENCRYPTED_OUTPUT
Reemplaza lo siguiente:
KEY_NAME: Es el nombre de la clave que deseas usar para la encriptación.KEY_RING: el nombre del llavero de claves que incluye la claveLOCATION: Es la ubicación de Cloud KMS que contiene el llavero de claves.FILE_TO_ENCRYPT: Es la ruta de acceso al archivo que deseas encriptar.ENCRYPTED_OUTPUT: Es la ruta de acceso en la que deseas guardar el resultado encriptado.
Para obtener información sobre todas las marcas y los valores posibles, ejecuta el comando con la marca --help.
C#
Para ejecutar este código, primero configura un entorno de desarrollo de C# e instala el SDK de C# para Cloud KMS.
Go
Para ejecutar este código, primero configura un entorno de desarrollo de Go y, luego, instala el SDK de Go para Cloud KMS.
Java
Para ejecutar este código, primero configura un entorno de desarrollo de Java y, luego, instala el SDK de Java para Cloud KMS.
Node.js
Para ejecutar este código, primero configura un entorno de desarrollo de Node.js y, luego, instala el SDK de Node.js para Cloud KMS.
PHP
Para ejecutar este código, primero obtén información sobre cómo usar PHP en Google Cloud y, luego, instala el SDK de PHP para Cloud KMS.
Python
Para ejecutar este código, primero configura un entorno de desarrollo de Python y, luego, instala el SDK de Python para Cloud KMS.
Ruby
Para ejecutar este código, primero configura un entorno de desarrollo de Ruby y, luego, instala el SDK de Ruby 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.
Cuando usas JSON y la API de REST, debes codificar el contenido en Base64 antes de que pueda encriptarlo Cloud KMS.
Para encriptar datos, realiza una solicitud POST, proporciona la información del proyecto y la clave que corresponda, y especifica el texto codificado en Base64 que se encriptará en el campo plaintext del cuerpo de la solicitud.
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME:encrypt" \
--request "POST" \
--header "authorization: Bearer TOKEN" \
--header "content-type: application/json" \
--data "{\"plaintext\": \"PLAINTEXT_TO_ENCRYPT\"}"
Reemplaza lo siguiente:
PROJECT_ID: Es el ID del proyecto que contiene el llavero de claves y la clave que deseas usar para la encriptación.LOCATION: Es la ubicación de Cloud KMS que contiene el llavero de claves.KEY_RING: Es el llavero de claves que contiene la clave que deseas usar para la encriptación.KEY_NAME: Es el nombre de la clave que deseas usar para la encriptación.PLAINTEXT_TO_ENCRYPT: Son los datos de texto sin formato que deseas encriptar. El texto sin formato debe estar codificado en Base64 antes de que llames al métodoencrypt.
Esta es una carga útil de ejemplo con datos codificados en Base64:
{ "plaintext": "U3VwZXIgc2VjcmV0IHRleHQgdGhhdCBtdXN0IGJlIGVuY3J5cHRlZAo=", }
Desencripta contenido cifrado
A fin de desencriptar contenido, debes utilizar la misma clave que usaste para encriptarlo.
gcloud
Para usar Cloud KMS en la línea de comandos, primero instala o actualiza a la versión más reciente de Google Cloud CLI.
gcloud kms decrypt \
--key KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--ciphertext-file FILE_TO_DECRYPT \
--plaintext-file DECRYPTED_OUTPUT
Reemplaza lo siguiente:
KEY_NAME: Es el nombre de la clave que deseas usar para el desencriptado.KEY_RING: el nombre del llavero de claves que incluye la claveLOCATION: Es la ubicación de Cloud KMS que contiene el llavero de claves.FILE_TO_DECRYPT: Es la ruta de acceso al archivo que deseas descifrar.DECRYPTED_OUTPUT: Es la ruta de acceso en la que deseas guardar el resultado del descifrado.
Para obtener información sobre todas las marcas y los valores posibles, ejecuta el comando con la marca --help.
C#
Para ejecutar este código, primero configura un entorno de desarrollo de C# e instala el SDK de C# para Cloud KMS.
Go
Para ejecutar este código, primero configura un entorno de desarrollo de Go y, luego, instala el SDK de Go para Cloud KMS.
Java
Para ejecutar este código, primero configura un entorno de desarrollo de Java y, luego, instala el SDK de Java para Cloud KMS.
Node.js
Para ejecutar este código, primero configura un entorno de desarrollo de Node.js y, luego, instala el SDK de Node.js para Cloud KMS.
PHP
Para ejecutar este código, primero obtén información sobre cómo usar PHP en Google Cloud y, luego, instala el SDK de PHP para Cloud KMS.
Python
Para ejecutar este código, primero configura un entorno de desarrollo de Python y, luego, instala el SDK de Python para Cloud KMS.
Ruby
Para ejecutar este código, primero configura un entorno de desarrollo de Ruby y, luego, instala el SDK de Ruby 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.
El texto desencriptado que se muestra en el archivo JSON de Cloud KMS está codificado en base64.
Para desencriptar datos encriptados, haz una solicitud POST y proporciona la información del proyecto y de la clave correspondientes, y especifica el texto encriptado (también conocido como texto cifrado) que se desencriptará en el campo ciphertext del cuerpo de la solicitud.
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME:decrypt" \
--request "POST" \
--header "authorization: Bearer TOKEN" \
--header "content-type: application/json" \
--data "{\"ciphertext\": \"ENCRYPTED_DATA\"}"
Reemplaza lo siguiente:
PROJECT_ID: Es el ID del proyecto que contiene el llavero de claves y la clave que deseas usar para el desencriptado.LOCATION: Es la ubicación de Cloud KMS que contiene el llavero de claves.KEY_RING: Es el llavero de claves que contiene la clave que deseas usar para el desencriptado.KEY_NAME: Es el nombre de la clave que deseas usar para el desencriptado.ENCRYPTED_DATA: Son los datos encriptados que deseas desencriptar.
Esta es una carga útil de ejemplo con datos codificados en Base64:
{ "ciphertext": "CiQAhMwwBo61cHas7dDgifrUFs5zNzBJ2uZtVFq4ZPEl6fUVT4kSmQ...", }
Próximos pasos
En el ejemplo de encriptación que se brinda en este tema, se usa una clave simétrica con el nivel de protección HSM. Para encriptar con una clave asimétrica con el nivel de protección HSM, sigue los pasos de Encripta y desencripta datos con una clave asimétrica, pero aplica estas modificaciones:
- Crea el llavero de claves en una de las regiones compatibles con Cloud HSM.
- Crea la clave con el nivel de protección HSM.
Para usar una clave asimétrica con el nivel de protección de HSM para la firma de curva elíptica o la firma RSA, sigue los pasos que se indican en Crea y valida firmas, pero aplica estas modificaciones:
- Crea el llavero de claves en una de las regiones compatibles con Cloud HSM.
- Crea la clave con el nivel de protección HSM.
Comienza a usar la API.
Consulta la Referencia de la API de Cloud KMS.
Lee las guías prácticas para comenzar a crear claves, rotarlas y establecer permisos sobre ellas.
Lee los conceptos para entender mejor la jerarquía de objetos, los estados de claves y la rotación de claves.
Obtén más información sobre Logging en Cloud KMS. Ten en cuenta que el registro se basa en operaciones y se aplica a claves con niveles de protección de software y HSM.
Obtén más información sobre cómo Cloud HSM protege tus datos en el informe técnico sobre la arquitectura de Cloud HSM.
Limitaciones conocidas
El tamaño del mensaje se limita a 8 KiB (frente a los 64 KiB en las claves de software de Cloud KMS) para texto sin formato y cifrado proporcionado por el usuario, incluidos los datos autenticados adicionales.
Cloud HSM no está disponible en todas las multirregiones. Para obtener una lista de todas las ubicaciones que admiten Cloud HSM de múltiples inquilinos, consulta Ubicaciones de Cloud KMS y selecciona Admite HSM de múltiples inquilinos en el filtro Compatibilidad con HSM.
El Cloud HSM de usuario único está disponible en un subconjunto de ubicaciones en las que también está disponible el Cloud HSM de varios usuarios. Para obtener una lista de todas las ubicaciones que admiten HSM de usuario único de Cloud, consulta Ubicaciones de Cloud KMS y selecciona Admite HSM de usuario único en el filtro Compatibilidad con HSM.
Si usas claves de Cloud HSM con integraciones de claves de encriptación administradas por el cliente (CMEK) en otros servicios de Google Cloud , las ubicaciones que uses para los servicios deben coincidir exactamente con las ubicaciones de tus claves de Cloud HSM. Esto se aplica a ubicaciones regionales, birregionales y multirregionales.
Para obtener más información sobre las integraciones de CMEK, consulta la sección Encriptación en reposo.
Las operaciones con claves asimétricas almacenadas en Cloud HSM pueden incurrir en una latencia notablemente mayor en comparación con el uso de claves de software de Cloud KMS.
HSM para bastidor Bare Metal
Google Cloud ofrece opciones de HSM adicionales, como el usuario único. El HSM para bastidor Bare Metal está disponible para que los clientes alojen sus propios HSM en el espacio proporcionado por Google. Consulta al representante de tu cuenta para obtener información adicional.