De forma predeterminada, Google Cloud se encriptan automáticamentelos datos en reposo con claves de cifrado gestionadas por Google. Si tienes requisitos de cumplimiento o normativas específicos relacionados con las claves que protegen tus datos, puedes usar claves de cifrado gestionadas por el cliente (CMEK) en tus conjuntos de datos de la API Cloud Healthcare. En lugar de que Google sea el propietario y el gestor de las claves de cifrado que protegen tus datos, los conjuntos de datos de la API Cloud Healthcare se cifran con una clave que tú controlas y gestionas en Cloud Key Management Service (Cloud KMS).
Para obtener más información sobre las CMEK en general, incluido cuándo y por qué habilitarlas, consulta el artículo Claves de cifrado gestionadas por el cliente (CMEK).
Antes de empezar
Decide si tu conjunto de datos de la API Cloud Healthcare y Cloud KMS estarán en el mismo Google Cloud proyecto o en proyectos diferentes. Para obtener más información, consulta el artículo Separación de funciones.
Para facilitar la lectura de la documentación, se utilizan las siguientes convenciones:
PROJECT_ID
: el ID de proyecto de la API de Cloud HealthcareKMS_PROJECT_ID
: el ID del proyecto en el que se ejecuta Cloud KMS, que puede ser el mismo quePROJECT_ID
Para obtener información sobre los IDs y los números de proyecto, consulta el artículo sobre cómo identificar proyectos. Google Cloud
Limitaciones
- Solo puedes usar claves de Cloud KMS al crear un conjunto de datos de la API Cloud Healthcare. No puedes habilitar, cambiar ni inhabilitar claves de Cloud KMS en un conjunto de datos de la API Cloud Healthcare.
- Solo se admiten almacenes FHIR, DICOM y HL7v2 en conjuntos de datos cifrados con CMEK. La protección con CMEK se aplica a los almacenes DICOM, FHIR y HL7v2 del conjunto de datos, así como a sus recursos.
- No puedes desidentificar los recursos cifrados con CMEK.
Operaciones de CMEK
Las claves de Cloud KMS se usan cuando se crea, se lee, se actualiza o se elimina un recurso encriptado con CMEK, así como para tareas operativas como la facturación o para asegurarse de que la clave esté disponible.
Consideraciones sobre las claves externas
Para obtener información sobre cómo usar las claves que gestionas en un sistema de partner de gestión de claves externo admitido para proteger los datos enGoogle Cloud, consulta Cloud External Key Manager.
Si pierdes las claves que gestionas fuera de Google Cloud, Google no podrá recuperar tus datos.
Indisponibilidad de claves y pérdida de datos
Si un conjunto de datos está cifrado con una clave y esa clave deja de estar disponible y sigue sin estarlo, la API Cloud Healthcare inhabilita y, finalmente, elimina el conjunto de datos. A veces, una clave deja de estar disponible si se inhabilita o se destruye, o si no se puede acceder a ella porque se han revocado los permisos. Sin embargo, este comportamiento se produce si la clave no está disponible por cualquier motivo. El nivel de protección de la clave o si se trata de una clave externa no influyen en este comportamiento. Las claves externas también pueden dejar de estar disponibles de forma impredecible. Por ejemplo, pueden surgir problemas de conectividad entre tus Google Cloud recursos y tu EKM.
En el siguiente proceso se describe cómo se comprueba la disponibilidad de las claves y cómo se puede inhabilitar y eliminar un conjunto de datos:
Una vez creado un conjunto de datos de la API Cloud Healthcare cifrado con CMEK, la API Cloud Healthcare comprueba el estado de la clave cada cinco minutos para asegurarse de que está disponible. Si la clave no está disponible, la API Cloud Healthcare seguirá admitiendo solicitudes al conjunto de datos durante un máximo de una hora.
Si, al cabo de una hora, la API Cloud Healthcare sigue sin poder conectarse con Cloud KMS, el conjunto de datos de la API Cloud Healthcare se inhabilita como medida de protección. Para volver a habilitar el conjunto de datos de la API Cloud Healthcare, ponte en contacto con tu representante del equipo de Asistencia.
Si está inhabilitada, solo puedes enviar solicitudes
datasets.get
ydatasets.delete
al conjunto de datos de la API Cloud Healthcare. Otras solicitudes fallan y se produce un error400 FAILED_PRECONDITION
.Si el conjunto de datos de la API Cloud Healthcare sigue sin estar disponible durante más de 30 días, se eliminará permanentemente. También se eliminan los almacenes DICOM, FHIR y HL7v2 del conjunto de datos, así como los datos asociados. Si eliminas estos datos, no podrás recuperarlos.
Creación de claves
En las siguientes secciones se describe cómo crear un conjunto de claves y una clave de Cloud KMS. Solo se admiten las claves de cifrado simétricas de Cloud KMS.
Ubicaciones admitidas
Las claves de Cloud KMS están disponibles en las ubicaciones de la API de Cloud Healthcare. Crea el conjunto de claves en una ubicación que coincida con la región o multirregión de tu conjunto de datos de la API Cloud Healthcare.
Cualquier conjunto de datos multirregional de la API Cloud Healthcare debe usar un conjunto de claves multirregional de una ubicación coincidente. Por ejemplo, un conjunto de datos de la API Cloud Healthcare de la región
us
debe protegerse con un conjunto de claves de la regiónus
, y un conjunto de datos de la API Cloud Healthcare de la regióneu
debe protegerse con un conjunto de claves de la regióneurope
.Los conjuntos de datos regionales de la API Cloud Healthcare deben usar claves regionales coincidentes. Por ejemplo, un conjunto de datos de la API Cloud Healthcare de la región
asia-northeast1
debe protegerse con un conjunto de claves de la regiónasia-northeast1
.No puedes usar la región
global
al configurar CMEK para un conjunto de datos de la API Cloud Healthcare.
Para obtener más información, consulta las ubicaciones de la API de Cloud Healthcare y las ubicaciones de Cloud KMS.
Crear un conjunto de claves y una clave
Sigue estos pasos en el proyecto Google Cloud que ejecuta Cloud KMS:
Conceder permisos de cifrado y descifrado
Para proteger tus datos de la API Cloud Healthcare con una clave de Cloud KMS, asigna el rol Encargado del encriptado y desencriptado de CryptoKey (roles/cloudkms.cryptoKeyEncrypterDecrypter
) a la cuenta de servicio del agente de servicio de Cloud Healthcare en esa clave. Para obtener instrucciones, consulta Permisos de CMEK de conjuntos de datos.
Después de conceder el rol a la cuenta de servicio, la API de Cloud Healthcare puede cifrar y descifrar recursos cifrados con CMEK. Tus aplicaciones no tienen que especificar claves al leer o escribir datos. La API Cloud Healthcare se encarga del cifrado.
Cuando un solicitante lee o escribe un objeto cifrado con una clave de Cloud KMS, accede al objeto con normalidad. Durante la solicitud, el agente de servicio cifra o descifra automáticamente el objeto solicitado, siempre que se cumplan las dos condiciones siguientes:
- El agente de servicio sigue teniendo los permisos necesarios.
- La clave está disponible y habilitada.
Crear un conjunto de datos de la API Cloud Healthcare cifrado con CMEK
En los siguientes ejemplos se muestra cómo crear un conjunto de datos cifrado con CMEK.
Debes especificar un ID de recurso de clave de Cloud KMS al crear el conjunto de datos. Esta clave distingue entre mayúsculas y minúsculas y tiene el siguiente formato:
projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME
Para ver los IDs de recursos de claves de Cloud KMS, consulta Obtener un ID de recurso de Cloud KMS.
Consola
En la Google Cloud consola, ve a la página Navegador.
Haz clic en add_box Crear conjunto de datos. Se muestra la página Crear conjunto de datos.
En el campo Nombre, introduce un identificador para el conjunto de datos que cumpla los requisitos de caracteres y tamaño permitidos para los conjuntos de datos.
Seleccione uno de los siguientes tipos de ubicación:
Región. El conjunto de datos reside de forma permanente en una Google Cloud región. Después de seleccionar esta opción, escribe o selecciona una ubicación en el campo Región.
Multirregión. El conjunto de datos reside permanentemente en una ubicación que abarca varias Google Cloud regiones. Después de seleccionar esta opción, escribe o selecciona una ubicación multirregional en el campo Multirregión.
En la sección Cifrado, seleccione uno de los siguientes tipos de cifrado:
Google-managed encryption key: es el método de cifrado predeterminado. Usa este método si quieres que Google gestione las claves de cifrado que protegen tus datos en este conjunto de datos de la API Cloud Healthcare.
Clave de Cloud KMS: usa una clave de cifrado gestionada por el cliente (CMEK).
Haz clic en Crear. Se muestra la página Navegador. El nuevo conjunto de datos se muestra en la lista de conjuntos de datos.
gcloud
Crea el conjunto de datos con el comando gcloud healthcare datasets create
.
Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:
DATASET_ID
: un identificador sujeto a los requisitos de tamaño y caracteres permitidos del conjunto de datosLOCATION
: una ubicación admitida del conjunto de datosKEY_RESOURCE_ID
: el ID de recurso de una clave de Cloud KMS, con el formatoprojects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME
Ejecuta el siguiente comando:
Linux, macOS o Cloud Shell
gcloud healthcare datasets create DATASET_ID \ --location=LOCATION \ --encryption-key=KEY_RESOURCE_ID
Windows (PowerShell)
gcloud healthcare datasets create DATASET_ID ` --location=LOCATION ` --encryption-key=KEY_RESOURCE_ID
Windows (cmd.exe)
gcloud healthcare datasets create DATASET_ID ^ --location=LOCATION ^ --encryption-key=KEY_RESOURCE_ID
Deberías recibir una respuesta similar a la siguiente:
Create request issued for: [DATASET_ID] Waiting for operation [projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID] to complete... Created dataset [DATASET_ID].
REST
Crea el conjunto de datos con el método
datasets.create
.Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
PROJECT_ID
: el ID de tu Google Cloud proyectoDATASET_ID
: un identificador sujeto a los requisitos de tamaño y caracteres permitidos del conjunto de datosLOCATION
: una ubicación admitida del conjunto de datosKEY_RESOURCE_ID
: el ID de recurso de una clave de Cloud KMS, con el formatoprojects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME
Cuerpo JSON de la solicitud:
{ "encryptionSpec": { "kmsKeyName": "KEY_RESOURCE_ID" } }
Para enviar tu solicitud, elige una de estas opciones:
curl
Guarda el cuerpo de la solicitud en un archivo llamado
request.json
. Ejecuta el siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:cat > request.json << 'EOF' { "encryptionSpec": { "kmsKeyName": "KEY_RESOURCE_ID" } } EOF
A continuación, ejecuta el siguiente comando para enviar tu solicitud REST:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets?datasetId=DATASET_ID"PowerShell
Guarda el cuerpo de la solicitud en un archivo llamado
request.json
. Ejecuta el siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:@' { "encryptionSpec": { "kmsKeyName": "KEY_RESOURCE_ID" } } '@ | Out-File -FilePath request.json -Encoding utf8
A continuación, ejecuta el siguiente comando para enviar tu solicitud REST:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets?datasetId=DATASET_ID" | Select-Object -Expand ContentExplorador de APIs
Copia el cuerpo de la solicitud y abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Pega el cuerpo de la solicitud en esta herramienta, rellena los campos obligatorios y haz clic en Ejecutar.
OPERATION_ID
. Necesitarás este valor en el siguiente paso.Obtén el estado de la operación de larga duración mediante el método
projects.locations.datasets.operations.get
.Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
PROJECT_ID
: el ID de tu Google Cloud proyectoLOCATION
: la ubicación del conjunto de datosDATASET_ID
: el ID del conjunto de datosOPERATION_ID
: el ID devuelto por la operación de larga duración
Para enviar tu solicitud, elige una de estas opciones:
curl
Ejecuta el comando siguiente:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"PowerShell
Ejecuta el comando siguiente:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand ContentExplorador de APIs
Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.
"done": true
, la operación de larga duración ha finalizado.
Determinar si un conjunto de datos está protegido por Cloud KMS
Puedes ver qué recursos protege cada una de las claves que has creado o que protegen tus conjuntos de datos de la API Cloud Healthcare mediante el seguimiento del uso de claves. Para obtener más información, consulta Ver el uso de las claves.
Rotación de claves
Cloud KMS admite la rotación de claves automática y manual a una nueva versión.
Al rotar una clave, ocurre lo siguiente:
- Los conjuntos de datos de la API Cloud Healthcare creados después de la rotación usarán la nueva versión de la clave para el cifrado y todas las operaciones.
- Los recursos de un conjunto de datos que estén cifrados con la clave no se volverán a cifrar automáticamente con la nueva versión de la clave principal.
Para que el cifrado funcione, todas las versiones de la clave deben estar disponibles. De lo contrario, el conjunto de datos de la API Cloud Healthcare se inhabilitará y se producirá un error en todas las solicitudes al conjunto de datos. Para obtener más información, consulta Consideraciones sobre las claves externas y Conjuntos de datos inhabilitados y eliminación permanente de conjuntos de datos.
Quitar el acceso de la API Cloud Healthcare a la clave de Cloud KMS
Tienes control sobre tus claves y puedes inhabilitarlas, destruirlas o revocar los permisos de la clave para que la API Cloud Healthcare no pueda acceder a los datos cifrados con CMEK. Cuando destruyes una clave o una versión de una clave asociada a un conjunto de datos de la API Cloud Healthcare, se pierden de forma permanente todos los datos cifrados con esa clave o versión de la clave.
Hay un retraso entre el momento en que inhabilitas una clave o una versión de clave y el momento en que deja de poderse usar. También hay un retraso entre el momento en que revocas los permisos de la cuenta de servicio del agente de servicio de Cloud Healthcare en la clave y el momento en que ya no se puede acceder a ella. Para obtener más información, consulta Coherencia de los recursos de Cloud KMS.
Exportar e importar datos a una instancia habilitada para CMEK
Para que tus datos sigan encriptados con una clave gestionada por el cliente durante una operación de exportación, debes definir una CMEK en el destino de almacenamiento antes de iniciar la exportación. No hay requisitos ni restricciones especiales para importar datos a un conjunto de datos cifrado con CMEK cuando se importan desde un almacenamiento no cifrado con CMEK o cifrado con CMEK.
Restricciones
- No se admite Justificaciones de Acceso a Claves con Cloud External Key Manager.
- Hay un límite de 10 conjuntos de datos de CMEK por proyecto en un periodo de 30 días. Esta cuota se aplica mediante la métrica de cuota
cmek_datasets
. - No se admite Controles de Servicio de VPC con CMEK.
- No se admiten las políticas de organización de CMEK.
Precios
Los conjuntos de datos se facturan de la misma forma, independientemente de si están cifrados con CMEK. Para obtener más información, consulta la página Precios de la API de Cloud Healthcare.
Cloud KMS te cobra tanto el coste de la clave como las operaciones criptográficas que se realicen con ella. Estas operaciones se producen cuando la API Cloud Healthcare usa la clave para encriptar o desencriptar. Estos costes serán mínimos, en función del número previsto de operaciones criptográficas generadas por la API Cloud Healthcare. Para obtener más información, consulta los precios de Cloud KMS.
Cuotas de Cloud KMS y API de Cloud Healthcare
Cuando usas CMEK en la API Cloud Healthcare, tus proyectos pueden consumir cuotas de solicitudes criptográficas de Cloud KMS.
Los conjuntos de datos de la API Cloud Healthcare cifrados con CMEK y sus almacenes DICOM, FHIR y HL7v2 consumen estas cuotas en todas las operaciones, excepto en datasets.get
.
Las operaciones de cifrado y descifrado con claves CMEK solo afectan a las cuotas de Cloud KMS si usas claves de hardware (Cloud HSM) o externas (Cloud EKM).
Para obtener más información, consulta las
cuotas de Cloud KMS.
Siguientes pasos
- Para obtener más información sobre las CMEK en general, incluido cuándo y por qué habilitarlas, consulta el artículo Claves de cifrado gestionadas por el cliente (CMEK).