De forma predeterminada, Google Cloud encripta los datos cuando están en reposo automáticamente a través de claves de encriptación administradas por Google. Si tienes requisitos normativos o de cumplimiento específicos relacionados con las claves que protegen los datos, puedes usar claves de encriptación administradas por el cliente (CMEK) para tus conjuntos de datos de la API de Cloud Healthcare. En lugar de que Google posea y administre las claves de encriptación que protegen tus datos, tus conjuntos de datos de la API de Cloud Healthcare se encriptan con una clave que tú controlas y administras en Cloud Key Management Service (Cloud KMS).
Para obtener más información sobre las CMEK en general, incluso cuándo y por qué habilitarlas, consulta Claves de encriptación administradas por el cliente (CMEK).
Antes de comenzar
Decide si tu conjunto de datos de la API de Cloud Healthcare y Cloud KMS estarán en el mismo proyecto de Google Cloud o en proyectos distintos. Para obtener orientación, consulta Separación de obligaciones.
A los efectos de la documentación, se usan las siguientes convenciones:
PROJECT_ID
: Es el ID del proyecto de la API de Cloud Healthcare.KMS_PROJECT_ID
: Es el ID del proyecto en el que se ejecuta Cloud KMS, que puede ser el mismo quePROJECT_ID
.
Para obtener información sobre los números y los ID de los proyectos de Google Cloud, consulta la sección Identifica proyectos.
Limitaciones
- Solo puedes usar claves de Cloud KMS cuando creas un conjunto de datos de la API de Cloud Healthcare. No puedes habilitar, cambiar ni inhabilitar claves de Cloud KMS en un conjunto de datos existente de la API de Cloud Healthcare.
- Solo se admiten almacenes FHIR, DICOM y HL7v2 en conjuntos de datos encriptados con CMEK. La protección de CMEK se aplica a los almacenes DICOM, FHIR y HL7v2 en el conjunto de datos y sus recursos.
- No puedes desidentificar los recursos encriptados con CMEK.
Operaciones de CMEK
Las claves de Cloud KMS se usan cuando se crea, lee, actualiza o borra un recurso encriptado con CMEK, y para tareas operativas, como la facturación o la verificación de que la clave esté disponible.
Consideraciones de claves externas
Para obtener información sobre el uso de claves que administras dentro de un sistema de socios de administración de claves externos compatible para proteger los datos en Google Cloud, consulta Cloud External Key Manager.
Si pierdes las claves que administras fuera de Google Cloud, Google no puede recuperar tus datos.
Falta de disponibilidad de claves y pérdida de datos
Si una clave encripta un conjunto de datos y esa clave deja de estar disponible y permanece así, la API de Cloud Healthcare inhabilita el conjunto de datos y, finalmente, lo borra. A veces, una clave deja de estar disponible si se inhabilita o destruye, o si no se puede acceder a ella debido a la revocación de permisos, pero este comportamiento se produce si la clave no está disponible por algún motivo. El nivel de protección de la clave o si es una clave externa no afecta este comportamiento. Las claves externas también pueden dejar de estar disponibles de forma impredecible. Por ejemplo, pueden surgir problemas de conectividad entre tus recursos de Google Cloud y tu EKM.
En el siguiente proceso, se describe cómo se verifica la disponibilidad de las claves y cómo se puede inhabilitar y borrar un conjunto de datos:
Después de crear un conjunto de datos de la API de Cloud Healthcare encriptado con CMEK, la API de Cloud Healthcare verifica el estado de la clave cada cinco minutos para asegurarse de que esté disponible. Si la clave no está disponible, la API de Cloud Healthcare seguirá admitiendo solicitudes al conjunto de datos durante una hora.
Después de una hora, si la API de Cloud Healthcare aún no puede conectarse con Cloud KMS, el conjunto de datos de la API de Cloud Healthcare se inhabilita como medida de protección. Para volver a habilitar el conjunto de datos de la API de Cloud Healthcare, comunícate con tu representante de asistencia.
Cuando está inhabilitada, solo puedes enviar solicitudes
datasets.get
ydatasets.delete
al conjunto de datos de la API de Cloud Healthcare. Otras solicitudes fallan con un error400 FAILED_PRECONDITION
.Si el conjunto de datos de la API de Cloud Healthcare no está disponible durante más de 30 días, se borrará de forma permanente. También se borrarán todos los almacenes de DICOM, FHIR y HL7v2 del conjunto de datos y sus datos asociados. Si se borran, estos datos no se podrán recuperar.
Creación de claves
En las siguientes secciones, se describe cómo crear un llavero de claves y una clave de Cloud KMS. Solo se admiten claves de encriptación 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 llavero de claves en una ubicación que coincida con la región o multirregión de tu conjunto de datos de la API de Cloud Healthcare.
Cualquier conjunto de datos multirregional de la API de Cloud Healthcare debe usar un llavero de claves multirregional desde una ubicación que coincida. Por ejemplo, un conjunto de datos de la API de Cloud Healthcare en la región
us
debe protegerse con un llavero de claves de la regiónus
, y un conjunto de datos de la API de Cloud Healthcare en la regióneu
debe protegerse con un llavero de claves de la regióneurope
.Los conjuntos de datos regionales de la API de Cloud Healthcare deben usar claves regionales que coincidan. Por ejemplo, un conjunto de datos de la API de Cloud Healthcare en la región
asia-northeast1
debe protegerse con un llavero de claves de la regiónasia-northeast1
.No puedes usar la región
global
cuando configuras CMEK para un conjunto de datos de la API de Cloud Healthcare.
Para obtener más información, consulta Ubicaciones de la API de Cloud Healthcare y Ubicaciones de Cloud KMS.
Crea un llavero de claves y una clave
Completa los siguientes pasos en el proyecto de Google Cloud que ejecuta Cloud KMS:
Otorga permisos de encriptación y desencriptación
Para proteger tus datos de la API de Cloud Healthcare con una clave de Cloud KMS, otorga a la cuenta de servicio de Cloud Healthcare Service Agent el rol de encriptador/desencriptador de CryptoKey (roles/cloudkms.cryptoKeyEncrypterDecrypter
) en esa clave. Para obtener instrucciones, consulta Permisos de CMEK de los conjuntos de datos.
Después de otorgar el rol a la cuenta de servicio, la API de Cloud Healthcare puede encriptar y desencriptar recursos encriptados con CMEK. Tus aplicaciones no necesitan especificar claves cuando leen o escriben datos. La API de Cloud Healthcare controla la encriptación.
Cuando un solicitante lee o escribe un objeto encriptado con una clave de Cloud KMS, accede al objeto como de costumbre. Durante la solicitud, el agente de servicio encripta o desencripta automáticamente el objeto solicitado, siempre y cuando se cumplan las siguientes condiciones:
- El agente de servicio todavía tiene los permisos necesarios.
- La clave está disponible y habilitada.
Crea un conjunto de datos de la API de Cloud Healthcare encriptado con CMEK
En los siguientes ejemplos, se muestra cómo crear un conjunto de datos encriptado con CMEK.
Debes especificar un ID de recurso de clave de Cloud KMS cuando crees el conjunto de datos. Esta clave distingue mayúsculas de 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 Obtén un ID de recurso de Cloud KMS.
Console
En la consola de Google Cloud, ve a la página Navegador.
Haz clic en add_boxCrear conjunto de datos. Se mostrará la página Crear un conjunto de datos.
En el campo Nombre, ingresa un identificador para el conjunto de datos sujeto a los requisitos de tamaño y caracteres permitidos del conjunto de datos.
Selecciona uno de los siguientes tipos de ubicación:
Region. El conjunto de datos reside de forma permanente dentro de una región de Google Cloud. 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 de forma permanente en una ubicación que abarca varias regiones de Google Cloud. Después de seleccionar esta opción, escribe o selecciona una ubicación multirregional en el campo Multirregión.
En la sección Encriptación, selecciona uno de los siguientes tipos de encriptación:
Clave de encriptación administrada por Google: Es el método de encriptación predeterminado. Usa este método si deseas que Google administre las claves de encriptación que protegen tus datos en este conjunto de datos de la API de Cloud Healthcare.
Clave de Cloud KMS: Usa una clave de encriptación administrada por el cliente (CMEK).
Haz clic en Crear. Se mostrará la página Navegador. El conjunto de datos nuevo aparecerá en la lista de conjuntos de datos.
gcloud
Crea el conjunto de datos con el comando gcloud healthcare datasets create
.
Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:
DATASET_ID
: Un identificador sujeto a los requisitos de tamaño y caracteres permitidos del conjunto de datos.LOCATION
: Una ubicación compatible para el conjunto de datosKEY_RESOURCE_ID
: El ID de recurso de una clave de Cloud KMS, en 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 que figura a continuación:
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 cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
PROJECT_ID
El ID de tu proyecto de Google Cloud.DATASET_ID
: Un identificador sujeto a los requisitos de tamaño y caracteres permitidos del conjunto de datos.LOCATION
: Una ubicación compatible para el conjunto de datosKEY_RESOURCE_ID
: El ID de recurso de una clave de Cloud KMS, en 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 comando siguiente en la terminal para crear o reemplazar este archivo en el directorio actual:cat > request.json << 'EOF' { "encryptionSpec": { "kmsKeyName": "KEY_RESOURCE_ID" } } EOF
Luego, ejecuta el siguiente comando para enviar tu solicitud de 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 comando siguiente en la terminal para crear o reemplazar este archivo en el directorio actual:@' { "encryptionSpec": { "kmsKeyName": "KEY_RESOURCE_ID" } } '@ | Out-File -FilePath request.json -Encoding utf8
Luego, ejecuta el siguiente comando para enviar tu solicitud de 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 API
Copia el cuerpo de la solicitud y abre la página de referencia del método. El panel del Explorador de API 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, completa cualquier otro campo obligatorio y haz clic en Ejecutar.
OPERATION_ID
. Necesitarás este valor en el paso siguiente.Obtén el estado de la operación de larga duración con el método
projects.locations.datasets.operations.get
.Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
PROJECT_ID
El ID de tu proyecto de Google Cloud.LOCATION
: La ubicación del conjunto de datos.DATASET_ID
: El ID del conjunto de datosOPERATION_ID
: Es el ID que muestra la operación de larga duración.
Para enviar tu solicitud, elige una de estas opciones:
curl
Ejecuta el siguiente comando:
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 siguiente comando:
$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 API
Abre la página de referencia del método. El panel del Explorador de API se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Completa los campos obligatorios y haz clic en Ejecutar.
"done": true
, significa que la operación de larga duración finalizó.
Determina si un conjunto de datos está protegido por Cloud KMS
Para cada una de las claves que creaste o que protegen tus conjuntos de datos de la API de Cloud Healthcare, puedes ver qué recursos protege esa clave con el seguimiento de uso de las claves. Para obtener más información, consulta Visualiza el uso de claves.
Rotación de claves
Cloud KMS admite la rotación de claves automática y manual a una versión nueva.
Rotar una clave genera lo siguiente:
- Los conjuntos de datos de la API de Cloud Healthcare creados después de la rotación usan la nueva versión de la clave para la encriptación y todas las operaciones.
- Los recursos de un conjunto de datos existente que se encriptan con la clave no se vuelven a encriptar de forma automática con la nueva versión de clave primaria.
Para que la encriptación funcione, todas las versiones de clave deben estar disponibles. De lo contrario, se inhabilita el conjunto de datos de la API de Cloud Healthcare y fallan todas las solicitudes al conjunto de datos. Para obtener más información, consulta Consideraciones sobre claves externas y Conjuntos de datos inhabilitados y eliminación permanente de conjuntos de datos.
Quita el acceso de la API de Cloud Healthcare a la clave de Cloud KMS
Tienes control sobre tus claves y puedes inhabilitar, destruir o revocar los permisos de la clave para que la API de Cloud Healthcare no pueda acceder a los datos encriptados con CMEK. Después de destruir una clave o una versión de clave asociada con un conjunto de datos de la API de Cloud Healthcare, se perderán de forma permanente todos los datos encriptados con esa clave o versión de clave.
Hay una demora entre el momento en que inhabilitas una clave o una versión de clave y el momento en que ya no se puede usar. También hay una demora entre el momento en que revocas los permisos de la cuenta de servicio del agente de servicios 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 recursos de Cloud KMS.
Exporta e importa datos a una instancia con CMEK habilitadas
Para mantener tus datos encriptados con una clave administrada por el cliente durante una operación de exportación, debes establecer una CMEK en el destino de almacenamiento antes de comenzar la exportación. No existen requisitos ni restricciones especiales para importar datos a un conjunto de datos encriptado con CMEK cuando se importa desde un almacenamiento no CMEK o encriptado con CMEK.
Restricciones
- No se admiten Key Access Justifications con Cloud External Key Manager.
- Hay un límite de 10 conjuntos de datos de CMEK por proyecto en un período de 30 días. La métrica de cuota
cmek_datasets
aplica esta cuota. - Los Controles del servicio de VPC con CMEK no son compatibles.
- No se admiten las políticas de la organización de CMEK.
Precios
Los conjuntos de datos se facturan de la misma manera, independientemente de si están encriptados con CMEK. Para obtener más información, consulta Precios de la API de Cloud Healthcare.
Cloud KMS te factura el costo de la clave y todas las operaciones criptográficas que se realicen en ella. Estas operaciones se producen cuando la API de Cloud Healthcare usa la clave para la encriptación o desencriptación. Se espera que estos costos sean mínimos, según la cantidad esperada de operaciones criptográficas que genera la API de Cloud Healthcare. Para obtener más información, consulta Precios de Cloud KMS.
Cuotas de Cloud KMS y API de Cloud Healthcare
Cuando usas CMEK en la API de Cloud Healthcare, tus proyectos pueden consumir cuotas de solicitudes criptográficas de Cloud KMS. Los conjuntos de datos de la API de Cloud Healthcare encriptados con CMEK y sus almacenes DICOM, FHIR y HL7v2 consumen estas cuotas para todas las operaciones, excepto datasets.get
. Las operaciones de encriptación y desencriptación con claves CMEK afectan las cuotas de Cloud KMS solo si usas claves de hardware (Cloud HSM) o externas (Cloud EKM).
Para obtener más información, consulta Cuotas de Cloud KMS.
¿Qué sigue?
- Para obtener más información sobre las CMEK en general, incluso cuándo y por qué habilitarlas, consulta Claves de encriptación administradas por el cliente (CMEK).